Всем привет, с вами Артем Леванов, Front Lead в WebRise. Когда тебе, как члену жюри, приходится выбирать лучшую работу среди сильных участников, на первый план выходят не только pixel-perfect, но и детали, которые создают ощущение качественного продукта. В чем была наша задача на чемпионате по верстке от HTML Academy, с какими работами мы столкнулись и какие решения заслуживают отдельного внимания — разбираю на реальных примерах финалистов.
Описание чемпионата
Двенадцатого сентября завершился чемпионат по верстке от HTML Academy. Участвовал в качестве жюри, где оценивал шесть финальных работ. Критериев было много, и они довольно строгие. Они подробно описаны в статье от академии (ссылка).
В качестве макета участникам предложили макет сайта Paratype, который собрал множество наград на различных конкурсах. Сам макет был немного оптимизирован под чемпионат. Участниками были начинающие разработчики. Макет для них довольно сложный, а js нужно было делать только свой, без использования библиотек. Сборки можно было использовать любые, но участники в основном использовали сборки, которые давались на курсах академии. На реализацию проекта было выделено 2 недели.
Что требовалось от жюри
Задача жюри заключалась не в проверке формального соответствия критериям (это сделали другие), а в целостной оценке проекта — как если бы мы принимали готовую работу у коллеги. Можно было руководствоваться любыми принципами, но для меня ключевым стал пользовательский опыт: насколько удобно, приятно и современно выглядит итоговый продукт.
Выбранные работы
Поскольку общий уровень работ был высоким, я искал работы, которые выделяются нестандартными, но при этом технически грамотными решениями. В своей тройке лидеров я выделил работы Степана, Анастасии и Кристины.
Степан (5 баллов)
Работа Степана — пример качественного и добротного исполнения по всем стандартам. Она показала самый высокий балл по техническим критериям Академии
Из плюсов отметил хорошую анимацию меню по наведению.
В сетке с промо шрифтами реализовано пропорциональное уменьшение элементов в зависимости от ширины экрана. Прекрасный вариант заботы о пользователях, у которых устройства попадают между заложенными брейкпоинтами.
Все интерактивные элементы имеют анимацию взаимодействия.
Из минусов отметил, что почти все анимации с интерактивными элементами просто меняют прозрачность, она не очень выразительна и часто не заметна для пользователя. Это формализует подход к такой важной части и не хватает оригинальности в этом компоненте.
В пиктограммах со шрифтами используется img, что не позволяет хорошо анимировать данный блок. Было бы интереснее, если бы вставлялся непосредственно svg.

В меню на адаптиве не хватило проработки и оно съезжает, что визуально ломает дизайн.

Эти недостатки могли не так сильно бросаться в глаза, если бы у остальных участников было так же. Однако в других работах эти места проработаны и это выгодно выделяло их на фоне работы Степана.
Анастасия (10 баллов)
Хорошая работа с множеством приятных решений.
Отлично реализован свитч переключателя темы. Плавные анимация, работает по табу.
Проработана его доступность:

Понравилось решение для смены цвета иконок через mask. Это относительно новые css, который стал доступен не так давно, в начале 2024го года.
.theme__label {
--bg-color: #{$color-text-basic};
--icon: url("/__spritemap#sprite-sun-view");
box-sizing: border-box;
display: grid;
grid-template-columns: 20px 1fr;
align-items: center;
min-height: 40px;
padding: calc(10px / $mobile-size \* 100vw);
font-weight: 600;
font-size: 12px;
text-transform: uppercase;
color: $color-text-basic;
transition: color 0.3s;
cursor: pointer;
@media #{$tablet-width} {
padding: 20px;
font-size: 16px;
}
@media #{$desktop-width} {
grid-template-columns: 1fr;
justify-items: center;
width: 40px;
padding: 0;
}
&::before {
content: "";
width: 20px;
height: 20px;
background-color: var(--bg-color);
mask-image: var(--icon);
mask-position: center;
mask-size: 100% 100%;
mask-repeat: no-repeat;
transition: background-color 0.3s transform 0.3s;
}
}
.theme__label--dark {
--icon: url("/__spritemap#sprite-moon-view");
padding: 10px 20px 10px 15px;
@media #{$desktop-width} {
padding: 0;
}
}
.theme__label--light {
--bg-color: #{$color-white};
color: $color-white;
}
.theme__toggle--dark .theme__label--light {
--bg-color: #{$color-text-basic};
color: $color-text-basic;
}
.theme__toggle--dark .theme__label--dark {
--bg-color: #{$color-white};
color: $color-white;
}
Следующим плюсом для меня стал грамотный адаптив с пропорциональным уменьшением блоков между брейкпоинтами, который сохраняет сетку и заложенный дизайн.
Очень понравилась анимация в двух блоках промо баннера. Не стандартно и в точку.
Хорошая попытка анимации пиктограмм со шрифтами. Однако стоило бы вместо img, для картинки шрифтов, использовать svg и переход в белую анимацию самого шрифта, как мы увидим в следующей работе.

Из недочетов, отмечу меню модалки, которое не заполняет в открытом состоянии весь экран.

Цифры в кружках не по центру на мобильной версии.

В целом это достойная работа джуниор разработчика.
Кристина (15 баллов)
Пожалуй самая стильная и смелая работа. Из плюсов отмечу сразу пропорциональное уменьшение размеров при адаптиве. Самое большое кол-во блоков реализовано, работают корректно.
Вот пример меню:
Пример блока с промо шрифтами
Прекрасная реализация анимации пиктограмм со шрифтами. Шрифты в виде svg, при наведении меняют цвет, смотрится эффектно и профессионально. Адаптив пиктограмм сделан хорошо. Нет переносов, как т��лько экран меньше длины всего блока, начинает работать скролл.
Отличная, реализация переключателя switch. Плавная анимация, подсветка. Подсветка правда только для ночной темы. Не хватает ее для дневной темы.
Отличное применение -webkit-tap-highlight-color для скрытия синего фона при тапе. Работает везде. Сравните
Реализация Кристины
Другие реализации
Из минусов отмечу блок с описанием шрифта, который закрывается уже при наведении на вылетевшее описание
Нет анимации переключения сетки промо шрифтов.
Данная работа не опирается на какие-то однотипные практики или варианты реализации на оригинальном сайте, а предлагает свои решения, которые во многом удачны и даже лучше оригинала. Именно с точки зрения пользовательского опыта эта работа мне понравилась больше всего, поэтому ей был отдан наивысший балл.
Итоги
Итоговый лайв с HTML Academy и другими членами жюри стал яркой точкой в чемпионате. Мы подробно разобрали работы, обсудили сильные стороны каждого участника и с трудом, определили победителя — им стала Анастасия. Выбор победителя был особенно сложным, ведь работы финалисток были превосходно проработаны.
Хочу выразить благодарность HTML Academy за доверие и возможность оценить такие сильные проекты, которые уже приближаются к уровню middle-разработчика. Это был невероятно позитивный и вдохновляющий опыт.
Важно отметить, что все финалисты не просто следуют макету, а предлагают собственные, зачастую более удачные, решения и уверенно идут в ногу с современными подходами к вёрстке. Уверен, троих финалистов ждут большие успехи в карьере. Наши поздравления!
Запись эфира доступна по ссылке.