Если возможно под Линукс бы
Глянул на ПК. Да теперь норм - удерживается в области видимости.
Визуал: в темной теме цвет текста вопроса так же темный - я постоянно вместо вопроса читал описание теста - т.к. оно выделяется.
Кстати, заставь ЛЛМ проводить тест на контрастность. :)
Так я и сказал, что здесь он подходит. Другое дело сайты где дизай важен, где важно минимальное количество элементов дум на странице. Когда в адаптиве есть объективная необходимость в более детальных шагах по ширине браузера. В общем где по мелочи набирается...
Это не конкретно про твой сайт. А в принципе про сервисы связанные с обучением. Я к тому что здесь ненужно изгаляться и создавать некий уникальный дизайн ни как у всех
попробовал пройти тест (гостем).
Небольшие наблюдения:
1. Плашка о куках на ПК выглядит так будто бы там напрашивается flex-direction: column; (но это конечно вкуовщина)
2. Когда открывается очередной вопрос то прокрутка встает на описание тест - приходится каждый раз листать, чтобы видеть вопрос и варианты ответов - утомляет :)
3. Хорошо бы иметь вариант прохождения когда подсвечиваются вопросы которые проведены не правильно. Опционально. Т.е. если тест проходится по требованию преподавателя - без подсветки, если я сам решил пройти тест для себя - выбираю режим в соответствии с своей задаче
PS ИМХО про бутсрап (который, мне кажется, уже потерял лидерство в своем классе). Я конечно не СЕО, но как пользователь я бы хотел, чтоб на сайтах подобного класса был унифицированный дизайн. Потом самое место бутстрапу и аналогам (и уж точно им место в админках) ю. Хотя, если честно, мне они очень не нравятся в качестве фреймворков :) - слишком много порой оверхеда. Но это уже все по задаче и по бюджету.
Мне кажется в "Общем случае" в идеале проект должен проходить уровень 10 без ошибок. Но не всегда этот идеал оправдан. и тут уже зависит от конкретики проекта. И, как правило, например проекты подобные фреймворкам (т.е. пользоваться ими будут другие разработчики в разных проектах с разными взглядами и подходами) - чуть ли не обязаны. (правда у меня фреймворк остановился на 6ом, а шаблонизатор на 8. (надо будет освежить память "почему" :) )
На мой взгляд для старых надо поднимать до максимально возможного, но оценивая цену внесения правок, на новых вообще начинать с максимального и понижать только при объективной необходимости. (правда, если честно не следую этому правилу)
А так вот подобрал примерчик (в комментариях на каком уровне появляется ошибка)
/** * @param array{connection:string,status?:string} $row */function foo(array $row): void{ // 1 На уровне 7: Offset 'status' might not exist on array{connection: string, status?: string}. $status = $row['status'] ; echo "test"; }class Example { public function test(?string $value): void { // 2 На уровне 8: Parameter #1 $string of function strlen expects string, string|null given. echo strlen($value); }}/** * @param array<string,mixed> $data */function foo1(array $data): string { $name = $data['name']; // 3 На уровне 9: Function foo1() should return string but returns mixed. return $name;}
1. Согласись потенциально возможное место для бага. Особенно если метод будет длинный.
2. Тут тоже от ситуации. Причем если пользователи только мы (и писали этот код не давно) еще ни чего. а вот если пользователь другой или мы через 100 лет. вдруг если передать null и результат 0 - это будет некорректно для логики.
3. Ну тут тоже повод для багов. вот упрощенные примеры
/** * @param array<string,mixed> $data */function bar(array $data): string { $name = $data['name']; return $name;}// ============================================// Данные пришли из JSON API// ============================================$jsonInput = '{"name": null, "email": "test@example.com"}';$data = json_decode($jsonInput, true); $userName = bar($data); $query = "INSERT INTO users (name) VALUES ('" . $userName . "')"; // INSERT INTO users (name) VALUES ('') /** * @param array<string,mixed> $row */function getUserName(array $row): string { return $row['name']; }$dbRow = ['name' => null, 'email' => 'user@example.com'];$name = getUserName($dbRow); $query = "SELECT * FROM users WHERE name = '{$name}'";// Выполнится: WHERE name = '' — вернёт всех пользователей с пустым именем!
(только не придирайся к выбранному примеру с именем пользователя - суть не в таких деталях :).
Эта инструкция нужна только тем, кто не соблюдает простейшие стандарты де-факто вебразработки. Таковых бесконечно мало. Большинству достаточно одной командой поставить стан и типовой конфиг взять.
Но в любом случае PHPStan поможет найти скрытые баги и сделать код надежнее, даже если структура проекта нестандартная.
Шаг 1. Необходимо установить PHPStan https://github.com/phpstan/phpstan
parameters: phpVersion: 80100 bootstrapFiles: - bootstrap.php # подключить существующий загрузчик level: 9 # начать с минимального уровня paths: - node/ - skin/ - mods/
Конечно инструмент не скажет "вот это замени на это". Т.е. ошибку надо будет понять, проанализировать и исправить. Т.е. эта не халява отменяющая необходимость знаний. Этот инструмент только подсветит проблему.
Бдит стан за многим. Понимаю, что ты себя считаешь очень знающим, но рекомендую править. Т.к. если кто то будет пользоваться твоим фреймворком, это поможет избежать неоднозначностей. Для примера таких ситуаций:
/*** @param list<int> Входящий параметр* @result array<string,float> Результат*/function foo(array $props):array{ ...}