Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе.
— Никита, представься пожалуйста — расскажи нашим читателям о себе всё, что считаешь нужным.
— Меня зовут Никита Михайлов, занимаюсь разработкой порядка 8 лет. Начинал как веб-мастер, который на все руки. В небольшой веб-студии мы разрабатывали сайты, верстали. Писали код на PHP, JavaScript.
Сейчас развиваю программу «Верстальщик» на Хекслете. Пишу курсы, делюсь своими знаниями и опытом, который приобрёл за годы работы в разработке.
— Кем ты себя считаешь в первую очередь: преподавателем, разработчиком, программистом, верстальщиком?
— Наверное, это можно назвать «верстальщик-исследователь». То есть я передаю студентам знания, но при этом сам слежу за трендами, знаю, что происходит в разработке, изучаю новые вещи, необычные сочетания вещей, пытаюсь донести студентам, как можно сделать то или это. С одной стороны, это преподавание, а с другой — исследовательская работа. И в следующую очередь я разработчик.
— То есть сочетаешь практику и теорию: преподаёшь и что-то делаешь руками, правильно?
— Конечно. Чтобы написать курсы, упражнения, давать какие-то уроки, ты не можешь устраняться от самой разработки, потому что потеряешь весь скилл. Невозможно просто писать курсы, не занимаясь разработкой.
Когда я только пришёл на Хекслет, я что-то верстал на нашем сайте и на Code Basics какие-то вещи делал. Поэтому, мне кажется, преподаватель должен быть действующим разработчиком. Просто преподавание для меня — вершина, моя основная деятельность.
Для вёрстки большие компании ищут матёрых ребят, но войти в разработку через вёрстку можно: о ситуации на рынке труда
— Предыдущий вопрос был с подвохом, он поможет нам сразу взять быка за рога и перейти к обсуждению принципиальных вопросов. Первый из них: у нас на Хекслете ты в первую очередь развиваешь профессию «Верстальщик». Востребованы ли чистые верстальщики на рынке труда? Или вёрстку стоит рассматривать как часть других профессий, например, как часть фронтенд-разработки?
— Наверное, нельзя сказать, что чистые верстальщики, особенно джуны, так же востребованы на рынке, как JavaScript-разработчики или PHP-, Python-разработчики. Начинающих верстальщиков ждут на рынке не так охотно, как программистов.
Для вёрстки большие компании ищут матёрых ребят, которые понимают не только как сверстать, но и почему нужно сделать так, а не иначе, как это будет работать в других браузерах или на мобильных экранах.
Но войти в разработку через вёрстку можно. Я посмотрел сейчас на «Хедхантере» — по запросу «HTML-верстальщик» есть 121 вакансия. Это не считая заказы на фрилансе, подработок.
Надо понимать, что мало кто хочет быть чистым верстальщиком. Многие считают вёрстку одним из этапов становления фронтенд-разработчика.
— Попробуем зайти с другой стороны: сейчас есть тенденция разделять верстальщиков и фронтенд-программистов. Первые создают layout и стилизуют элементы, а вторые занимаются интерактивностью и логикой. Как ты считаешь, это правильное разделение? Во фронтенде рулит специализация, или всё-таки рынку нужны разработчики-универсалы, которые умеют классно верстать и программировать?
— Считаю, что сейчас больше выделяется специализация, потому что набор того, что должен знать фронтендер и какими инструментами он должен владеть, слишком большой. Он настолько большой, что один человек не может быть одинаково сильным во всём.
Понятно, что фронтенд-разработчик должен знать и вёрстку, и JavaScript, понимать, как это всё работает. Но в профессиональной среде есть разделение. Одни погружаются в JavaScript, глубоко знают JS-фреймворки, а другие уходят в сторону стилизации, работы с дизайном, UI, UX и так далее.
То есть разделение есть, и оно обусловлено невероятным количеством инструментов, которые используются во фронтенде.
— Никита, ты говоришь, что фронтендеры должны знать слишком много инструментов. А мы можем сказать, что бэкендарам здесь больше повезло? Что им достаточно выучить сервер, базы данных, и можно работать.
— Нельзя сказать, что работа бэкендера проще. Просто у бэкендеров проще схема развития. Действительно, они изучают сервер, базы данных. Также изучают серверный язык программирования, например, Go, PHP, Python и так далее. И у них эта ветка более понятная.
У бэкендеров тоже есть разделение. Кто-то работает условно больше с базами данных, занимается оптимизацией запросов. Кто-то пишет внутреннюю логику самого проекта. Но во фронтенде всё равно больше инструментов.
Тем не менее это не значит, что войти в бэкенд-разработку проще. Пусть там меньше инструментов, но там надо глубже понимать какие-то вещи, например, алгоритмы, нужно лучше знать паттерны, на которых всё строится. Фронтенд-разработчикам здесь чуть проще, хотя это достаточно холиварный вопрос.
— Знаю людей, которые говорят, что вёрстка — это скучно, что это больше механическая работа. А вот программирование — это интересно, это творческие задачи. Согласен с этим? Лично тебе больше нравится верстать или программировать? Может, ты не разделяешь эти процессы?
— Мне больше нравится верстать, иначе я не преподавал бы вёрстку. Но здесь надо понимать, для чего люди приходят в разработку. Многие приходят, чтобы писать сложную логику, обрабатывать запросы и так далее. Других интересует внешний вид приложения или сайта. Если вас интересует второе, вёрстка вам понравится.
Я не считаю вёрстку механической работой. Да, на базовом уровне можно подставить там блок, здесь блок. Но чем дольше работаешь с вёрсткой, тем больше замечаешь нюансов, которые нужно учитывать.
— А что проще — верстать или программировать? Можно ли назвать вёрстку плавным входом в разработку?
— На первых порах, наверное, да. Когда мы берём первые месяцы изучения технологий, когда человек с нуля приходит в разработку, ему проще начать с вёрстки. Дело даже не в том, что вёрстка проще программирования. Для новичка процесс и результат работы будет нагляднее.
Начинающий верстальщик что-то изучает, делает, открывает браузер и видит результат. Я, например, вспоминаю изучение программирования в колледже. Мы писали исключительно консольные программы, передавали данные внутри сети, работали с пакетами. Это круто, но невозможно оценить результат визуально. В такой ситуации можно быстро выгореть. А вёрстка даёт возможность увидеть и прикоснуться к тому, что ты изучаешь.
Если погружаться в вёрстку глубже, уже нельзя однозначно сказать, что она проще программирования. Нужно понимать различия в браузерах, работать с доступностью, изучать тонны литературы, владеть тоннами инструментов. Поэтому по мере углубления в проблематику вёрстка перестаёт быть простой.
— То есть здесь нужно предостеречь от шапкозакидательства начинающих разработчиков, которые уделяют внимание только программированию и думают, что легко освоят вёрстку позже, потратят на изучение месяц или два и готово?
— Легко верстать не получится. Всё зависит от того, до какого уровня специалист хочет погрузиться в вёрстку. Если нужно просто накидать пару блоков, то да, можно изучить минимум информации за месяц или два. Но чтобы верстать большие проекты, нужно долго учиться и работать над практическими задачами.
— Традиционный для последних лет вопрос: роботы могут заменить верстальщиков? Уже сейчас есть шаблонизаторы, есть программы, которые умеют превращать простенькие макеты в веб-страницы. Значит ли это, что чистым верстальщикам надо как-то задуматься, изучать дополнительные инструменты, чтобы оставаться конкурентоспособными на рынке труда?
— Самое смешное, что такое же мнение я слышал много лет назад, когда учился в колледже. Была известная программа Dreamweaver от студии Macromedia, потом её выкупил Adobe. В ней можно было накидывать какой-то дизайн, а на выходе получать вёрстку.
Да, это работало, программа действительно выдавала вёрстку, и в браузере эта вёрстка смотрелась нормально. Но это было абсолютно неподдерживаемое решение. Внутри всё версталось настолько отвратительно, что думать о каких-то изменениях было невозможно. Там шаг влево, шаг вправо — и всё разваливалось.
Для тех, кто понимает о чём речь — в этой программе вся вёрстка строилась на абсолютном позиционировании. Через какое-то время у Adobe вышла новая программа. Суть была той же, но программа лучше работала с мобильными устройствами. Сейчас программы нет, этот проект закрыт. Алгоритмы снова не смогли заменить верстальщиков, хоть справлялись с вёрсткой лучше, чем Dreamweaver.
Чистая вёрстка сама по себе мало где используется. Недостаточно просто сверстать макет и выложить его в интернет. Скорее всего это должно работать на какой-то CMS или с каким-то фреймворком. Если мы не говорим о лендингах, нужен ещё какой-то бэкенд. И вот здесь все эти программы для вёрстки не очень подходят, так как они не создают логических компонентов, выделенных модулей. Непонятно, как такую вёрстку разделить, чтобы просто передать на бэкенд.
То есть программы для вёрстки выдают монолитные приложения, с которыми невозможно что-то сделать. А одна из основных функций верстальщика — правильно разбивать вёрстку на компоненты, которые можно переиспользовать.
— То есть чистым верстальщикам прямо сейчас не надо никуда бежать, что-то быстро изучать, их через полгода роботы не заменят?
— Я считаю, что всегда надо что-то изучать. Когда верстальщик, фронт- или бэкенд-разработчик перестаёт учиться, он умирает как специалист. Если брать HTML, CSS, какие-то фреймворки для них, забрасывать их изучение не надо. Не думаю, что в обозримом будущем верстальщики станут ненужными.
Понятно, что сейчас появляются нейросети, потом мы дойдём до квантовых компьютеров. Возможно, это когда-то как-то повлияет на рынок вёрстки. Но сейчас компьютерам сложно предусмотреть все варианты.
Надо понимать, что одна из главных проблем верстальщиков не в том, как ты сверстаешь страницу, а в том, как люди будут её использовать. Это очень интересный момент, потому что ты разрабатываешь один сценарий, а люди пользуются совершенно другим. Тебе нужно это учитывать. А нейросеть сама не может этого делать. Пока не может. Поэтому живой человек будет востребован на рынке вёрстки до тех пор, пока, скажем, нас всех не чипируют.
— Насколько необходимо знать вёрстку специалистам, которые не занимаются фронтендом или даже веб-разработкой вообще. Например, человек программирует контроллеры или занимается машинным обучением. Нужны ли ему знания HTML и CSS?
— Смотря что мы имеем в виду. Если это бэкенд-разработчик, контент-менеджер, то на каком-то базовом уровне им желательно знать вёрстку. Всё равно всё что они делают в конечном итоге превращается в вёрстку, которая отрисовывается в браузере.
Если продукт разработчика не связан с веб-разработкой, с браузером, например, это какие-то научные исследования, глубокие расчёты, или это бэкендер, который работает только с базами данных, возможно, им вёрстка не нужна. Разве что только для собственного развития.
Джуниору полезно знать HTML- и CSS-препроцессоры: об инструментах верстальщика
— Плавно переходим к инструментам и технологиям. Что нужно знать новичку, чтобы претендовать на позицию верстальщика-джуниора? Если можно, прямо перечисли минимальный набор знаний и умений.
— В каждой вакансии для верстальщиков есть строчка «требуется знать HTML и CSS». Это очень расплывчатая формулировка, трудно понять, что именно нужно знать. Если говорить о джуниорах, им нужно знать и понимать такие вещи:
- Семантическую вёрстку
- Поток документа и как он работает
- Основные модули CSS, например, Flex. С гридами не всё однозначно, кто-то их требует, кто-то нет, но знать их полезно
Это базовый набор знаний HTML5 и CSS3, который нужен джуну. Можно ещё включить переменные, какие-то другие новые вещи. Даже джуну стоит смотреть спецификации и изучать новые технологии.
Полезно знать CSS-методологии, хотя бы несколько. Методология — это набор правил, которые мы используем для структурирования CSS. Здесь есть много подходов. Наверное, самый популярный — БЭМ или Блок, Элемент, Модификатор. Он используется в Яндексе. Можно спорить о достоинствах и недостатках этой методологии, но она самая популярная в российском сегменте разработки. Этого нельзя сказать о зарубежном сегменте.
На Западе популярны объектно-ориентированный CSS, SMACSS, атомарный CSS. Атомарный, наверное, в меньшей степени. Но всё равно он встречается в фреймворках. Фреймворки тоже желательно знать. Наверное, самый популярный фреймворк — Bootstrap. Ещё есть Tailwind CSS, UIKit. Хотя бы один из них стоит выучить. Даже если в компании, в которой вы хотите работать, используют другой фреймворк, благодаря изучению Bootstrap вы будете понимать, что такое фреймворки и как с ними работать.
Джуниору полезно знать HTML- и CSS-препроцессоры. Тут можно выбирать на свой вкус. Можно смотреть на синтаксис: что нравится, что нет. Если вы работали с одним препроцессором, переключиться на другой будет просто.
Ещё нужны общие знания. Например, работа с Git — без него не получится. Многие новички пропускают изучение систем контроля версий, думают, что освоят их на работе. Конечно, на работе вы их освоите, но сначала наломаете дров. Надо понимать, что многие работодатели даже на этапе собеседования просят ссылку на GitHub. Они смотрят даже учебные проекты, оценивают, умеет ли кандидат работать с Git.
И ещё один момент — хотите или нет, но базовые знания JavaScript вам понадобятся. Это обязательно для верстальщика, так как многие взаимодействия с пользователем всё-таки происходят через JavaScript. HTML и CSS постоянно совершенствуются, в них появляются какие-то фишки для взаимодействия с пользователем без JavaScript, но без основ программирования пока ещё работать трудно.
Это примерный набор базовых знаний, которые нужны джуну. Понятно, что от новичка никто не ждёт знания нюансов. Если мы возьмём Flex, джуну не надо знать, по какой формуле работает flex-shrink или flex-grow, он просто должен знать, о чём это.
— Ты говоришь, что джуниор должен знать основы JavaScript. Речь идёт о браузерном JS, или надо изучать основные программирования, алгоритмы, структуры данных и другие фундаментальные штуки? В каком объёме надо знать JavaScript, чтобы стать верстальщиком?
— Для вёрстки достаточно знать, как работает браузерный JavaScript. Можно пропустить сложные вещи, можно не понимать, что такое функциональное программирование, чистые функции и так далее.
Верстальщик должен уметь подключить любую библиотеку, настроить её. Возможно, нужно уметь реализовать простую логику на уровне «если пользователь нажал на такой-то элемент, показываем ему другой элемент». Это не очень сложные задачи, разобраться с ними можно по готовым паттернам.
— Холиварный вопрос — как ты относишься к pixel perfect? Должен ли верстальщик уметь верстать с точностью до пикселя?
— Использовать или нет pixel perfect — моё мнение на это не влияет. Я негативно отношусь к чистому pixel perfect, где надо всё переделывать, если у нас расхождения в пару пикселей. Это скорее вредит работе верстальщика. Он начинает нервничать, а верстальщики как художники — обидеть их может каждый.
Получается, ради pixel perfect мы начинаем подгонять шаблон. Вместо того, чтобы сделать его аккуратным, мы занимаемся подгонкой. Возьмём пример — у нас есть пять кнопок с одинаковой функциональностью, но с разным цветом. Как с ними работать правильно?
У нас есть базовый класс или миксин, который мы переиспользуем. А теперь представим, что у дизайнера дрогнула рука, и он сделал одну из кнопок на три пискеля шире. Тут возможны два варианта. Первый — мы забываем о pixel perfect и оставляем систему, с которой будет удобно работать. Второй — мы навешиваем ещё один класс или переписываем классы конкретно для этого элемента, подгоняя его под шаблон.
Четыре элемента из пяти у нас правильно оформлены как компоненты. А пятый остался с новыми стилями, который там не нужны. Поэтому я против жёсткого pixel perfect.
Понятно, что какая-то точность должна быть, чтобы элементы были на своих местах. Даже в упражнениях и проектах на Хекслете решение студента тестируется с помощью скриншотов. Это можно назвать проверкой с помощью pixel perfect. Но я даю какие-то допуски. Например, шапка не должна отличаться от эталона больше чем на 5%. Эти 5% как раз возьмут на себя все недочёты, небольшие ошибки дизайнера, различия в версиях браузера.
К сожалению, работодатели почему-то очень любят pixel perfect. Наверное, это связано с тем, что они любят всё контролировать. Поэтому будет полезно знать инструменты для вёрстки pixel perfect, какие-то плагины. Особенно это пригодится, если вы идёте в какую-то веб-студию, в которой всё поставлено на поток. В таких студиях используют pixel perfect, чтобы не проверять работу верстальщика. Специалисты в таких студиях знают — если свёрстано по pixel perfect, значит всё сделано так, как задумал дизайнер.
— У нас в профессии «Верстальщик» студенты изучают Bootstrap, это самый популярный фреймворк. С одной стороны, его используют большие серьёзные проекты, например, Хекслет :-) С другой стороны, можно встретить высказывания, что бутстрап и другие фреймворки годятся только для прототипирования или админок, что серьёзные верстальщики должны верстать без фреймворков. Можешь рассказать о своём отношении к фреймворкам?
— Почему-то когда говорят о фронтенде или бэкенде, таких разговоров нет. Все пользуются React, и большинство говорит, что это хороший инструмент. Никто не хочет придумывать реактивность заново. А вот с вёрсткой всё почему-то не так.
С Bootstrap вообще произошла какая-то странная вещь. Почему-то только на постсоветском пространстве этот фреймворк считается подходящим только для прототипов и админок. Да, Хекслет использует Bootstrap, многие зарубежные компании используют Bootstrap.
Давайте вспомним, откуда вырос Bootstrap. Это внутренний проект Twitter. Это уже говорит о том, что это не просто какой-то человек с улицы написал. Этот фреймворк решал задачи Twitter и он решает эти задачи сейчас. Кроме Twitter, Bootstrap используют GitHub, PayPal, Spotify. Это далеко не полный список. Как-то это не вяжется с мнением, что Bootstrap годится только для админок и прототипирования.
Такое отношение к Bootstrap появилось из-за того, что многие люди не понимают, что это за инструмент на самом деле. Они заходят в документацию, видят какие-то классы, компоненты, и не понимают, что можно из этого сделать.
А под капотом у Bootstrap есть все возможности, чтобы построить сетку, использовать другие методологии, создавать новые компоненты, утилиты. То есть это фреймворк в его обычном понимании. Он навешивает на нас какие-то ограничения, но взамен даёт свою архитектуру, внутри которой можно работать.
Поэтому серьёзные верстальщики должны знать Bootstrap. Это как с React, Angular, Vue в JavaScript, как Symfony, Laravel, Yii2 у PHP-разработчиков, как Django в Python. То же самое и у верстальщиков.
Кто-то считает, что Bootstrap нельзя использовать с БЭМ. Это не так, фреймворк прекрасно работает с этой методологией.
Это моё мнение насчёт Bootstrap, мой взгляд на то, почему его неправильно интерпретируют.
— А скажи пожалуйста, какие есть популярные и востребованные на рынке труда альтернативы Bootstrap?
— Сейчас популярен Tailwind CSS. Этот проект похож на Bootstrap, но он больше ориентирован на количество компонентов, на другую стилизацию. По факту это немного расширенный Bootstrap. У него немного отличается направление развития.
Tailwind прирастает за счёт компонентов, а Bootstrap исправляет свои внутренние части, даёт какие-то инструменты для разработки. Например, в Bootstrap 5 появилось API для создания утилит.
Ещё есть UIKit, Material Kit. Фреймворков много, и все они строятся примерно на одних и тех же принципах. Есть Bulma, есть Foundation. Последний помогает кроме всего прочего красиво верстать письма.
Что изучать? Мне больше всего нравится Bootstrap. Если хочется иметь больше готовых компонентов, это Tailwind CSS, UIKit. Но их сложнее кастомизировать.
— Многие новички пугаются препроцессоров. В то же время если человек освоил препроцессоры, он уже вряд ли захочет возвращаться к работе с чистым CSS. Можешь для новичков сказать несколько мотивирующих (или не очень мотивирующих) слов: почему препроцессоры стоит освоить, чем они хороши? Сложно ли их использовать?
— Главное — понять, зачем нужен этот инструмент. Препроцессоры упрощают нам жизнь. Зачем бояться того, что нам помогает? Препроцессоры помогают быстрее делать многие вещи. Но сначала надо кое-что выучить.
Возьмём распространённый пример: у нас есть цветовая схема. Нам нужно создать классы, с помощью которых можно менять цвет текста. Допустим, мы работаем в рамках атомарного или объектно-ориентированного CSS. Сколько нужно сделать классов, если у нас на сайте 100 цветов? И что проще: написать пару строчек в препроцессоре, который за нас пройдётся по всем цветам и сделает нужные классы с нужным названием, или 100 раз руками скопировать код и переименовать класс? Тут ответ очевиден.
Именно такие задачи решает препроцессор. Он многие вещи делает за нас.
Ещё один пример: возьмём вложенность. Допустим, у нас есть селектор .page, а внутри него есть .page-button. Благодаря вложенности мы избегаем дублирования. Частая проблема CSS — неструктурированность. Это когда один кусок кода находится вверху, второй в середине и так далее. Препроцессоры помогают структурировать код.
Ещё препроцессоры помогают сократить количество кода. Например, мы часто используем центрирование через Flex. Для этого мы можем использовать свойства display: flex, justify-content: center, align-items: center. Если надо центрировать много элементов, нам приходится эти три строчки копировать и вставлять.
А потом мы решаем не центрировать элементы по вертикали. Теперь что нужно? Пройтись по всем элементам и удалить одно свойство. Что позволяет сделать препроцессор, причём, неважно какой — SASS, LESS, Stylus? Мы просто объявляем миксин или шаблонный селектор, указываем три свойства, а потом подключаем во всех нужных селекторах. Если вдруг что-то изменится, достаточно один раз исправить в объявлении нужное свойство, и оно будет работать во всех селекторах.
Поэтому не стоит бояться препроцессоров. Да, в них есть сложные вещи, связанные с программированием — циклы, функции, массивы, ассоциативные массивы. Но даже если вы не знакомы с программированием, эти вещи можно быстро изучить в рамках шаблона. То есть можно не понимать, что именно происходит под капотом, но писать циклы и понимать, что они пройдутся вон там и сделает вот это.
— С какими инструментами должен уметь работать, чтобы обрабатывать макеты и превращать их в вёрстку? Я имею в виду Photoshop, Figma, какие-то другие графические редакторы, инструменты типа Zeplin и тому подобные.
— Наверное, Figma всё увереннее становится стандартом за счёт своей кроссплатформенности. Если взять Photoshop, с ним на Linux будут проблемы. Sketch работает только под macOS. А Figma работает на всех операционных системах в любом браузере.
Достаточно изучить Figma, это поможет понять принцип работы с аналогичными инструментами. Причём верстальщику не надо знать, как создать макет. Ему достаточно знать, как посмотреть отступы. То есть запомнить, что выбрав элемент, зажав alt и наведя мышкой на соседний элемент, можно увидеть отступы. Или что при выборе элемента в правой панели можно увидеть шрифт, отступы и так далее.
Этого достаточно, чтобы работать верстальщиком. А для того же Photoshop всё будет выглядеть примерно так же. В Zeplin всё то же самое. В Sketch, я думаю, тоже проблем не будет, это одна и та же функциональность.
— Какими инструментами ты пользуешься в работе и можешь порекомендовать их новичкам? Можно прямо по списку: редактор или IDE, основные плагины, любимый CSS-фреймворк, препроцессор, сборщик и так далее.
— Пользуюсь Visual Studio Code от Microsoft. Мне удобна его кроссплатформенность, потому что у меня на стационарном компьютере установлена Windows, на ноутбуке Linux, на компьютере второй системой ещё один Linux. И везде без проблем работает Visual Studio Code.
Особенно удобно, что в последних версиях появилась синхронизация настроек. Я авторизуюсь через GitHub, и везде подтягиваются мои настройки. Это плагины, цветовые схемы, масштабирование, шрифты.
Считаю, что нужно хотя бы на базовом уровне уметь работать с другими редакторами. Тот же Vim нужно знать на уровне «я могу напечатать, сохранить и, о боги, выйти из Vim». Это нужно хотя бы для ситуации «а что, вдруг...». Например, вам попался ноутбук без установленных редакторов, нужно срочно зайти на сервер и поправить вёрстку.
Из плагинов я использую Emmet. Он позволяет писать псевдокод и разворачивать его в HTML. Это удобно при работе с повторяющимися блоками. Также пользуюсь встроенной в Visual Studio Code системой автодополнения. В других редакторах тоже есть встроенные системы автодополнения или специальные плагины.
Обязательно использую какой-нибудь live server просто для того, чтобы запускать вёрстку и отслеживать изменения. Это можно сделать и с помощью Gulp. Но иногда мы просто создаём файл .html и .css и хотим видеть изменения без всяких сборок. Для этого подходят какие-то live servers. Их можно найти на npm, установить глобально или локально.
Также я использую и рекомендую всем использовать линтеры. У меня всегда в рабочей директории есть Stylelint, HTMLHint. Плагин Stylelint в Visual Studio Code всегда подсвечивает мне проблемы в коде. Это помогает исправлять на ходу какие-то ошибки, например, неправильный порядок свойств, ошибки в названии свойств и так далее. А HTMLHint проверяет валидность вёрстки.
Среди препроцессоров выбираю SASS. Я его преподаю, я им больше всего пользуюсь. В принципе, нет разницы, каким пользоваться. Просто выбирайте тот, синтаксис которого вам больше нравится.
Есть небольшой нюанс, из-за которого я считаю SASS с синтаксисом SCSS более удобным. Этот препроцессор совместим с обычным CSS. То есть вы можете взять любой файл .css. переименовать его в .scss, и он будет работать. С другими препроцессорами так не получится, в том числе с SASS с синтаксисом Sass.
Надо понимать, что есть препроцессор SASS, а его можно использовать с синтаксисом Sass или SCSS. В SCSS нужны внутри фигурные скобки, а в Sass они не нужны. В этом основное отличие синтаксиса. Поэтому SCSS имеет обратную совместимость с CSS, а Sass нет.
Сборщики я не использую, они для верстальщиков, особенно для небольших задач, слишком монструозны. Нету особого смысла использовать такой инструмент просто для компиляции файлов. Эту задачу я решаю с помощью таск-менеджера Gulp. Я ему говорю, какой надо взять плагин, файл, и куда положить результат.
Кстати, возвращаясь к препроцессорам. Я использую HTML-препроцессор Pug. Просто мне так удобно. Этот инструмент предупреждает ошибки, связанные с открытием и закрытием тегов. В Pug не нужно открывать и закрывать теги, всё строится на уровне вложенности. Если вы писали на Python или хотя бы видели код, то понимаете, о чём речь. Чтобы вложить один код в другой, надо использовать табуляцию.
Любимый CSS-фреймворк — Bootstrap. Я евангелист этого фреймворка. Бегаю везде и говорю, насколько он прекрасный. Где-то читаю доклады, пытаюсь показать, что Bootstrap далеко не для админок.
— Я знаю, что ты контрибьютишь в Bootstrap. Это правда?
— Да, есть такой опыт.
Слепые люди не видят сайт, они могут ориентироваться с помощью того, что вы как верстальщик им дали: о доступности
— Важный вопрос, который ты постоянно поднимаешь в статьях — доступность. Кажется, только для небольшой доли посетителей обычного сайта нужна доступность, почему в таком случае этому вопросу надо уделять внимание? Какие инструменты использует верстальщик, чтобы обеспечить доступность сайта?
— Я бы поспорил насчёт того, что людей, для которых важна доступность, мало. Доступность — это адаптация страницы для людей с ограниченными возможностями.
Какие здесь могут быть сценарии?
Например, люди, у которых проблемы с опорно-двигательным аппаратом, с трудом пользуются мышью или одновременно клавиатурой и мышью. Им трудно одновременно скролить мышью и нажимать клавиши, как это делают люди без особых потребностей. Такие люди переходят на сайты, двигаются по странице к интерактивным элементам, не используя мышь.
Такой сценарий используют и обычные люди. Например, мне иногда хочется развалиться на диване и не скролить страницы с помощью мыши, а перемещаться по ним с помощью клавиатуры. Тут помогает знание горячих клавиш. Но на некоторых сайтах это сделать сложно, потому что верстальщики не подумали, что такой сценарий использования возможен.
Как это проявляется? Представим стандартные интерактивные элементы, например, кнопки или ссылки. Предположим, у нас есть ссылка или кнопка «Подробне», которая ведёт вниз страницы. Как обычно делают такие элементы? Мы в атрибут href ставим решётку и id элемента, к которому нужно прокрутить страницу.
Но этот id попадёт в браузерную строку, а это ужасно не любят специалисты по SEO. Они просят сделать элемент обычным <div>, повесить обработчик и по клику перемещать человека в нужную область страницы. Это работает, если человек пользуется мышью. Но <div> — не интерактивный элемент. Мы не сможем попасть на него с помощью клавиши tab. Она отвечает за то, чтобы пользователь браузера перешёл к следующему интерактивному элементу.
Такие же проблемы бывают с формами, так как все любят стилизовать их, делать красивыми, но верстают не с помощью стандартных тегов типа, <input>, <label>, а просто там навесили, тут как-то JavaScript'ом обработали. С клавиатуры такие формы недоступны.
Это один из примеров того, зачем нужна доступность. Ещё одна вещь, которую могут использовать не только люди с особыми потребностями — масштабирование страницы. Я иногда использую это возможность, чтобы было удобно читать контент.
На некоторых сайтах при увеличении масштаба хотя бы в два раза вёрстка разваливается. Это желательно отслеживать. Страница должна выглядеть нормально как минимум при увеличении масштаба в два раза, а желательно — и в три, и в четыре раза.
Если говорить о более специфических моментах, есть слепые люди. Это разные люди. Например, есть слепые программисты, которые пользуются скринридерами. Это приложения, которые считывают информацию с экрана. Например, есть прекрасный скринридер NVDA. Он встраивается в операционную систему и читает, что происходит в браузере, в текстовых редакторах.
Слепые люди не видят сайт. Они могут ориентироваться с помощью того, что вы как верстальщик им дали. А вы можете им дать правильную семантическую вёрстку. Это к вопросу использования вместо . Вы можете правильно верстать формы, строить меню, соблюдать порядок заголовков. Это очень важно для людей, которые используют скринридер.
Я часто замечаю, что верстальщики не соблюдают вложенность заголовков. Они могут сначала поставить для подзаголовка, а после него ставят заголовок первого уровня, потом внезапно заголовок пятого уровня. Они ориентируются на размер заголовка, а не на семантический смысл.
А скринридеры позволяют перемещаться непосредственно по заголовкам. То есть если я хочу быстро посмотреть, какие глобальные темы раскрываются на странице, я начинаю переходить по заголовкам второго уровня. И тут из-за неправильной вёрстки могут быть проблемы. Один заголовок второго уровня может быть на месте заголовка первого уровня, в другом месте вместо заголовка второго уровня стоит заголовок третьего уровня просто потому, что он по размеру подходит.
Такие вещи важно учитывать, чтобы верстать сайты, удобные для слабовидящих и слепых людей. На Западе доступность сайта уже считается стандартом де-факто, как и адаптивная вёрстка. Никому ведь не приходит в голову не делать страницы адаптивными, так как на сайт ходит мало пользователей через мобильные устройства. То же самое и со скринридерами.
И последний пункт. Есть люди с нарушениями цветовосприятия. Для них очень важен контраст текста и вообще контраст элементов страницы относительно фона. Такие люди могут плохо различать неконтрастные элементы.
Очень часто в дизайне используется светлый блок на светлом фоне. С точки зрения дизайна это может выглядеть минималистично и красиво. Но представьте, что у вас нарушено цветовосприятие и вы с трудом различаете близкие друг к другу цвета. Это, кстати, очень распространённое явление. Если большинству людей показать два красных цвета с разной насыщенностью или тоном, они просто не найдут разницы.
Наш мозг обрабатывает цвета немного странно, его легко обмануть. Есть прекрасная книга Джозефа Альберса «Взаимодействие цвета». В ней очень интересно написано, как мозг может обработать два цвета как один, три как два и так далее. Много там построено на том, что нет большого контраста. Всё то же самое работает и на веб-страницах. Поэтому важно правильно работать с контрастом, чтобы не допускать таких проблем.
Инструменты, которыми можно пользоваться для обеспечения доступности, вытекают из этих кейсов. Возьмите свой проект, уберите мышь и попробуйте совершить какое-то действие — оформить заказ, подписаться на рассылку и так далее. Посмотрите, что происходит. Это поможет понять, что нужно улучшить.
Из скринридеров можно использовать NVDA или какие-то браузерные расширения. Но расширения работают не очень хорошо, я предпочитаю десктопный вариант. Если брать другие инструменты, то в каждом браузере с «девтулзами» уже есть какие-то базовые вещи для проверки доступности. В FireFox есть отдельная панель, связанная с доступностью. В Chrome есть Lighthouse, который проверяет доступность. Также в Chrome есть расширение axe, нацеленное на работу с доступностью.
Самое главное — пробовать себя на месте людей с ограниченными возможностями. Пробуйте разные сценарии: выключайте монитор и пользуйтесь скринридером, играйте с настройками контраста, пробуйте ходить по модным сайтам, которые используют светлое на светлом. Вы увидите, что трудно найти те или иные элементы.
— Никита, уточняющий вопрос. Из инструментов ты назвал вещи, которыми можно проверять доступность. А как всё-таки верстальщик её обеспечивает? Я правильно понимаю, что это просто се��антическая вёрстка, и больше ничего в арсенале нет?
— Это семантическая вёрстка — раз, это использование aria-атрибутов — два. Эти атрибуты помогают дополнительно указать, что за элемент перед нами. Есть много специфических ролей, которые можно указать для элемента.
Ещё у W3C есть огромный документ — WCAG. Это гайдлан, в котором указано, как обеспечивать доступность контента. В нём можно прочитать, какой должен быть контраст, как его проверять, какие формулы для этого используются. Я использовал этот гайдлайн, когда писал статью о контрастности цвета. То есть в руководстве от W3C можно найти спецификации, которые объясняют доступность.
VR станет массовым, это добавит работы верстальщикам: о перспективах вёрстки
— Как ты думаешь, какой будет вёрстка через 10 или 20 лет? Например, сохранятся ли HTML и CSS или у нас будут новые языки разметки и стилей?
— Честно говоря, не думаю, что через 10 или 20 лет что-то глобально изменится. Понятно, что будет много небольших изменений. Думаю, у нас появятся новые способы взаимодействия. Условный VR через 20 лет станет более продвинутым и массовым. А чем более массовым он будет, тем больше работы будет у верстальщиков. Нужно будет делать веб-интерфейсы доступными для VR.
Но в целом нет предпосылок, чтобы HTML и CSS исчезли. Они отлично справляются со своей работой. HTML эффективно передаёт браузеру структуру, которую мы хотим видеть, а браузер её обрабатывает. Возможно, изменится способ обработки HTML в браузере. Но сам язык разметки будет актуальным до тех пор, пока существуют браузеры в том виде, в котором мы их знаем.
— Несколько лет назад верстальщиков пугали появлением новых гаджетов — от умных очков и часов, смартфонов с гибким экраном до дисплеев холодильников и кофеварок, под которые надо верстать по-новому. А как на самом деле влияет на вёрстку появление разнообразных девайсов с разными экранами?
— Для верстальщиков это просто новые устройства. По хорошему, процесс семантической вёрстки не меняется под каждый девайс. Понятно, что для Smart TV есть свои законы, для умных часов свои законы и для умных кофемолок свои законы. Но верстальщик будет всегда использовать одни и те же концепции.
Возьмём Smart TV, где пользователь управляет устройством с помощью джойстика. Это просто переходы к следующим интерактивным элементам. Да, изменился внешний вид и способ взаимодействия, но суть осталась той же. Это просто перемещение по интерактивным элементам.
Если мы возьмём достаточно большой дисплей для холодильника, который можно использовать для сёрфинга, это уже привет телефонам. Это то же самое, только мы управляем не тем, что у нас в руке, а тем, что стоит на полу. Поэтому новые вещи могут накладывать свои ограничения, но в фундаментальных вещах остаются такими же. Важно изучать фундаментальные вещи, а не хвататься за каждую новинку.
— Стандарт HTML5 дал нам семантический веб. Если проанализировать тенденции или даже просто пофантазировать, что будет в следующих стандартах? Стоит ли ждать революционных изменений, или это будут постепенные улучшения?
— Если брать HTML, то каких-то революций я не наблюдаю и не жду. Конечно, я человек и не могу знать всё. Скорее, каких-то революционных изменений надо ждать со стороны CSS. Мы уже столкнулись с тем, что существующие стандарты и возможности CSS нас стесняют. Не зря ведь появляются препроцессоры, которые расширяют возможности CSS.
Эти расширенные возможности потихоньку пролезают в стандарты CSS. У нас уже есть переменные, которые работают интереснее, чем препроцессоры. Уже идут разговоры о шаблонах внутри CSS. Уже в черновиках стандартов появляются вложенности. Я жду новых мощных инструментов в CSS.
HTML5 ещё не устарел, ещё не появились принципиально новые способы взаимодействия с пользователем. Смысла в кардинальном обновлении стандарта нет. Возможно, когда интернет вещей вступит в права, когда появятся новые технологии, тогда нам понадобится что-то новое. А пока нам достаточно возможностей HTML5, чего нельзя сказать о CSS3.
— Никита, спасибо большое за интересный разговор. Нам остаётся пригласить читателей изучать вёрстку в рамках программы «Верстальщик».
— Да, приглашаю. Почему я вообще считаю, что стоит попробовать то, что есть на Хекслете? Я стараюсь давать студентам глубинные вещи, погружаюсь не только в то, что работает, но и в то, почему и как оно работает. В том же курсе по Bootstrap описываются не только классы. Студент понимает, как строятся проекты с помощью Bootstrap, как делать кастомные компоненты. Поэтому приходите на Хекслет за фундаментальными знаниями!
— Ещё раз спасибо за разговор!
— Желаю читателям удачи!
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 23:01:34 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="Rhw3XuPyp3-LRi80V_ykAgtAVeMKepcPCqiXL4i8qiqpzfxpEYwKHz0FC6xb81R1y0l4SQJNaa23SA172rtNRA";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым</title>
<meta name="description" content="Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на">
<link rel="canonical" href="https://ru.hexlet.io/blog/posts/html-css-perspectives">
<meta property="og:title" content="Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым">
<meta property="og:description" content="Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе. ">
<meta property="og:image" content="https://ru.hexlet.io/vite/assets/blog_post-7eTyeLLt.webp">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="JayLxIgVaXb_iKZN1It2TOilZ-Sov5tCthg8IruQiRvKfUDzemvEFknLgtXYhIY7KKxKTqCIZeAL-KZ26ZdudQ" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="/vite/assets/blog_post-7eTyeLLt.webp"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyMiwicHVyIjoiYmxvYl9pZCJ9fQ==--8e763c5a65cfc8d5e67cb29ae3d1881ad23c714e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Hand%20coding-bro.png"/><link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/blog/posts/show","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T23:01:34.377Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"UHMZ3wOA0iulSr9RfvelE6BgyHADcdrWoy06I8XOaC6_otLo8f5_SxMJm8ly-FVkYGnl2gtGJHQezaB3l8mPQA","post":{"model_name":"BlogPost","category":{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"},"creator":{"public_name":"Дмитрий Дементий","id":174372,"is_tutor":false},"tags":[{"id":1443,"slug":"frontend","name":"Фронтенд"}],"id":1262,"title":"Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым","slug":"html-css-perspectives","state":"published","summary":"Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе. ","votes_count":18,"created_at":"2021-02-03T15:53:16.895Z","published_at":"2021-02-05T07:49:47.408Z","body":"Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе. \n\n**— Никита, представься пожалуйста — расскажи нашим читателям о себе всё, что считаешь нужным.**\n\n— Меня зовут Никита Михайлов, занимаюсь разработкой порядка 8 лет. Начинал как веб-мастер, который на все руки. В небольшой веб-студии мы разрабатывали сайты, верстали. Писали код на PHP, JavaScript. \n\n::programs\n\nСейчас развиваю программу «Верстальщик» на Хекслете. Пишу курсы, делюсь своими знаниями и опытом, который приобрёл за годы работы в разработке. \n\n**— Кем ты себя считаешь в первую очередь: преподавателем, разработчиком, программистом, верстальщиком?** \n\n— Наверное, это можно назвать «верстальщик-исследователь». То есть я передаю студентам знания, но при этом сам слежу за трендами, знаю, что происходит в разработке, изучаю новые вещи, необычные сочетания вещей, пытаюсь донести студентам, как можно сделать то или это. С одной стороны, это преподавание, а с другой — исследовательская работа. И в следующую очередь я разработчик. \n\n**— То есть сочетаешь практику и теорию: преподаёшь и что-то делаешь руками, правильно?**\n\n— Конечно. Чтобы написать курсы, упражнения, давать какие-то уроки, ты не можешь устраняться от самой разработки, потому что потеряешь весь скилл. Невозможно просто писать курсы, не занимаясь разработкой. \n\nКогда я только пришёл на Хекслет, я что-то верстал на нашем сайте и на [Code Basics](https://ru.code-basics.com/) какие-то вещи делал. Поэтому, мне кажется, преподаватель должен быть действующим разработчиком. Просто преподавание для меня — вершина, моя основная деятельность. \n\n> Для вёрстки большие компании ищут матёрых ребят, но войти в разработку через вёрстку можно: о ситуации на рынке труда\n\n**— Предыдущий вопрос был с подвохом, он поможет нам сразу взять быка за рога и перейти к обсуждению принципиальных вопросов. Первый из них: у нас на Хекслете ты в первую очередь развиваешь профессию «Верстальщик». Востребованы ли чистые верстальщики на рынке труда? Или вёрстку стоит рассматривать как часть других профессий, например, как часть фронтенд-разработки?**\n\n— Наверное, нельзя сказать, что чистые верстальщики, особенно джуны, так же востребованы на рынке, как JavaScript-разработчики или PHP-, Python-разработчики. Начинающих верстальщиков ждут на рынке не так охотно, как программистов. \n\nДля вёрстки большие компании ищут матёрых ребят, которые понимают не только как сверстать, но и почему нужно сделать так, а не иначе, как это будет работать в других браузерах или на мобильных экранах. \n\nНо войти в разработку через вёрстку можно. Я посмотрел сейчас на «Хедхантере» — по запросу «HTML-верстальщик» есть 121 вакансия. Это не считая заказы на фрилансе, подработок. \n\nНадо понимать, что мало кто хочет быть чистым верстальщиком. Многие считают вёрстку одним из этапов становления фронтенд-разработчика. \n\n**— Попробуем зайти с другой стороны: сейчас есть тенденция разделять верстальщиков и фронтенд-программистов. Первые создают layout и стилизуют элементы, а вторые занимаются интерактивностью и логикой. Как ты считаешь, это правильное разделение? Во фронтенде рулит специализация, или всё-таки рынку нужны разработчики-универсалы, которые умеют классно верстать и программировать?**\n\n— Считаю, что сейчас больше выделяется специализация, потому что набор того, что должен знать фронтендер и какими инструментами он должен владеть, слишком большой. Он настолько большой, что один человек не может быть одинаково сильным во всём. \n\nПонятно, что фронтенд-разработчик должен знать и вёрстку, и JavaScript, понимать, как это всё работает. Но в профессиональной среде есть разделение. Одни погружаются в JavaScript, глубоко знают JS-фреймворки, а другие уходят в сторону стилизации, [работы с дизайном, UI, UX](https://ru.hexlet.io/blog/posts/ux-for-frontenders) и так далее. \n\nТо есть разделение есть, и оно обусловлено невероятным количеством инструментов, которые используются во фронтенде. \n\n**— Никита, ты говоришь, что фронтендеры должны знать слишком много инструментов. А мы можем сказать, что бэкендарам здесь больше повезло? Что им достаточно выучить сервер, базы данных, и можно работать.**\n\n— Нельзя сказать, что работа бэкендера проще. Просто у бэкендеров проще схема развития. Действительно, они изучают сервер, базы данных. Также изучают серверный язык программирования, например, Go, PHP, Python и так далее. И у них эта ветка более понятная. \n\nУ бэкендеров тоже есть разделение. Кто-то работает условно больше с базами данных, занимается оптимизацией запросов. Кто-то пишет внутреннюю логику самого проекта. Но во фронтенде всё равно больше инструментов. \n\nТем не менее это не значит, что войти в бэкенд-разработку проще. Пусть там меньше инструментов, но там надо глубже понимать какие-то вещи, например, алгоритмы, нужно лучше знать паттерны, на которых всё строится. Фронтенд-разработчикам здесь чуть проще, хотя это достаточно [холиварный вопрос](https://ru.hexlet.io/blog/posts/chto-takoe-holivar-7-yarkih-primerov-iz-mira-tehnologiy-i-razrabotki). \n\n**— Знаю людей, которые говорят, что вёрстка — это скучно, что это больше механическая работа. А вот программирование — это интересно, это творческие задачи. Согласен с этим? Лично тебе больше нравится верстать или программировать? Может, ты не разделяешь эти процессы?**\n\n— Мне больше нравится верстать, иначе я не преподавал бы вёрстку. Но здесь надо понимать, для чего люди приходят в разработку. Многие приходят, чтобы писать сложную логику, обрабатывать запросы и так далее. Других интересует внешний вид приложения или сайта. Если вас интересует второе, вёрстка вам понравится. \n\nЯ не считаю вёрстку механической работой. Да, на базовом уровне можно подставить там блок, здесь блок. Но чем дольше работаешь с вёрсткой, тем больше замечаешь нюансов, которые нужно учитывать. \n\n**— А что проще — верстать или программировать? Можно ли назвать вёрстку плавным входом в разработку?**\n\n— На первых порах, наверное, да. Когда мы берём первые месяцы изучения технологий, когда человек с нуля приходит в разработку, ему проще начать с вёрстки. Дело даже не в том, что вёрстка проще программирования. Для новичка процесс и результат работы будет нагляднее. \n\nНачинающий верстальщик что-то изучает, делает, открывает браузер и видит результат. Я, например, вспоминаю изучение программирования в колледже. Мы писали исключительно консольные программы, передавали данные внутри сети, работали с пакетами. Это круто, но невозможно оценить результат визуально. В такой ситуации можно быстро выгореть. А вёрстка даёт возможность увидеть и прикоснуться к тому, что ты изучаешь. \n\nЕсли погружаться в вёрстку глубже, уже нельзя однозначно сказать, что она проще программирования. Нужно понимать различия в браузерах, работать с доступностью, изучать тонны литературы, владеть тоннами инструментов. Поэтому по мере углубления в проблематику вёрстка перестаёт быть простой. \n\n**— То есть здесь нужно предостеречь от шапкозакидательства начинающих разработчиков, которые уделяют внимание только программированию и думают, что легко освоят вёрстку позже, потратят на изучение месяц или два и готово?**\n\n— Легко верстать не получится. Всё зависит от того, до какого уровня специалист хочет погрузиться в вёрстку. Если нужно просто накидать пару блоков, то да, можно изучить минимум информации за месяц или два. Но чтобы верстать большие проекты, нужно долго учиться и работать над практическими задачами. \n\n**— Традиционный для последних лет вопрос: роботы могут заменить верстальщиков? Уже сейчас есть шаблонизаторы, есть программы, которые умеют превращать простенькие макеты в веб-страницы. Значит ли это, что чистым верстальщикам надо как-то задуматься, изучать дополнительные инструменты, чтобы оставаться конкурентоспособными на рынке труда?**\n\n— Самое смешное, что такое же мнение я слышал много лет назад, когда учился в колледже. Была известная программа Dreamweaver от студии Macromedia, потом её выкупил Adobe. В ней можно было накидывать какой-то дизайн, а на выходе получать вёрстку. \n\nДа, это работало, программа действительно выдавала вёрстку, и в браузере эта вёрстка смотрелась нормально. Но это было абсолютно неподдерживаемое решение. Внутри всё версталось настолько отвратительно, что думать о каких-то изменениях было невозможно. Там шаг влево, шаг вправо — и всё разваливалось. \n\nДля тех, кто понимает о чём речь — в этой программе вся вёрстка строилась на абсолютном позиционировании. Через какое-то время у Adobe вышла новая программа. Суть была той же, но программа лучше работала с мобильными устройствами. Сейчас программы нет, этот проект закрыт. Алгоритмы снова не смогли заменить верстальщиков, хоть справлялись с вёрсткой лучше, чем Dreamweaver. \n\nЧистая вёрстка сама по себе мало где используется. Недостаточно просто сверстать макет и выложить его в интернет. Скорее всего это должно работать на какой-то CMS или с каким-то фреймворком. Если мы не говорим о лендингах, нужен ещё какой-то бэкенд. И вот здесь все эти программы для вёрстки не очень подходят, так как они не создают логических компонентов, выделенных модулей. Непонятно, как такую вёрстку разделить, чтобы просто передать на бэкенд. \n\nТо есть программы для вёрстки выдают монолитные приложения, с которыми невозможно что-то сделать. А одна из основных функций верстальщика — правильно разбивать вёрстку на компоненты, которые можно переиспользовать. \n\n**— То есть чистым верстальщикам прямо сейчас не надо никуда бежать, что-то быстро изучать, их через полгода роботы не заменят?**\n\n— Я считаю, что всегда надо что-то изучать. Когда верстальщик, фронт- или бэкенд-разработчик перестаёт учиться, он умирает как специалист. Если брать HTML, CSS, какие-то фреймворки для них, забрасывать их изучение не надо. Не думаю, что в обозримом будущем верстальщики станут ненужными. \n\nПонятно, что сейчас появляются нейросети, потом мы дойдём до квантовых компьютеров. Возможно, это когда-то как-то повлияет на рынок вёрстки. Но сейчас компьютерам сложно предусмотреть все варианты. \n\nНадо понимать, что одна из главных проблем верстальщиков не в том, как ты сверстаешь страницу, а в том, как люди будут её использовать. Это очень интересный момент, потому что ты разрабатываешь один сценарий, а люди пользуются совершенно другим. Тебе нужно это учитывать. А нейросеть сама не может этого делать. Пока не может. Поэтому живой человек будет востребован на рынке вёрстки до тех пор, пока, скажем, нас всех не чипируют. \n\n**— Насколько необходимо знать вёрстку специалистам, которые не занимаются фронтендом или даже веб-разработкой вообще. Например, человек программирует контроллеры или занимается машинным обучением. Нужны ли ему знания HTML и CSS?**\n\n— Смотря что мы имеем в виду. Если это бэкенд-разработчик, контент-менеджер, то на каком-то базовом уровне им желательно знать вёрстку. Всё равно всё что они делают в конечном итоге превращается в вёрстку, которая отрисовывается в браузере. \n\nЕсли продукт разработчика не связан с веб-разработкой, с браузером, например, это какие-то научные исследования, глубокие расчёты, или это бэкендер, который работает только с базами данных, возможно, им вёрстка не нужна. Разве что только для собственного развития.\n\n> Джуниору полезно знать HTML- и CSS-препроцессоры: об инструментах верстальщика\n\n**— Плавно переходим к инструментам и технологиям. Что нужно знать новичку, чтобы претендовать на позицию верстальщика-джуниора? Если можно, прямо перечисли минимальный набор знаний и умений.**\n\n— В каждой вакансии для верстальщиков есть строчка «требуется знать HTML и CSS». Это очень расплывчатая формулировка, трудно понять, что именно нужно знать. Если говорить о джуниорах, им нужно знать и понимать такие вещи: \n\n- Семантическую вёрстку\n- Поток документа и как он работает\n- Основные модули CSS, например, Flex. С гридами не всё однозначно, кто-то их требует, кто-то нет, но знать их полезно\n\nЭто базовый набор знаний HTML5 и CSS3, который нужен джуну. Можно ещё включить переменные, какие-то другие новые вещи. Даже джуну стоит смотреть спецификации и изучать новые технологии. \n\nПолезно знать CSS-методологии, хотя бы несколько. Методология — это набор правил, которые мы используем для структурирования CSS. Здесь есть много подходов. Наверное, самый популярный — БЭМ или Блок, Элемент, Модификатор. Он используется в Яндексе. Можно спорить о достоинствах и недостатках этой методологии, но она самая популярная в российском сегменте разработки. Этого нельзя сказать о зарубежном сегменте. \n\nНа Западе популярны [объектно-ориентированный CSS](https://ru.hexlet.io/blog/posts/oocss-basics), SMACSS, атомарный CSS. Атомарный, наверное, в меньшей степени. Но всё равно он встречается в фреймворках. Фреймворки тоже желательно знать. Наверное, самый популярный фреймворк — Bootstrap. Ещё есть Tailwind CSS, UIKit. Хотя бы один из них стоит выучить. Даже если в компании, в которой вы хотите работать, используют другой фреймворк, благодаря изучению Bootstrap вы будете понимать, что такое фреймворки и как с ними работать. \n\nДжуниору полезно знать HTML- и CSS-препроцессоры. Тут можно выбирать на свой вкус. Можно смотреть на синтаксис: что нравится, что нет. Если вы работали с одним препроцессором, переключиться на другой будет просто. \n\nЕщё нужны общие знания. Например, [работа с Git](https://ru.hexlet.io/courses/intro_to_git) — без него не получится. Многие новички пропускают изучение систем контроля версий, думают, что освоят их на работе. Конечно, на работе вы их освоите, но сначала наломаете дров. Надо понимать, что многие работодатели даже на этапе собеседования просят ссылку на GitHub. Они смотрят даже учебные проекты, оценивают, умеет ли кандидат работать с Git. \n\nИ ещё один момент — хотите или нет, но базовые знания JavaScript вам понадобятся. Это обязательно для верстальщика, так как многие взаимодействия с пользователем всё-таки происходят через JavaScript. HTML и CSS постоянно совершенствуются, в них появляются какие-то фишки для взаимодействия с пользователем без JavaScript, но без основ программирования пока ещё работать трудно. \n\nЭто примерный набор базовых знаний, которые нужны джуну. Понятно, что от новичка никто не ждёт знания нюансов. Если мы возьмём Flex, джуну не надо знать, по какой формуле работает flex-shrink или flex-grow, он просто должен знать, о чём это. \n\n**— Ты говоришь, что джуниор должен знать основы JavaScript. Речь идёт о браузерном JS, или надо изучать основные программирования, алгоритмы, структуры данных и другие фундаментальные штуки? В каком объёме надо знать JavaScript, чтобы стать верстальщиком?**\n\n— Для вёрстки достаточно знать, как работает браузерный JavaScript. Можно пропустить сложные вещи, можно не понимать, что такое функциональное программирование, чистые функции и так далее. \n\nВерстальщик должен уметь подключить любую библиотеку, настроить её. Возможно, нужно уметь реализовать простую логику на уровне «если пользователь нажал на такой-то элемент, показываем ему другой элемент». Это не очень сложные задачи, разобраться с ними можно по готовым паттернам. \n\n**— Холиварный вопрос — как ты относишься к pixel perfect? Должен ли верстальщик уметь верстать с точностью до пикселя?**\n\n— Использовать или нет pixel perfect — моё мнение на это не влияет. Я негативно отношусь к чистому pixel perfect, где надо всё переделывать, если у нас расхождения в пару пикселей. Это скорее вредит работе верстальщика. Он начинает нервничать, а верстальщики как художники — обидеть их может каждый. \n\nПолучается, ради pixel perfect мы начинаем подгонять шаблон. Вместо того, чтобы сделать его аккуратным, мы занимаемся подгонкой. Возьмём пример — у нас есть пять кнопок с одинаковой функциональностью, но с разным цветом. Как с ними работать правильно? \n\nУ нас есть базовый класс или миксин, который мы переиспользуем. А теперь представим, что у дизайнера дрогнула рука, и он сделал одну из кнопок на три пискеля шире. Тут возможны два варианта. Первый — мы забываем о pixel perfect и оставляем систему, с которой будет удобно работать. Второй — мы навешиваем ещё один класс или переписываем классы конкретно для этого элемента, подгоняя его под шаблон. \n\nЧетыре элемента из пяти у нас правильно оформлены как компоненты. А пятый остался с новыми стилями, который там не нужны. Поэтому я против жёсткого pixel perfect. \n\nПонятно, что какая-то точность должна быть, чтобы элементы были на своих местах. Даже в упражнениях и проектах на Хекслете решение студента тестируется с помощью скриншотов. Это можно назвать проверкой с помощью pixel perfect. Но я даю какие-то допуски. Например, шапка не должна отличаться от эталона больше чем на 5%. Эти 5% как раз возьмут на себя все недочёты, небольшие ошибки дизайнера, различия в версиях браузера.\n\nК сожалению, работодатели почему-то очень любят pixel perfect. Наверное, это связано с тем, что они любят всё контролировать. Поэтому будет полезно знать инструменты для вёрстки pixel perfect, какие-то плагины. Особенно это пригодится, если вы идёте в какую-то веб-студию, в которой всё поставлено на поток. В таких студиях используют pixel perfect, чтобы не проверять работу верстальщика. Специалисты в таких студиях знают — если свёрстано по pixel perfect, значит всё сделано так, как задумал дизайнер.\n\n**— У нас в профессии «Верстальщик» студенты изучают Bootstrap, это самый популярный фреймворк. С одной стороны, его используют большие серьёзные проекты, например, Хекслет :-) С другой стороны, можно встретить высказывания, что бутстрап и другие фреймворки годятся только для прототипирования или админок, что серьёзные верстальщики должны верстать без фреймворков. Можешь рассказать о своём отношении к фреймворкам?**\n\n— Почему-то когда говорят о фронтенде или бэкенде, таких разговоров нет. Все [пользуются React](https://ru.hexlet.io/blog/posts/biblioteka-react-review-article), и большинство говорит, что это хороший инструмент. Никто не хочет придумывать реактивность заново. А вот с вёрсткой всё почему-то не так. \n\nС Bootstrap вообще произошла какая-то странная вещь. Почему-то только на постсоветском пространстве этот фреймворк считается подходящим только для прототипов и админок. Да, Хекслет использует Bootstrap, многие зарубежные компании используют Bootstrap. \n\nДавайте вспомним, откуда вырос Bootstrap. Это внутренний проект Twitter. Это уже говорит о том, что это не просто какой-то человек с улицы написал. Этот фреймворк решал задачи Twitter и он решает эти задачи сейчас. Кроме Twitter, Bootstrap используют GitHub, PayPal, Spotify. Это далеко не полный список. Как-то это не вяжется с мнением, что Bootstrap годится только для админок и прототипирования. \n\nТакое отношение к Bootstrap появилось из-за того, что многие люди не понимают, что это за инструмент на самом деле. Они заходят в документацию, видят какие-то классы, компоненты, и не понимают, что можно из этого сделать. \n\nА под капотом у Bootstrap есть все возможности, чтобы построить сетку, использовать другие методологии, создавать новые компоненты, утилиты. То есть это фреймворк в его обычном понимании. Он навешивает на нас какие-то ограничения, но взамен даёт свою архитектуру, внутри которой можно работать. \n\nПоэтому серьёзные верстальщики должны знать Bootstrap. Это как с React, Angular, Vue в JavaScript, как Symfony, Laravel, Yii2 у PHP-разработчиков, как [Django в Python](https://ru.hexlet.io/blog/posts/pochemu-django-luchshiy-freymvork-dlya-razrabotki-saytov). То же самое и у верстальщиков. \n\nКто-то считает, что Bootstrap нельзя использовать с БЭМ. Это не так, фреймворк прекрасно работает с этой методологией. \n\nЭто моё мнение насчёт Bootstrap, мой взгляд на то, почему его неправильно интерпретируют. \n\n**— А скажи пожалуйста, какие есть популярные и востребованные на рынке труда альтернативы Bootstrap?**\n\n— Сейчас популярен Tailwind CSS. Этот проект похож на Bootstrap, но он больше ориентирован на количество компонентов, на другую стилизацию. По факту это немного расширенный Bootstrap. У него немного отличается направление развития. \n\nTailwind прирастает за счёт компонентов, а Bootstrap исправляет свои внутренние части, даёт какие-то инструменты для разработки. Например, в Bootstrap 5 появилось API для создания утилит. \n\nЕщё есть UIKit, Material Kit. Фреймворков много, и все они строятся примерно на одних и тех же принципах. Есть Bulma, есть Foundation. Последний помогает кроме всего прочего красиво верстать письма. \n\nЧто изучать? Мне больше всего нравится Bootstrap. Если хочется иметь больше готовых компонентов, это Tailwind CSS, UIKit. Но их сложнее кастомизировать.\n\n**— Многие новички пугаются препроцессоров. В то же время если человек освоил препроцессоры, он уже вряд ли захочет возвращаться к работе с чистым CSS. Можешь для новичков сказать несколько мотивирующих (или не очень мотивирующих) слов: почему препроцессоры стоит освоить, чем они хороши? Сложно ли их использовать?**\n\n— Главное — понять, зачем нужен этот инструмент. Препроцессоры упрощают нам жизнь. Зачем бояться того, что нам помогает? Препроцессоры помогают быстрее делать многие вещи. Но сначала надо кое-что выучить. \n\nВозьмём распространённый пример: у нас есть цветовая схема. Нам нужно создать классы, с помощью которых можно менять цвет текста. Допустим, мы работаем в рамках атомарного или объектно-ориентированного CSS. Сколько нужно сделать классов, если у нас на сайте 100 цветов? И что проще: написать пару строчек в препроцессоре, который за нас пройдётся по всем цветам и сделает нужные классы с нужным названием, или 100 раз руками скопировать код и переименовать класс? Тут ответ очевиден. \n\nИменно такие задачи решает препроцессор. Он многие вещи делает за нас. \n\nЕщё один пример: возьмём вложенность. Допустим, у нас есть селектор `.page`, а внутри него есть `.page-button`. Благодаря вложенности мы избегаем дублирования. Частая проблема CSS — неструктурированность. Это когда один кусок кода находится вверху, второй в середине и так далее. Препроцессоры помогают структурировать код. \n\nЕщё препроцессоры помогают сократить количество кода. Например, мы часто используем центрирование через Flex. Для этого мы можем использовать свойства `display: flex`, `justify-content: center`, `align-items: center`. Если надо центрировать много элементов, нам приходится эти три строчки копировать и вставлять. \n\nА потом мы решаем не центрировать элементы по вертикали. Теперь что нужно? Пройтись по всем элементам и удалить одно свойство. Что позволяет сделать препроцессор, причём, неважно какой — SASS, LESS, Stylus? Мы просто объявляем миксин или шаблонный селектор, указываем три свойства, а потом подключаем во всех нужных селекторах. Если вдруг что-то изменится, достаточно один раз исправить в объявлении нужное свойство, и оно будет работать во всех селекторах. \n\nПоэтому не стоит бояться препроцессоров. Да, в них есть сложные вещи, связанные с программированием — циклы, функции, массивы, ассоциативные массивы. Но даже если вы не знакомы с программированием, эти вещи можно быстро изучить в рамках шаблона. То есть можно не понимать, что именно происходит под капотом, но писать циклы и понимать, что они пройдутся вон там и сделает вот это. \n\n**— С какими инструментами должен уметь работать, чтобы обрабатывать макеты и превращать их в вёрстку? Я имею в виду Photoshop, Figma, какие-то другие графические редакторы, инструменты типа Zeplin и тому подобные.**\n\n— Наверное, Figma всё увереннее становится стандартом за счёт своей кроссплатформенности. Если взять Photoshop, с ним на Linux будут проблемы. Sketch работает только под macOS. А Figma работает на всех операционных системах в любом браузере. \n\nДостаточно изучить Figma, это поможет понять принцип работы с аналогичными инструментами. Причём верстальщику не надо знать, как создать макет. Ему достаточно знать, как посмотреть отступы. То есть запомнить, что выбрав элемент, зажав alt и наведя мышкой на соседний элемент, можно увидеть отступы. Или что при выборе элемента в правой панели можно увидеть шрифт, отступы и так далее.\n\nЭтого достаточно, чтобы работать верстальщиком. А для того же Photoshop всё будет выглядеть примерно так же. В Zeplin всё то же самое. В Sketch, я думаю, тоже проблем не будет, это одна и та же функциональность. \n\n**— Какими инструментами ты пользуешься в работе и можешь порекомендовать их новичкам? Можно прямо по списку: редактор или IDE, основные плагины, любимый CSS-фреймворк, препроцессор, сборщик и так далее.**\n\n— Пользуюсь Visual Studio Code от Microsoft. Мне удобна его кроссплатформенность, потому что у меня на стационарном компьютере установлена Windows, на ноутбуке Linux, на компьютере второй системой ещё один Linux. И везде без проблем работает Visual Studio Code. \n\nОсобенно удобно, что в последних версиях появилась синхронизация настроек. Я авторизуюсь через GitHub, и везде подтягиваются мои настройки. Это плагины, цветовые схемы, масштабирование, шрифты. \n\nСчитаю, что нужно хотя бы на базовом уровне уметь работать с другими редакторами. Тот же Vim нужно знать на уровне «я могу напечатать, сохранить и, о боги, выйти из Vim». Это нужно хотя бы для ситуации «а что, вдруг...». Например, вам попался ноутбук без установленных редакторов, нужно срочно зайти на сервер и поправить вёрстку. \n\nИз плагинов я использую Emmet. Он позволяет писать псевдокод и разворачивать его в HTML. Это удобно при работе с повторяющимися блоками. Также пользуюсь встроенной в Visual Studio Code системой автодополнения. В других редакторах тоже есть встроенные системы автодополнения или специальные плагины. \n\nОбязательно использую какой-нибудь live server просто для того, чтобы запускать вёрстку и отслеживать изменения. Это можно сделать и с помощью Gulp. Но иногда мы просто создаём файл .html и .css и хотим видеть изменения без всяких сборок. Для этого подходят какие-то live servers. Их можно найти на npm, установить глобально или локально.\n\nТакже я использую и рекомендую всем использовать линтеры. У меня всегда в рабочей директории есть Stylelint, HTMLHint. Плагин Stylelint в Visual Studio Code всегда подсвечивает мне проблемы в коде. Это помогает исправлять на ходу какие-то ошибки, например, неправильный порядок свойств, ошибки в названии свойств и так далее. А HTMLHint проверяет валидность вёрстки. \n\nСреди препроцессоров выбираю SASS. Я его преподаю, я им больше всего пользуюсь. В принципе, нет разницы, каким пользоваться. Просто выбирайте тот, синтаксис которого вам больше нравится. \n\nЕсть небольшой нюанс, из-за которого я считаю SASS с синтаксисом SCSS более удобным. Этот препроцессор совместим с обычным CSS. То есть вы можете взять любой файл .css. переименовать его в .scss, и он будет работать. С другими препроцессорами так не получится, в том числе с SASS с синтаксисом Sass. \n\nНадо понимать, что есть препроцессор SASS, а его можно использовать с синтаксисом Sass или SCSS. В SCSS нужны внутри фигурные скобки, а в Sass они не нужны. В этом основное отличие синтаксиса. Поэтому SCSS имеет обратную совместимость с CSS, а Sass нет. \n\nСборщики я не использую, они для верстальщиков, особенно для небольших задач, слишком монструозны. Нету особого смысла использовать такой инструмент просто для компиляции файлов. Эту задачу я решаю с помощью таск-менеджера Gulp. Я ему говорю, какой надо взять плагин, файл, и куда положить результат. \n\nКстати, возвращаясь к препроцессорам. Я использую HTML-препроцессор Pug. Просто мне так удобно. Этот инструмент предупреждает ошибки, связанные с открытием и закрытием тегов. В Pug не нужно открывать и закрывать теги, всё строится на уровне вложенности. Если вы писали на Python или хотя бы видели код, то понимаете, о чём речь. Чтобы вложить один код в другой, надо использовать табуляцию. \n\nЛюбимый CSS-фреймворк — Bootstrap. Я евангелист этого фреймворка. Бегаю везде и говорю, насколько он прекрасный. Где-то читаю доклады, пытаюсь показать, что Bootstrap далеко не для админок. \n\n**— Я знаю, что ты контрибьютишь в Bootstrap. Это правда?**\n\n— Да, есть такой опыт. \n\n\n> Слепые люди не видят сайт, они могут ориентироваться с помощью того, что вы как верстальщик им дали: о доступности \n\n**— Важный вопрос, который ты постоянно поднимаешь в статьях — доступность. Кажется, только для небольшой доли посетителей обычного сайта нужна доступность, почему в таком случае этому вопросу надо уделять внимание? Какие инструменты использует верстальщик, чтобы обеспечить доступность сайта?**\n\n— Я бы поспорил насчёт того, что людей, для которых важна доступность, мало. Доступность — это адаптация страницы для людей с ограниченными возможностями. \n\nКакие здесь могут быть сценарии? \n\nНапример, люди, у которых проблемы с опорно-двигательным аппаратом, с трудом пользуются мышью или одновременно клавиатурой и мышью. Им трудно одновременно скролить мышью и нажимать клавиши, как это делают люди без особых потребностей. Такие люди переходят на сайты, двигаются по странице к интерактивным элементам, не используя мышь. \n\nТакой сценарий используют и обычные люди. Например, мне иногда хочется развалиться на диване и не скролить страницы с помощью мыши, а перемещаться по ним с помощью клавиатуры. Тут помогает знание горячих клавиш. Но на некоторых сайтах это сделать сложно, потому что верстальщики не подумали, что такой сценарий использования возможен. \n\nКак это проявляется? Представим стандартные интерактивные элементы, например, кнопки или ссылки. Предположим, у нас есть ссылка или кнопка «Подробне», которая ведёт вниз страницы. Как обычно делают такие элементы? Мы в атрибут href ставим решётку и id элемента, к которому нужно прокрутить страницу. \n\nНо этот id попадёт в браузерную строку, а это ужасно не любят специалисты по SEO. Они просят сделать элемент обычным `<div>`, повесить обработчик и по клику перемещать человека в нужную область страницы. Это работает, если человек пользуется мышью. Но `<div>` — не интерактивный элемент. Мы не сможем попасть на него с помощью клавиши tab. Она отвечает за то, чтобы пользователь браузера перешёл к следующему интерактивному элементу. \n\nТакие же проблемы бывают с формами, так как все любят стилизовать их, делать красивыми, но верстают не с помощью стандартных тегов типа, `<input>`, `<label>`, а просто там навесили, тут как-то JavaScript'ом обработали. С клавиатуры такие формы недоступны. \n\nЭто один из примеров того, зачем нужна доступность. Ещё одна вещь, которую могут использовать не только люди с особыми потребностями — масштабирование страницы. Я иногда использую это возможность, чтобы было удобно читать контент. \n\nНа некоторых сайтах при увеличении масштаба хотя бы в два раза вёрстка разваливается. Это желательно отслеживать. Страница должна выглядеть нормально как минимум при увеличении масштаба в два раза, а желательно — и в три, и в четыре раза. \n\nЕсли говорить о более специфических моментах, есть слепые люди. Это разные люди. Например, есть слепые программисты, которые пользуются скринридерами. Это приложения, которые считывают информацию с экрана. Например, есть прекрасный скринридер NVDA. Он встраивается в операционную систему и читает, что происходит в браузере, в текстовых редакторах. \n\nСлепые люди не видят сайт. Они могут ориентироваться с помощью того, что вы как верстальщик им дали. А вы можете им дать правильную семантическую вёрстку. Это к вопросу использования вместо . Вы можете правильно верстать формы, строить меню, [соблюдать порядок заголовков](https://ru.hexlet.io/blog/posts/semantika-zagolovkov-kak-pravilno-strukturirovat-informatsiyu-na-veb-stranitsah). Это очень важно для людей, которые используют скринридер. \n\nЯ часто замечаю, что верстальщики не соблюдают вложенность заголовков. Они могут сначала поставить для подзаголовка, а после него ставят заголовок первого уровня, потом внезапно заголовок пятого уровня. Они ориентируются на размер заголовка, а не на семантический смысл. \n\nА скринридеры позволяют перемещаться непосредственно по заголовкам. То есть если я хочу быстро посмотреть, какие глобальные темы раскрываются на странице, я начинаю переходить по заголовкам второго уровня. И тут из-за неправильной вёрстки могут быть проблемы. Один заголовок второго уровня может быть на месте заголовка первого уровня, в другом месте вместо заголовка второго уровня стоит заголовок третьего уровня просто потому, что он по размеру подходит. \n\nТакие вещи важно учитывать, чтобы верстать сайты, удобные для слабовидящих и слепых людей. На Западе доступность сайта уже считается стандартом де-факто, как и адаптивная вёрстка. Никому ведь не приходит в голову не делать страницы адаптивными, так как на сайт ходит мало пользователей через мобильные устройства. То же самое и со скринридерами. \n\nИ последний пункт. Есть люди с нарушениями цветовосприятия. Для них очень важен контраст текста и вообще контраст элементов страницы относительно фона. Такие люди могут плохо различать неконтрастные элементы. \n\nОчень часто в дизайне используется светлый блок на светлом фоне. С точки зрения дизайна это может выглядеть минималистично и красиво. Но представьте, что у вас нарушено цветовосприятие и вы с трудом различаете близкие друг к другу цвета. Это, кстати, очень распространённое явление. Если большинству людей показать два красных цвета с разной насыщенностью или тоном, они просто не найдут разницы. \n\nНаш мозг обрабатывает цвета немного странно, его легко обмануть. Есть прекрасная книга Джозефа Альберса «Взаимодействие цвета». В ней очень интересно написано, как мозг может обработать два цвета как один, три как два и так далее. Много там построено на том, что нет большого контраста. Всё то же самое работает и на веб-страницах. Поэтому важно правильно работать с контрастом, чтобы не допускать таких проблем. \n\nИнструменты, которыми можно пользоваться для обеспечения доступности, вытекают из этих кейсов. Возьмите свой проект, уберите мышь и попробуйте совершить какое-то действие — оформить заказ, подписаться на рассылку и так далее. Посмотрите, что происходит. Это поможет понять, что нужно улучшить. \n\nИз скринридеров можно использовать NVDA или какие-то браузерные расширения. Но расширения работают не очень хорошо, я предпочитаю десктопный вариант. Если брать другие инструменты, то в каждом браузере с «девтулзами» уже есть какие-то базовые вещи для проверки доступности. В FireFox есть отдельная панель, связанная с доступностью. В Chrome есть Lighthouse, который проверяет доступность. Также в Chrome есть [расширение axe](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd), нацеленное на работу с доступностью. \n\nСамое главное — пробовать себя на месте людей с ограниченными возможностями. Пробуйте разные сценарии: выключайте монитор и пользуйтесь скринридером, играйте с настройками контраста, пробуйте ходить по модным сайтам, которые используют светлое на светлом. Вы увидите, что трудно найти те или иные элементы. \n\n**— Никита, уточняющий вопрос. Из инструментов ты назвал вещи, которыми можно проверять доступность. А как всё-таки верстальщик её обеспечивает? Я правильно понимаю, что это просто се��антическая вёрстка, и больше ничего в арсенале нет?** \n\n— Это семантическая вёрстка — раз, это использование aria-атрибутов — два. Эти атрибуты помогают дополнительно указать, что за элемент перед нами. Есть много специфических ролей, которые можно указать для элемента.\n\nЕщё у W3C есть огромный документ — WCAG. Это гайдлан, в котором указано, как обеспечивать доступность контента. В нём можно прочитать, какой должен быть контраст, как его проверять, какие формулы для этого используются. Я использовал этот гайдлайн, когда писал [статью о контрастности цвета](https://ru.hexlet.io/blog/posts/chto-nuzhno-znat-o-kontraste-teksta-i-kak-kontrolirovat-kontrast-s-pomoschyu-sass). То есть в руководстве от W3C можно найти спецификации, которые объясняют доступность.\n\n> VR станет массовым, это добавит работы верстальщикам: о перспективах вёрстки\n\n**— Как ты думаешь, какой будет вёрстка через 10 или 20 лет? Например, сохранятся ли HTML и CSS или у нас будут новые языки разметки и стилей?** \n\n— Честно говоря, не думаю, что через 10 или 20 лет что-то глобально изменится. Понятно, что будет много небольших изменений. Думаю, у нас появятся новые способы взаимодействия. Условный VR через 20 лет станет более продвинутым и массовым. А чем более массовым он будет, тем больше работы будет у верстальщиков. Нужно будет делать веб-интерфейсы доступными для VR. \n\nНо в целом нет предпосылок, чтобы HTML и CSS исчезли. Они отлично справляются со своей работой. HTML эффективно передаёт браузеру структуру, которую мы хотим видеть, а браузер её обрабатывает. Возможно, изменится способ обработки HTML в браузере. Но сам язык разметки будет актуальным до тех пор, пока существуют браузеры в том виде, в котором мы их знаем. \n\n**— Несколько лет назад верстальщиков пугали появлением новых гаджетов — от умных очков и часов, смартфонов с гибким экраном до дисплеев холодильников и кофеварок, под которые надо верстать по-новому. А как на самом деле влияет на вёрстку появление разнообразных девайсов с разными экранами?**\n\n— Для верстальщиков это просто новые устройства. По хорошему, процесс семантической вёрстки не меняется под каждый девайс. Понятно, что для Smart TV есть свои законы, для умных часов свои законы и для умных кофемолок свои законы. Но верстальщик будет всегда использовать одни и те же концепции. \n\nВозьмём Smart TV, где пользователь управляет устройством с помощью джойстика. Это просто переходы к следующим интерактивным элементам. Да, изменился внешний вид и способ взаимодействия, но суть осталась той же. Это просто перемещение по интерактивным элементам. \n\nЕсли мы возьмём достаточно большой дисплей для холодильника, который можно использовать для сёрфинга, это уже привет телефонам. Это то же самое, только мы управляем не тем, что у нас в руке, а тем, что стоит на полу. Поэтому новые вещи могут накладывать свои ограничения, но в фундаментальных вещах остаются такими же. Важно изучать фундаментальные вещи, а не хвататься за каждую новинку. \n\n **— Стандарт HTML5 дал нам семантический веб. Если проанализировать тенденции или даже просто пофантазировать, что будет в следующих стандартах? Стоит ли ждать революционных изменений, или это будут постепенные улучшения?**\n\n— Если брать HTML, то каких-то революций я не наблюдаю и не жду. Конечно, я человек и не могу знать всё. Скорее, каких-то революционных изменений надо ждать со стороны CSS. Мы уже столкнулись с тем, что существующие стандарты и возможности CSS нас стесняют. Не зря ведь появляются препроцессоры, которые расширяют возможности CSS. \n\nЭти расширенные возможности потихоньку пролезают в стандарты CSS. У нас уже есть переменные, которые работают интереснее, чем препроцессоры. Уже идут разговоры о шаблонах внутри CSS. Уже в черновиках стандартов появляются вложенности. Я жду новых мощных инструментов в CSS. \n\nHTML5 ещё не устарел, ещё не появились принципиально новые способы взаимодействия с пользователем. Смысла в кардинальном обновлении стандарта нет. Возможно, когда интернет вещей вступит в права, когда появятся новые технологии, тогда нам понадобится что-то новое. А пока нам достаточно возможностей HTML5, чего нельзя сказать о CSS3. \n\n::posts\n\n**— Никита, спасибо большое за интересный разговор. Нам остаётся пригласить читателей изучать вёрстку в рамках [программы «Верстальщик»](https://ru.hexlet.io/programs/layout-designer).**\n\n— Да, приглашаю. Почему я вообще считаю, что стоит попробовать то, что есть на Хекслете? Я стараюсь давать студентам глубинные вещи, погружаюсь не только в то, что работает, но и в то, почему и как оно работает. В том же курсе по Bootstrap описываются не только классы. Студент понимает, как строятся проекты с помощью Bootstrap, как делать кастомные компоненты. Поэтому приходите на Хекслет за фундаментальными знаниями!\n\n**— Ещё раз спасибо за разговор!**\n\n— Желаю читателям удачи!","reading_time":21,"url":"https://ru.hexlet.io/blog/posts/html-css-perspectives","cover_thumb_variant":null,"cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp","cover_main_variant":"/vite/assets/blog_post-7eTyeLLt.webp","related_stacks_count":5},"relatedPosts":[{"model_name":"BlogPost","id":660,"title":"Кто такой тестировщик и как им стать","slug":"gid-po-professii-testirovschik-chem-zanimaetsya-skolko-zarabatyvaet-chto-nado-znat-i-gde-uchitsya","summary":"Рассказываем, кто такой тестировщик и чем он занимается, сколько зарабатывает такой специалист, а также какие нужны знания и компетенции, чтобы им стать.","created_at":"2020-01-29T16:58:16.214Z","published_at":"2023-12-29T10:36:34.186Z","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTYzNiwicHVyIjoiYmxvYl9pZCJ9fQ==--72f5a3fb78c634c408f39349dbd2e203809b4069/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%82%D0%B5%D1%81%D1%82%D0%B5%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA2023-01.png"},{"model_name":"BlogPost","id":1234,"title":"Во время обучения программисты должны решать реальные задачи: интервью с руководителем IT-магистратуры МАИ Павлом Кейно","slug":"mai-and-hexlet-collaboration","summary":"Несколько месяцев назад Хекслет реализовал партнёрский пилотный проект с Московским авиационным институтом (МАИ). Студенты магистратуры «Проектирование высоконагруженных интернет-сервисов» получили доступ к учебным материалам нашей платформы. А руководители магистратуры включили обучение на Хекслете в учебный план. Эксперимент оказался удачным. Подробнее об этом мы поговорили с руководителем магистратуры МАИ Павлом Кейно.\r\n","created_at":"2021-01-14T07:31:41.047Z","published_at":"2021-01-14T09:57:55.853Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"},{"model_name":"BlogPost","id":1179,"title":"Публичное собеседование для PHP-программиста","slug":"publichnoe-sobesedovanie-dlya-php-programmista","summary":"Продолжаем проведение публичных собеседований на youtube-канале Хекслета. 22 декабря в 19:00 по московскому времени начнётся интервью для PHP-программиста. Собеседует и задаёт вопросы Руслан Ханов, организатор митапов Symcode в Петербурге, разработчик в ИТМО. Отвечает на вопросы PHP-backend developer, участник комьюнити Хекслета Александр Максин.","created_at":"2020-12-22T09:36:34.151Z","published_at":"2020-12-22T09:37:57.088Z","cover_list_variant":"/vite/assets/blog_post-7eTyeLLt.webp"}],"category":{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"},"mainStackCategory":{"id":2,"name":"Курсы по веб-разработке","slug":"web_development","short_name":"Веб-разработка","order":190,"state":"published","category_slug":"courses_web_development"},"categories":[{"id":6,"name":"Мотивация","slug":"motivation","state":"published","created_at":"2016-10-06T18:31:38.903Z"},{"id":3,"name":"Истории успеха","slug":"success","state":"published","created_at":"2016-07-30T12:57:18.308Z"},{"id":14,"name":"Дневник студента","slug":"student-diary","state":"published","created_at":"2019-02-25T13:27:09.471Z"},{"id":4,"name":"Код","slug":"code","state":"published","created_at":"2016-08-23T13:33:44.258Z"},{"id":12,"name":"Карьера","slug":"career","state":"published","created_at":"2017-07-21T15:42:21.481Z"}],"relatedLandings":[{"stack":{"id":19,"slug":"layout-designer","title":"Профессиональная верстка","audience":"for_beginners","start_type":"anytime","pricing_model":"purchase","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":1700,"duration_in_months":5},"id":26,"slug":"professional-layout","title":"Профессиональная верстка","subtitle":"Навык адаптивной вёрстки с современными подходами для корректного отображения сайтов на любых устройствах и разрешениях","subtitle_for_lists":"Адаптивная вёрстка для отображения на любых устройствах ","locale":"ru","current":true,"duration_in_months_text":"5 месяцев","stack_slug":"layout-designer","price_text":"от 3 900 ₽","duration_text":"5 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png"},{"stack":{"id":41,"slug":"layout-designer-positioning","title":"Позиционирование в CSS","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":4800,"duration_in_months":1},"id":70,"slug":"layout-designer-positioning","title":"Позиционирование в CSS","subtitle":"Навык разработки адаптивных интерфейсов, позволяющий создавать удобные и функциональные решения для различных устройств","subtitle_for_lists":"Получите навык работы с CSS и адаптивными интерфейсами","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"layout-designer-positioning","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png"},{"stack":{"id":114,"slug":"css-animation","title":"Анимация CSS","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":2900,"duration_in_months":1},"id":185,"slug":"css-animation","title":"Анимация CSS","subtitle":"Анимации в вебе: как использовать CSS и JavaScript для создания плавных эффектов","subtitle_for_lists":"Освоите CSS-анимации для улучшения UX","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"css-animation","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png"},{"stack":{"id":133,"slug":"sass","title":"SASS","audience":"for_programmers","start_type":"anytime","pricing_model":"subscription","priority":"medium","kind":"track","state":"published","stack_state":"finished","order":2000,"duration_in_months":1},"id":226,"slug":"sass","title":"SASS","subtitle":"Навык работы с препроцессором SASS для эффективной и структурированной стилизации веб-приложений","subtitle_for_lists":"Освоите препроцессор SASS и стилизацию веб-приложений","locale":"ru","current":true,"duration_in_months_text":"1 месяц","stack_slug":"sass","price_text":"от 3 900 ₽","duration_text":"1 месяц","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyMiwicHVyIjoiYmxvYl9pZCJ9fQ==--8e763c5a65cfc8d5e67cb29ae3d1881ad23c714e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Hand%20coding-bro.png"},{"stack":{"id":12,"slug":"frontend","title":"Фронтенд-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":20,"duration_in_months":10},"id":17,"slug":"frontend","title":"Фронтенд-разработчик","subtitle":"Изучите HTML, CSS, JavaScript и React","subtitle_for_lists":"Изучите HTML, CSS, JavaScript и React","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"frontend","price_text":"от 6 792 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png"}]},"url":"/blog/posts/html-css-perspectives","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","author":"Дмитрий Дементий","name":"Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым","datePublished":"2021-02-05T07:49:47.408Z","headline":"Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе. ","image":"/vite/assets/blog_post-7eTyeLLt.webp","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":18}]}</script><div style="--container-size:var(--container-size-lg);margin-top:var(--mantine-spacing-xl);height:100%" class="m_7485cace mantine-Container-root" data-size="lg" data-strategy="block"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"position":1,"@type":"ListItem","item":{"@id":"/blog","name":"Блог Хекслета"}},{"position":2,"@type":"ListItem","item":{"@id":"/blog/categories/career","name":"Карьера"}},{"position":3,"@type":"ListItem","item":{"@id":"/blog/posts/html-css-perspectives","name":"Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым"}}]}</script><div style="margin-bottom:var(--mantine-spacing-xs)" class="m_8b3717df mantine-Breadcrumbs-root"><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/"><div style="color:inherit" class="m_4451eb3a mantine-Center-root"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-home-link "><path d="M20.085 11.085l-8.085 -8.085l-9 9h2v7a2 2 0 0 0 2 2h4.5"></path><path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 1.807 1.143"></path><path d="M20 21a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M20 16a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M15 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M21 16l-5 3l5 2"></path></svg></div></a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog">Блог Хекслета</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><a style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:inherit" class="mantine-focus-auto m_849cf0da m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-size="sm" data-underline="hover" href="/blog/categories/career">Карьера</a><div class="m_3b8f2208 mantine-Breadcrumbs-separator">/</div><p style="--text-fz:var(--mantine-font-size-sm);--text-lh:var(--mantine-line-height-sm);white-space:normal;color:var(--mantine-color-dimmed)" class="mantine-focus-auto m_f678d540 mantine-Breadcrumbs-breadcrumb m_b6d8b162 mantine-Text-root" data-size="sm">Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым</p></div><style data-mantine-styles="inline">.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}@media(min-width: 36em){.__m__-_R_eub_{margin-bottom:var(--mantine-spacing-xs);}}</style><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root __m__-_R_eub_"><style data-mantine-styles="inline">.__m__-_R_deub_{width:100%;}@media(min-width: 36em){.__m__-_R_deub_{width:70%;}}@media(min-width: 75em){.__m__-_R_deub_{width:75%;}}</style><div class="__m__-_R_deub_"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size)" class="m_8a5d1357 mantine-Title-root" data-order="1">Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым</h1></div></div></div><div style="position:absolute;top:calc(18.75rem * var(--mantine-scale))" class=""></div><style data-mantine-styles="inline">.__m__-_R_2iub_{--grid-gutter:var(--mantine-spacing-xl);}</style><div class="m_410352e9 mantine-Grid-root __m__-_R_2iub_"><div class="m_dee7bd2f mantine-Grid-inner"><style data-mantine-styles="inline">.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}@media(min-width: 62em){.__m__-_R_dmiub_{--col-flex-grow:auto;--col-flex-basis:66.66666666666667%;--col-max-width:66.66666666666667%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_dmiub_"><div style="--stack-gap:var(--mantine-spacing-md);--stack-align:stretch;--stack-justify:flex-start;margin-bottom:var(--mantine-spacing-xl)" class="m_6d731127 mantine-Stack-root"><div class=""><div style="--group-gap:var(--mantine-spacing-xs);--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-xl)" class="m_4081bf90 mantine-Group-root"><button style="--badge-height:var(--badge-height-sm);--badge-padding-x:var(--badge-padding-x-sm);--badge-fz:var(--badge-fz-sm);--badge-bg:var(--mantine-color-default);--badge-color:var(--mantine-color-default-color);--badge-bd:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);cursor:pointer;color:inherit" class="m_347db0ec mantine-Badge-root" data-variant="default" data-size="sm" type="button" aria-label="Фронтенд"><span class="m_5add502a mantine-Badge-label">Фронтенд</span></button></div><div style="--group-gap:calc(0.625rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-sm);color:var(--mantine-color-gray-text)" class="m_4081bf90 mantine-Group-root"><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap;margin-inline-end:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root">5 февраля 2021 г.</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-clock "><path d="M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"></path><path d="M12 7v5l3 3"></path></svg></div>21 минута</div><div style="--group-gap:calc(0.1875rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div>18</div></div><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img style="--image-radius:var(--mantine-radius-md);--image-object-fit:cover;width:100%;height:100%" class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" alt="Нельзя однозначно сказать, что вёрстка проще программирования: интервью с преподавателем Хекслета Никитой Михайловым"/></div></div><div role="link" tabindex="0" style="cursor:pointer"><button style="display:block;width:100%" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Присоединяйтесь к нашему Telegram-сообществу"><div style="background-color:light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-6))" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:flex-start;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><div style="--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:auto;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-brand-telegram "><path d="M15 10l-4 4l6 6l4 -16l-18 7l4 2l2 6l3 -4"></path></svg></div>Присоединяйтесь к нашему Telegram-сообществу</div></div></button></div><div style="margin-bottom:var(--mantine-spacing-xl)" class="m_d08caa0 mantine-Typography-root"><p>Преподаватель Хекслета Никита Михайлов в интервью рассказал, кому актуально изучать вёрстку, поделился мыслями о ситуации на рынке труда и профессиональных перспективах верстальщиков. Также Никита поделился списком любимых инструментов, рассказал, что нужно знать новичкам, чтобы претендовать на позицию джуниора, порассуждал о перспективах HTML и CSS в обозримой перспективе.</p>
<p><strong>— Никита, представься пожалуйста — расскажи нашим читателям о себе всё, что считаешь нужным.</strong></p>
<p>— Меня зовут Никита Михайлов, занимаюсь разработкой порядка 8 лет. Начинал как веб-мастер, который на все руки. В небольшой веб-студии мы разрабатывали сайты, верстали. Писали код на PHP, JavaScript.</p>
<style data-mantine-styles="inline">.__m__-_R_7derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_7derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_7derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/professional-layout?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">5 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Профессиональная верстка</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Адаптивная вёрстка для отображения на любых устройствах </p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAzNCwicHVyIjoiYmxvYl9pZCJ9fQ==--ba516ea9573bdfcd1d21e2aa0fff8818561828f2/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Typing-bro.png" alt="Профессиональная верстка" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/layout-designer-positioning?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Позиционирование в CSS</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Получите навык работы с CSS и адаптивными интерфейсами</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAwNCwicHVyIjoiYmxvYl9pZCJ9fQ==--43a2eb3595eeebb3357d478cbcb752d0026363de/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Website%20Creator-cuate.png" alt="Позиционирование в CSS" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/css-animation?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Анимация CSS</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Освоите CSS-анимации для улучшения UX</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyNSwicHVyIjoiYmxvYl9pZCJ9fQ==--3b94875bb52777724a7b11b075b8891f331d8cdf/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-amico.png" alt="Анимация CSS" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/sass?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">1 месяц</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Для продвинутых</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">SASS</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Освоите препроцессор SASS и стилизацию веб-приложений</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NDAyMiwicHVyIjoiYmxvYl9pZCJ9fQ==--8e763c5a65cfc8d5e67cb29ae3d1881ad23c714e/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Hand%20coding-bro.png" alt="SASS" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 900 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/frontend?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Фронтенд-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите HTML, CSS, JavaScript и React</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzcyNywicHVyIjoiYmxvYl9pZCJ9fQ==--2d5cbbf5c3b4a73ae4b2c50632305d78f5872e4d/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programmer-rafiki.png" alt="Фронтенд-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 6 792 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=blog_post&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div>
<p>Сейчас развиваю программу «Верстальщик» на Хекслете. Пишу курсы, делюсь своими знаниями и опытом, который приобрёл за годы работы в разработке.</p>
<p><strong>— Кем ты себя считаешь в первую очередь: преподавателем, разработчиком, программистом, верстальщиком?</strong></p>
<p>— Наверное, это можно назвать «верстальщик-исследователь». То есть я передаю студентам знания, но при этом сам слежу за трендами, знаю, что происходит в разработке, изучаю новые вещи, необычные сочетания вещей, пытаюсь донести студентам, как можно сделать то или это. С одной стороны, это преподавание, а с другой — исследовательская работа. И в следующую очередь я разработчик.</p>
<p><strong>— То есть сочетаешь практику и теорию: преподаёшь и что-то делаешь руками, правильно?</strong></p>
<p>— Конечно. Чтобы написать курсы, упражнения, давать какие-то уроки, ты не можешь устраняться от самой разработки, потому что потеряешь весь скилл. Невозможно просто писать курсы, не занимаясь разработкой.</p>
<p>Когда я только пришёл на Хекслет, я что-то верстал на нашем сайте и на <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.code-basics.com/" rel="noopener noreferrer" target="_blank">Code Basics</a> какие-то вещи делал. Поэтому, мне кажется, преподаватель должен быть действующим разработчиком. Просто преподавание для меня — вершина, моя основная деятельность.</p>
<blockquote>
<p>Для вёрстки большие компании ищут матёрых ребят, но войти в разработку через вёрстку можно: о ситуации на рынке труда</p>
</blockquote>
<p><strong>— Предыдущий вопрос был с подвохом, он поможет нам сразу взять быка за рога и перейти к обсуждению принципиальных вопросов. Первый из них: у нас на Хекслете ты в первую очередь развиваешь профессию «Верстальщик». Востребованы ли чистые верстальщики на рынке труда? Или вёрстку стоит рассматривать как часть других профессий, например, как часть фронтенд-разработки?</strong></p>
<p>— Наверное, нельзя сказать, что чистые верстальщики, особенно джуны, так же востребованы на рынке, как JavaScript-разработчики или PHP-, Python-разработчики. Начинающих верстальщиков ждут на рынке не так охотно, как программистов.</p>
<p>Для вёрстки большие компании ищут матёрых ребят, которые понимают не только как сверстать, но и почему нужно сделать так, а не иначе, как это будет работать в других браузерах или на мобильных экранах.</p>
<p>Но войти в разработку через вёрстку можно. Я посмотрел сейчас на «Хедхантере» — по запросу «HTML-верстальщик» есть 121 вакансия. Это не считая заказы на фрилансе, подработок.</p>
<p>Надо понимать, что мало кто хочет быть чистым верстальщиком. Многие считают вёрстку одним из этапов становления фронтенд-разработчика.</p>
<p><strong>— Попробуем зайти с другой стороны: сейчас есть тенденция разделять верстальщиков и фронтенд-программистов. Первые создают layout и стилизуют элементы, а вторые занимаются интерактивностью и логикой. Как ты считаешь, это правильное разделение? Во фронтенде рулит специализация, или всё-таки рынку нужны разработчики-универсалы, которые умеют классно верстать и программировать?</strong></p>
<p>— Считаю, что сейчас больше выделяется специализация, потому что набор того, что должен знать фронтендер и какими инструментами он должен владеть, слишком большой. Он настолько большой, что один человек не может быть одинаково сильным во всём.</p>
<p>Понятно, что фронтенд-разработчик должен знать и вёрстку, и JavaScript, понимать, как это всё работает. Но в профессиональной среде есть разделение. Одни погружаются в JavaScript, глубоко знают JS-фреймворки, а другие уходят в сторону стилизации, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/ux-for-frontenders" rel="noopener noreferrer" target="_blank">работы с дизайном, UI, UX</a> и так далее.</p>
<p>То есть разделение есть, и оно обусловлено невероятным количеством инструментов, которые используются во фронтенде.</p>
<p><strong>— Никита, ты говоришь, что фронтендеры должны знать слишком много инструментов. А мы можем сказать, что бэкендарам здесь больше повезло? Что им достаточно выучить сервер, базы данных, и можно работать.</strong></p>
<p>— Нельзя сказать, что работа бэкендера проще. Просто у бэкендеров проще схема развития. Действительно, они изучают сервер, базы данных. Также изучают серверный язык программирования, например, Go, PHP, Python и так далее. И у них эта ветка более понятная.</p>
<p>У бэкендеров тоже есть разделение. Кто-то работает условно больше с базами данных, занимается оптимизацией запросов. Кто-то пишет внутреннюю логику самого проекта. Но во фронтенде всё равно больше инструментов.</p>
<p>Тем не менее это не значит, что войти в бэкенд-разработку проще. Пусть там меньше инструментов, но там надо глубже понимать какие-то вещи, например, алгоритмы, нужно лучше знать паттерны, на которых всё строится. Фронтенд-разработчикам здесь чуть проще, хотя это достаточно <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/chto-takoe-holivar-7-yarkih-primerov-iz-mira-tehnologiy-i-razrabotki" rel="noopener noreferrer" target="_blank">холиварный вопрос</a>.</p>
<p><strong>— Знаю людей, которые говорят, что вёрстка — это скучно, что это больше механическая работа. А вот программирование — это интересно, это творческие задачи. Согласен с этим? Лично тебе больше нравится верстать или программировать? Может, ты не разделяешь эти процессы?</strong></p>
<p>— Мне больше нравится верстать, иначе я не преподавал бы вёрстку. Но здесь надо понимать, для чего люди приходят в разработку. Многие приходят, чтобы писать сложную логику, обрабатывать запросы и так далее. Других интересует внешний вид приложения или сайта. Если вас интересует второе, вёрстка вам понравится.</p>
<p>Я не считаю вёрстку механической работой. Да, на базовом уровне можно подставить там блок, здесь блок. Но чем дольше работаешь с вёрсткой, тем больше замечаешь нюансов, которые нужно учитывать.</p>
<p><strong>— А что проще — верстать или программировать? Можно ли назвать вёрстку плавным входом в разработку?</strong></p>
<p>— На первых порах, наверное, да. Когда мы берём первые месяцы изучения технологий, когда человек с нуля приходит в разработку, ему проще начать с вёрстки. Дело даже не в том, что вёрстка проще программирования. Для новичка процесс и результат работы будет нагляднее.</p>
<p>Начинающий верстальщик что-то изучает, делает, открывает браузер и видит результат. Я, например, вспоминаю изучение программирования в колледже. Мы писали исключительно консольные программы, передавали данные внутри сети, работали с пакетами. Это круто, но невозможно оценить результат визуально. В такой ситуации можно быстро выгореть. А вёрстка даёт возможность увидеть и прикоснуться к тому, что ты изучаешь.</p>
<p>Если погружаться в вёрстку глубже, уже нельзя однозначно сказать, что она проще программирования. Нужно понимать различия в браузерах, работать с доступностью, изучать тонны литературы, владеть тоннами инструментов. Поэтому по мере углубления в проблематику вёрстка перестаёт быть простой.</p>
<p><strong>— То есть здесь нужно предостеречь от шапкозакидательства начинающих разработчиков, которые уделяют внимание только программированию и думают, что легко освоят вёрстку позже, потратят на изучение месяц или два и готово?</strong></p>
<p>— Легко верстать не получится. Всё зависит от того, до какого уровня специалист хочет погрузиться в вёрстку. Если нужно просто накидать пару блоков, то да, можно изучить минимум информации за месяц или два. Но чтобы верстать большие проекты, нужно долго учиться и работать над практическими задачами.</p>
<p><strong>— Традиционный для последних лет вопрос: роботы могут заменить верстальщиков? Уже сейчас есть шаблонизаторы, есть программы, которые умеют превращать простенькие макеты в веб-страницы. Значит ли это, что чистым верстальщикам надо как-то задуматься, изучать дополнительные инструменты, чтобы оставаться конкурентоспособными на рынке труда?</strong></p>
<p>— Самое смешное, что такое же мнение я слышал много лет назад, когда учился в колледже. Была известная программа Dreamweaver от студии Macromedia, потом её выкупил Adobe. В ней можно было накидывать какой-то дизайн, а на выходе получать вёрстку.</p>
<p>Да, это работало, программа действительно выдавала вёрстку, и в браузере эта вёрстка смотрелась нормально. Но это было абсолютно неподдерживаемое решение. Внутри всё версталось настолько отвратительно, что думать о каких-то изменениях было невозможно. Там шаг влево, шаг вправо — и всё разваливалось.</p>
<p>Для тех, кто понимает о чём речь — в этой программе вся вёрстка строилась на абсолютном позиционировании. Через какое-то время у Adobe вышла новая программа. Суть была той же, но программа лучше работала с мобильными устройствами. Сейчас программы нет, этот проект закрыт. Алгоритмы снова не смогли заменить верстальщиков, хоть справлялись с вёрсткой лучше, чем Dreamweaver.</p>
<p>Чистая вёрстка сама по себе мало где используется. Недостаточно просто сверстать макет и выложить его в интернет. Скорее всего это должно работать на какой-то CMS или с каким-то фреймворком. Если мы не говорим о лендингах, нужен ещё какой-то бэкенд. И вот здесь все эти программы для вёрстки не очень подходят, так как они не создают логических компонентов, выделенных модулей. Непонятно, как такую вёрстку разделить, чтобы просто передать на бэкенд.</p>
<p>То есть программы для вёрстки выдают монолитные приложения, с которыми невозможно что-то сделать. А одна из основных функций верстальщика — правильно разбивать вёрстку на компоненты, которые можно переиспользовать.</p>
<p><strong>— То есть чистым верстальщикам прямо сейчас не надо никуда бежать, что-то быстро изучать, их через полгода роботы не заменят?</strong></p>
<p>— Я считаю, что всегда надо что-то изучать. Когда верстальщик, фронт- или бэкенд-разработчик перестаёт учиться, он умирает как специалист. Если брать HTML, CSS, какие-то фреймворки для них, забрасывать их изучение не надо. Не думаю, что в обозримом будущем верстальщики станут ненужными.</p>
<p>Понятно, что сейчас появляются нейросети, потом мы дойдём до квантовых компьютеров. Возможно, это когда-то как-то повлияет на рынок вёрстки. Но сейчас компьютерам сложно предусмотреть все варианты.</p>
<p>Надо понимать, что одна из главных проблем верстальщиков не в том, как ты сверстаешь страницу, а в том, как люди будут её использовать. Это очень интересный момент, потому что ты разрабатываешь один сценарий, а люди пользуются совершенно другим. Тебе нужно это учитывать. А нейросеть сама не может этого делать. Пока не может. Поэтому живой человек будет востребован на рынке вёрстки до тех пор, пока, скажем, нас всех не чипируют.</p>
<p><strong>— Насколько необходимо знать вёрстку специалистам, которые не занимаются фронтендом или даже веб-разработкой вообще. Например, человек программирует контроллеры или занимается машинным обучением. Нужны ли ему знания HTML и CSS?</strong></p>
<p>— Смотря что мы имеем в виду. Если это бэкенд-разработчик, контент-менеджер, то на каком-то базовом уровне им желательно знать вёрстку. Всё равно всё что они делают в конечном итоге превращается в вёрстку, которая отрисовывается в браузере.</p>
<p>Если продукт разработчика не связан с веб-разработкой, с браузером, например, это какие-то научные исследования, глубокие расчёты, или это бэкендер, который работает только с базами данных, возможно, им вёрстка не нужна. Разве что только для собственного развития.</p>
<blockquote>
<p>Джуниору полезно знать HTML- и CSS-препроцессоры: об инструментах верстальщика</p>
</blockquote>
<p><strong>— Плавно переходим к инструментам и технологиям. Что нужно знать новичку, чтобы претендовать на позицию верстальщика-джуниора? Если можно, прямо перечисли минимальный набор знаний и умений.</strong></p>
<p>— В каждой вакансии для верстальщиков есть строчка «требуется знать HTML и CSS». Это очень расплывчатая формулировка, трудно понять, что именно нужно знать. Если говорить о джуниорах, им нужно знать и понимать такие вещи:</p>
<ul>
<li>Семантическую вёрстку</li>
<li>Поток документа и как он работает</li>
<li>Основные модули CSS, например, Flex. С гридами не всё однозначно, кто-то их требует, кто-то нет, но знать их полезно</li>
</ul>
<p>Это базовый набор знаний HTML5 и CSS3, который нужен джуну. Можно ещё включить переменные, какие-то другие новые вещи. Даже джуну стоит смотреть спецификации и изучать новые технологии.</p>
<p>Полезно знать CSS-методологии, хотя бы несколько. Методология — это набор правил, которые мы используем для структурирования CSS. Здесь есть много подходов. Наверное, самый популярный — БЭМ или Блок, Элемент, Модификатор. Он используется в Яндексе. Можно спорить о достоинствах и недостатках этой методологии, но она самая популярная в российском сегменте разработки. Этого нельзя сказать о зарубежном сегменте.</p>
<p>На Западе популярны <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/oocss-basics" rel="noopener noreferrer" target="_blank">объектно-ориентированный CSS</a>, SMACSS, атомарный CSS. Атомарный, наверное, в меньшей степени. Но всё равно он встречается в фреймворках. Фреймворки тоже желательно знать. Наверное, самый популярный фреймворк — Bootstrap. Ещё есть Tailwind CSS, UIKit. Хотя бы один из них стоит выучить. Даже если в компании, в которой вы хотите работать, используют другой фреймворк, благодаря изучению Bootstrap вы будете понимать, что такое фреймворки и как с ними работать.</p>
<p>Джуниору полезно знать HTML- и CSS-препроцессоры. Тут можно выбирать на свой вкус. Можно смотреть на синтаксис: что нравится, что нет. Если вы работали с одним препроцессором, переключиться на другой будет просто.</p>
<p>Ещё нужны общие знания. Например, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/courses/intro_to_git" rel="noopener noreferrer" target="_blank">работа с Git</a> — без него не получится. Многие новички пропускают изучение систем контроля версий, думают, что освоят их на работе. Конечно, на работе вы их освоите, но сначала наломаете дров. Надо понимать, что многие работодатели даже на этапе собеседования просят ссылку на GitHub. Они смотрят даже учебные проекты, оценивают, умеет ли кандидат работать с Git.</p>
<p>И ещё один момент — хотите или нет, но базовые знания JavaScript вам понадобятся. Это обязательно для верстальщика, так как многие взаимодействия с пользователем всё-таки происходят через JavaScript. HTML и CSS постоянно совершенствуются, в них появляются какие-то фишки для взаимодействия с пользователем без JavaScript, но без основ программирования пока ещё работать трудно.</p>
<p>Это примерный набор базовых знаний, которые нужны джуну. Понятно, что от новичка никто не ждёт знания нюансов. Если мы возьмём Flex, джуну не надо знать, по какой формуле работает flex-shrink или flex-grow, он просто должен знать, о чём это.</p>
<p><strong>— Ты говоришь, что джуниор должен знать основы JavaScript. Речь идёт о браузерном JS, или надо изучать основные программирования, алгоритмы, структуры данных и другие фундаментальные штуки? В каком объёме надо знать JavaScript, чтобы стать верстальщиком?</strong></p>
<p>— Для вёрстки достаточно знать, как работает браузерный JavaScript. Можно пропустить сложные вещи, можно не понимать, что такое функциональное программирование, чистые функции и так далее.</p>
<p>Верстальщик должен уметь подключить любую библиотеку, настроить её. Возможно, нужно уметь реализовать простую логику на уровне «если пользователь нажал на такой-то элемент, показываем ему другой элемент». Это не очень сложные задачи, разобраться с ними можно по готовым паттернам.</p>
<p><strong>— Холиварный вопрос — как ты относишься к pixel perfect? Должен ли верстальщик уметь верстать с точностью до пикселя?</strong></p>
<p>— Использовать или нет pixel perfect — моё мнение на это не влияет. Я негативно отношусь к чистому pixel perfect, где надо всё переделывать, если у нас расхождения в пару пикселей. Это скорее вредит работе верстальщика. Он начинает нервничать, а верстальщики как художники — обидеть их может каждый.</p>
<p>Получается, ради pixel perfect мы начинаем подгонять шаблон. Вместо того, чтобы сделать его аккуратным, мы занимаемся подгонкой. Возьмём пример — у нас есть пять кнопок с одинаковой функциональностью, но с разным цветом. Как с ними работать правильно?</p>
<p>У нас есть базовый класс или миксин, который мы переиспользуем. А теперь представим, что у дизайнера дрогнула рука, и он сделал одну из кнопок на три пискеля шире. Тут возможны два варианта. Первый — мы забываем о pixel perfect и оставляем систему, с которой будет удобно работать. Второй — мы навешиваем ещё один класс или переписываем классы конкретно для этого элемента, подгоняя его под шаблон.</p>
<p>Четыре элемента из пяти у нас правильно оформлены как компоненты. А пятый остался с новыми стилями, который там не нужны. Поэтому я против жёсткого pixel perfect.</p>
<p>Понятно, что какая-то точность должна быть, чтобы элементы были на своих местах. Даже в упражнениях и проектах на Хекслете решение студента тестируется с помощью скриншотов. Это можно назвать проверкой с помощью pixel perfect. Но я даю какие-то допуски. Например, шапка не должна отличаться от эталона больше чем на 5%. Эти 5% как раз возьмут на себя все недочёты, небольшие ошибки дизайнера, различия в версиях браузера.</p>
<p>К сожалению, работодатели почему-то очень любят pixel perfect. Наверное, это связано с тем, что они любят всё контролировать. Поэтому будет полезно знать инструменты для вёрстки pixel perfect, какие-то плагины. Особенно это пригодится, если вы идёте в какую-то веб-студию, в которой всё поставлено на поток. В таких студиях используют pixel perfect, чтобы не проверять работу верстальщика. Специалисты в таких студиях знают — если свёрстано по pixel perfect, значит всё сделано так, как задумал дизайнер.</p>
<p><strong>— У нас в профессии «Верстальщик» студенты изучают Bootstrap, это самый популярный фреймворк. С одной стороны, его используют большие серьёзные проекты, например, Хекслет :-) С другой стороны, можно встретить высказывания, что бутстрап и другие фреймворки годятся только для прототипирования или админок, что серьёзные верстальщики должны верстать без фреймворков. Можешь рассказать о своём отношении к фреймворкам?</strong></p>
<p>— Почему-то когда говорят о фронтенде или бэкенде, таких разговоров нет. Все <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/biblioteka-react-review-article" rel="noopener noreferrer" target="_blank">пользуются React</a>, и большинство говорит, что это хороший инструмент. Никто не хочет придумывать реактивность заново. А вот с вёрсткой всё почему-то не так.</p>
<p>С Bootstrap вообще произошла какая-то странная вещь. Почему-то только на постсоветском пространстве этот фреймворк считается подходящим только для прототипов и админок. Да, Хекслет использует Bootstrap, многие зарубежные компании используют Bootstrap.</p>
<p>Давайте вспомним, откуда вырос Bootstrap. Это внутренний проект Twitter. Это уже говорит о том, что это не просто какой-то человек с улицы написал. Этот фреймворк решал задачи Twitter и он решает эти задачи сейчас. Кроме Twitter, Bootstrap используют GitHub, PayPal, Spotify. Это далеко не полный список. Как-то это не вяжется с мнением, что Bootstrap годится только для админок и прототипирования.</p>
<p>Такое отношение к Bootstrap появилось из-за того, что многие люди не понимают, что это за инструмент на самом деле. Они заходят в документацию, видят какие-то классы, компоненты, и не понимают, что можно из этого сделать.</p>
<p>А под капотом у Bootstrap есть все возможности, чтобы построить сетку, использовать другие методологии, создавать новые компоненты, утилиты. То есть это фреймворк в его обычном понимании. Он навешивает на нас какие-то ограничения, но взамен даёт свою архитектуру, внутри которой можно работать.</p>
<p>Поэтому серьёзные верстальщики должны знать Bootstrap. Это как с React, Angular, Vue в JavaScript, как Symfony, Laravel, Yii2 у PHP-разработчиков, как <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/pochemu-django-luchshiy-freymvork-dlya-razrabotki-saytov" rel="noopener noreferrer" target="_blank">Django в Python</a>. То же самое и у верстальщиков.</p>
<p>Кто-то считает, что Bootstrap нельзя использовать с БЭМ. Это не так, фреймворк прекрасно работает с этой методологией.</p>
<p>Это моё мнение насчёт Bootstrap, мой взгляд на то, почему его неправильно интерпретируют.</p>
<p><strong>— А скажи пожалуйста, какие есть популярные и востребованные на рынке труда альтернативы Bootstrap?</strong></p>
<p>— Сейчас популярен Tailwind CSS. Этот проект похож на Bootstrap, но он больше ориентирован на количество компонентов, на другую стилизацию. По факту это немного расширенный Bootstrap. У него немного отличается направление развития.</p>
<p>Tailwind прирастает за счёт компонентов, а Bootstrap исправляет свои внутренние части, даёт какие-то инструменты для разработки. Например, в Bootstrap 5 появилось API для создания утилит.</p>
<p>Ещё есть UIKit, Material Kit. Фреймворков много, и все они строятся примерно на одних и тех же принципах. Есть Bulma, есть Foundation. Последний помогает кроме всего прочего красиво верстать письма.</p>
<p>Что изучать? Мне больше всего нравится Bootstrap. Если хочется иметь больше готовых компонентов, это Tailwind CSS, UIKit. Но их сложнее кастомизировать.</p>
<p><strong>— Многие новички пугаются препроцессоров. В то же время если человек освоил препроцессоры, он уже вряд ли захочет возвращаться к работе с чистым CSS. Можешь для новичков сказать несколько мотивирующих (или не очень мотивирующих) слов: почему препроцессоры стоит освоить, чем они хороши? Сложно ли их использовать?</strong></p>
<p>— Главное — понять, зачем нужен этот инструмент. Препроцессоры упрощают нам жизнь. Зачем бояться того, что нам помогает? Препроцессоры помогают быстрее делать многие вещи. Но сначала надо кое-что выучить.</p>
<p>Возьмём распространённый пример: у нас есть цветовая схема. Нам нужно создать классы, с помощью которых можно менять цвет текста. Допустим, мы работаем в рамках атомарного или объектно-ориентированного CSS. Сколько нужно сделать классов, если у нас на сайте 100 цветов? И что проще: написать пару строчек в препроцессоре, который за нас пройдётся по всем цветам и сделает нужные классы с нужным названием, или 100 раз руками скопировать код и переименовать класс? Тут ответ очевиден.</p>
<p>Именно такие задачи решает препроцессор. Он многие вещи делает за нас.</p>
<p>Ещё один пример: возьмём вложенность. Допустим, у нас есть селектор <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">.page</code>, а внутри него есть <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">.page-button</code>. Благодаря вложенности мы избегаем дублирования. Частая проблема CSS — неструктурированность. Это когда один кусок кода находится вверху, второй в середине и так далее. Препроцессоры помогают структурировать код.</p>
<p>Ещё препроцессоры помогают сократить количество кода. Например, мы часто используем центрирование через Flex. Для этого мы можем использовать свойства <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">display: flex</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">justify-content: center</code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">align-items: center</code>. Если надо центрировать много элементов, нам приходится эти три строчки копировать и вставлять.</p>
<p>А потом мы решаем не центрировать элементы по вертикали. Теперь что нужно? Пройтись по всем элементам и удалить одно свойство. Что позволяет сделать препроцессор, причём, неважно какой — SASS, LESS, Stylus? Мы просто объявляем миксин или шаблонный селектор, указываем три свойства, а потом подключаем во всех нужных селекторах. Если вдруг что-то изменится, достаточно один раз исправить в объявлении нужное свойство, и оно будет работать во всех селекторах.</p>
<p>Поэтому не стоит бояться препроцессоров. Да, в них есть сложные вещи, связанные с программированием — циклы, функции, массивы, ассоциативные массивы. Но даже если вы не знакомы с программированием, эти вещи можно быстро изучить в рамках шаблона. То есть можно не понимать, что именно происходит под капотом, но писать циклы и понимать, что они пройдутся вон там и сделает вот это.</p>
<p><strong>— С какими инструментами должен уметь работать, чтобы обрабатывать макеты и превращать их в вёрстку? Я имею в виду Photoshop, Figma, какие-то другие графические редакторы, инструменты типа Zeplin и тому подобные.</strong></p>
<p>— Наверное, Figma всё увереннее становится стандартом за счёт своей кроссплатформенности. Если взять Photoshop, с ним на Linux будут проблемы. Sketch работает только под macOS. А Figma работает на всех операционных системах в любом браузере.</p>
<p>Достаточно изучить Figma, это поможет понять принцип работы с аналогичными инструментами. Причём верстальщику не надо знать, как создать макет. Ему достаточно знать, как посмотреть отступы. То есть запомнить, что выбрав элемент, зажав alt и наведя мышкой на соседний элемент, можно увидеть отступы. Или что при выборе элемента в правой панели можно увидеть шрифт, отступы и так далее.</p>
<p>Этого достаточно, чтобы работать верстальщиком. А для того же Photoshop всё будет выглядеть примерно так же. В Zeplin всё то же самое. В Sketch, я думаю, тоже проблем не будет, это одна и та же функциональность.</p>
<p><strong>— Какими инструментами ты пользуешься в работе и можешь порекомендовать их новичкам? Можно прямо по списку: редактор или IDE, основные плагины, любимый CSS-фреймворк, препроцессор, сборщик и так далее.</strong></p>
<p>— Пользуюсь Visual Studio Code от Microsoft. Мне удобна его кроссплатформенность, потому что у меня на стационарном компьютере установлена Windows, на ноутбуке Linux, на компьютере второй системой ещё один Linux. И везде без проблем работает Visual Studio Code.</p>
<p>Особенно удобно, что в последних версиях появилась синхронизация настроек. Я авторизуюсь через GitHub, и везде подтягиваются мои настройки. Это плагины, цветовые схемы, масштабирование, шрифты.</p>
<p>Считаю, что нужно хотя бы на базовом уровне уметь работать с другими редакторами. Тот же Vim нужно знать на уровне «я могу напечатать, сохранить и, о боги, выйти из Vim». Это нужно хотя бы для ситуации «а что, вдруг...». Например, вам попался ноутбук без установленных редакторов, нужно срочно зайти на сервер и поправить вёрстку.</p>
<p>Из плагинов я использую Emmet. Он позволяет писать псевдокод и разворачивать его в HTML. Это удобно при работе с повторяющимися блоками. Также пользуюсь встроенной в Visual Studio Code системой автодополнения. В других редакторах тоже есть встроенные системы автодополнения или специальные плагины.</p>
<p>Обязательно использую какой-нибудь live server просто для того, чтобы запускать вёрстку и отслеживать изменения. Это можно сделать и с помощью Gulp. Но иногда мы просто создаём файл .html и .css и хотим видеть изменения без всяких сборок. Для этого подходят какие-то live servers. Их можно найти на npm, установить глобально или локально.</p>
<p>Также я использую и рекомендую всем использовать линтеры. У меня всегда в рабочей директории есть Stylelint, HTMLHint. Плагин Stylelint в Visual Studio Code всегда подсвечивает мне проблемы в коде. Это помогает исправлять на ходу какие-то ошибки, например, неправильный порядок свойств, ошибки в названии свойств и так далее. А HTMLHint проверяет валидность вёрстки.</p>
<p>Среди препроцессоров выбираю SASS. Я его преподаю, я им больше всего пользуюсь. В принципе, нет разницы, каким пользоваться. Просто выбирайте тот, синтаксис которого вам больше нравится.</p>
<p>Есть небольшой нюанс, из-за которого я считаю SASS с синтаксисом SCSS более удобным. Этот препроцессор совместим с обычным CSS. То есть вы можете взять любой файл .css. переименовать его в .scss, и он будет работать. С другими препроцессорами так не получится, в том числе с SASS с синтаксисом Sass.</p>
<p>Надо понимать, что есть препроцессор SASS, а его можно использовать с синтаксисом Sass или SCSS. В SCSS нужны внутри фигурные скобки, а в Sass они не нужны. В этом основное отличие синтаксиса. Поэтому SCSS имеет обратную совместимость с CSS, а Sass нет.</p>
<p>Сборщики я не использую, они для верстальщиков, особенно для небольших задач, слишком монструозны. Нету особого смысла использовать такой инструмент просто для компиляции файлов. Эту задачу я решаю с помощью таск-менеджера Gulp. Я ему говорю, какой надо взять плагин, файл, и куда положить результат.</p>
<p>Кстати, возвращаясь к препроцессорам. Я использую HTML-препроцессор Pug. Просто мне так удобно. Этот инструмент предупреждает ошибки, связанные с открытием и закрытием тегов. В Pug не нужно открывать и закрывать теги, всё строится на уровне вложенности. Если вы писали на Python или хотя бы видели код, то понимаете, о чём речь. Чтобы вложить один код в другой, надо использовать табуляцию.</p>
<p>Любимый CSS-фреймворк — Bootstrap. Я евангелист этого фреймворка. Бегаю везде и говорю, насколько он прекрасный. Где-то читаю доклады, пытаюсь показать, что Bootstrap далеко не для админок.</p>
<p><strong>— Я знаю, что ты контрибьютишь в Bootstrap. Это правда?</strong></p>
<p>— Да, есть такой опыт.</p>
<blockquote>
<p>Слепые люди не видят сайт, они могут ориентироваться с помощью того, что вы как верстальщик им дали: о доступности</p>
</blockquote>
<p><strong>— Важный вопрос, который ты постоянно поднимаешь в статьях — доступность. Кажется, только для небольшой доли посетителей обычного сайта нужна доступность, почему в таком случае этому вопросу надо уделять внимание? Какие инструменты использует верстальщик, чтобы обеспечить доступность сайта?</strong></p>
<p>— Я бы поспорил насчёт того, что людей, для которых важна доступность, мало. Доступность — это адаптация страницы для людей с ограниченными возможностями.</p>
<p>Какие здесь могут быть сценарии?</p>
<p>Например, люди, у которых проблемы с опорно-двигательным аппаратом, с трудом пользуются мышью или одновременно клавиатурой и мышью. Им трудно одновременно скролить мышью и нажимать клавиши, как это делают люди без особых потребностей. Такие люди переходят на сайты, двигаются по странице к интерактивным элементам, не используя мышь.</p>
<p>Такой сценарий используют и обычные люди. Например, мне иногда хочется развалиться на диване и не скролить страницы с помощью мыши, а перемещаться по ним с помощью клавиатуры. Тут помогает знание горячих клавиш. Но на некоторых сайтах это сделать сложно, потому что верстальщики не подумали, что такой сценарий использования возможен.</p>
<p>Как это проявляется? Представим стандартные интерактивные элементы, например, кнопки или ссылки. Предположим, у нас есть ссылка или кнопка «Подробне», которая ведёт вниз страницы. Как обычно делают такие элементы? Мы в атрибут href ставим решётку и id элемента, к которому нужно прокрутить страницу.</p>
<p>Но этот id попадёт в браузерную строку, а это ужасно не любят специалисты по SEO. Они просят сделать элемент обычным <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><div></code>, повесить обработчик и по клику перемещать человека в нужную область страницы. Это работает, если человек пользуется мышью. Но <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><div></code> — не интерактивный элемент. Мы не сможем попасть на него с помощью клавиши tab. Она отвечает за то, чтобы пользователь браузера перешёл к следующему интерактивному элементу.</p>
<p>Такие же проблемы бывают с формами, так как все любят стилизовать их, делать красивыми, но верстают не с помощью стандартных тегов типа, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><input></code>, <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><label></code>, а просто там навесили, тут как-то JavaScript'ом обработали. С клавиатуры такие формы недоступны.</p>
<p>Это один из примеров того, зачем нужна доступность. Ещё одна вещь, которую могут использовать не только люди с особыми потребностями — масштабирование страницы. Я иногда использую это возможность, чтобы было удобно читать контент.</p>
<p>На некоторых сайтах при увеличении масштаба хотя бы в два раза вёрстка разваливается. Это желательно отслеживать. Страница должна выглядеть нормально как минимум при увеличении масштаба в два раза, а желательно — и в три, и в четыре раза.</p>
<p>Если говорить о более специфических моментах, есть слепые люди. Это разные люди. Например, есть слепые программисты, которые пользуются скринридерами. Это приложения, которые считывают информацию с экрана. Например, есть прекрасный скринридер NVDA. Он встраивается в операционную систему и читает, что происходит в браузере, в текстовых редакторах.</p>
<p>Слепые люди не видят сайт. Они могут ориентироваться с помощью того, что вы как верстальщик им дали. А вы можете им дать правильную семантическую вёрстку. Это к вопросу использования вместо . Вы можете правильно верстать формы, строить меню, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/semantika-zagolovkov-kak-pravilno-strukturirovat-informatsiyu-na-veb-stranitsah" rel="noopener noreferrer" target="_blank">соблюдать порядок заголовков</a>. Это очень важно для людей, которые используют скринридер.</p>
<p>Я часто замечаю, что верстальщики не соблюдают вложенность заголовков. Они могут сначала поставить для подзаголовка, а после него ставят заголовок первого уровня, потом внезапно заголовок пятого уровня. Они ориентируются на размер заголовка, а не на семантический смысл.</p>
<p>А скринридеры позволяют перемещаться непосредственно по заголовкам. То есть если я хочу быстро посмотреть, какие глобальные темы раскрываются на странице, я начинаю переходить по заголовкам второго уровня. И тут из-за неправильной вёрстки могут быть проблемы. Один заголовок второго уровня может быть на месте заголовка первого уровня, в другом месте вместо заголовка второго уровня стоит заголовок третьего уровня просто потому, что он по размеру подходит.</p>
<p>Такие вещи важно учитывать, чтобы верстать сайты, удобные для слабовидящих и слепых людей. На Западе доступность сайта уже считается стандартом де-факто, как и адаптивная вёрстка. Никому ведь не приходит в голову не делать страницы адаптивными, так как на сайт ходит мало пользователей через мобильные устройства. То же самое и со скринридерами.</p>
<p>И последний пункт. Есть люди с нарушениями цветовосприятия. Для них очень важен контраст текста и вообще контраст элементов страницы относительно фона. Такие люди могут плохо различать неконтрастные элементы.</p>
<p>Очень часто в дизайне используется светлый блок на светлом фоне. С точки зрения дизайна это может выглядеть минималистично и красиво. Но представьте, что у вас нарушено цветовосприятие и вы с трудом различаете близкие друг к другу цвета. Это, кстати, очень распространённое явление. Если большинству людей показать два красных цвета с разной насыщенностью или тоном, они просто не найдут разницы.</p>
<p>Наш мозг обрабатывает цвета немного странно, его легко обмануть. Есть прекрасная книга Джозефа Альберса «Взаимодействие цвета». В ней очень интересно написано, как мозг может обработать два цвета как один, три как два и так далее. Много там построено на том, что нет большого контраста. Всё то же самое работает и на веб-страницах. Поэтому важно правильно работать с контрастом, чтобы не допускать таких проблем.</p>
<p>Инструменты, которыми можно пользоваться для обеспечения доступности, вытекают из этих кейсов. Возьмите свой проект, уберите мышь и попробуйте совершить какое-то действие — оформить заказ, подписаться на рассылку и так далее. Посмотрите, что происходит. Это поможет понять, что нужно улучшить.</p>
<p>Из скринридеров можно использовать NVDA или какие-то браузерные расширения. Но расширения работают не очень хорошо, я предпочитаю десктопный вариант. Если брать другие инструменты, то в каждом браузере с «девтулзами» уже есть какие-то базовые вещи для проверки доступности. В FireFox есть отдельная панель, связанная с доступностью. В Chrome есть Lighthouse, который проверяет доступность. Также в Chrome есть <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd" rel="noopener noreferrer" target="_blank">расширение axe</a>, нацеленное на работу с доступностью.</p>
<p>Самое главное — пробовать себя на месте людей с ограниченными возможностями. Пробуйте разные сценарии: выключайте монитор и пользуйтесь скринридером, играйте с настройками контраста, пробуйте ходить по модным сайтам, которые используют светлое на светлом. Вы увидите, что трудно найти те или иные элементы.</p>
<p><strong>— Никита, уточняющий вопрос. Из инструментов ты назвал вещи, которыми можно проверять доступность. А как всё-таки верстальщик её обеспечивает? Я правильно понимаю, что это просто се��антическая вёрстка, и больше ничего в арсенале нет?</strong></p>
<p>— Это семантическая вёрстка — раз, это использование aria-атрибутов — два. Эти атрибуты помогают дополнительно указать, что за элемент перед нами. Есть много специфических ролей, которые можно указать для элемента.</p>
<p>Ещё у W3C есть огромный документ — WCAG. Это гайдлан, в котором указано, как обеспечивать доступность контента. В нём можно прочитать, какой должен быть контраст, как его проверять, какие формулы для этого используются. Я использовал этот гайдлайн, когда писал <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/blog/posts/chto-nuzhno-znat-o-kontraste-teksta-i-kak-kontrolirovat-kontrast-s-pomoschyu-sass" rel="noopener noreferrer" target="_blank">статью о контрастности цвета</a>. То есть в руководстве от W3C можно найти спецификации, которые объясняют доступность.</p>
<blockquote>
<p>VR станет массовым, это добавит работы верстальщикам: о перспективах вёрстки</p>
</blockquote>
<p><strong>— Как ты думаешь, какой будет вёрстка через 10 или 20 лет? Например, сохранятся ли HTML и CSS или у нас будут новые языки разметки и стилей?</strong></p>
<p>— Честно говоря, не думаю, что через 10 или 20 лет что-то глобально изменится. Понятно, что будет много небольших изменений. Думаю, у нас появятся новые способы взаимодействия. Условный VR через 20 лет станет более продвинутым и массовым. А чем более массовым он будет, тем больше работы будет у верстальщиков. Нужно будет делать веб-интерфейсы доступными для VR.</p>
<p>Но в целом нет предпосылок, чтобы HTML и CSS исчезли. Они отлично справляются со своей работой. HTML эффективно передаёт браузеру структуру, которую мы хотим видеть, а браузер её обрабатывает. Возможно, изменится способ обработки HTML в браузере. Но сам язык разметки будет актуальным до тех пор, пока существуют браузеры в том виде, в котором мы их знаем.</p>
<p><strong>— Несколько лет назад верстальщиков пугали появлением новых гаджетов — от умных очков и часов, смартфонов с гибким экраном до дисплеев холодильников и кофеварок, под которые надо верстать по-новому. А как на самом деле влияет на вёрстку появление разнообразных девайсов с разными экранами?</strong></p>
<p>— Для верстальщиков это просто новые устройства. По хорошему, процесс семантической вёрстки не меняется под каждый девайс. Понятно, что для Smart TV есть свои законы, для умных часов свои законы и для умных кофемолок свои законы. Но верстальщик будет всегда использовать одни и те же концепции.</p>
<p>Возьмём Smart TV, где пользователь управляет устройством с помощью джойстика. Это просто переходы к следующим интерактивным элементам. Да, изменился внешний вид и способ взаимодействия, но суть осталась той же. Это просто перемещение по интерактивным элементам.</p>
<p>Если мы возьмём достаточно большой дисплей для холодильника, который можно использовать для сёрфинга, это уже привет телефонам. Это то же самое, только мы управляем не тем, что у нас в руке, а тем, что стоит на полу. Поэтому новые вещи могут накладывать свои ограничения, но в фундаментальных вещах остаются такими же. Важно изучать фундаментальные вещи, а не хвататься за каждую новинку.</p>
<p><strong>— Стандарт HTML5 дал нам семантический веб. Если проанализировать тенденции или даже просто пофантазировать, что будет в следующих стандартах? Стоит ли ждать революционных изменений, или это будут постепенные улучшения?</strong></p>
<p>— Если брать HTML, то каких-то революций я не наблюдаю и не жду. Конечно, я человек и не могу знать всё. Скорее, каких-то революционных изменений надо ждать со стороны CSS. Мы уже столкнулись с тем, что существующие стандарты и возможности CSS нас стесняют. Не зря ведь появляются препроцессоры, которые расширяют возможности CSS.</p>
<p>Эти расширенные возможности потихоньку пролезают в стандарты CSS. У нас уже есть переменные, которые работают интереснее, чем препроцессоры. Уже идут разговоры о шаблонах внутри CSS. Уже в черновиках стандартов появляются вложенности. Я жду новых мощных инструментов в CSS.</p>
<p>HTML5 ещё не устарел, ещё не появились принципиально новые способы взаимодействия с пользователем. Смысла в кардинальном обновлении стандарта нет. Возможно, когда интернет вещей вступит в права, когда появятся новые технологии, тогда нам понадобится что-то новое. А пока нам достаточно возможностей HTML5, чего нельзя сказать о CSS3.</p>
<style data-mantine-styles="inline">.__m__-_R_93derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:80%;}@media(min-width: 36em){.__m__-_R_93derddmiub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_93derddmiub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/gid-po-professii-testirovschik-chem-zanimaetsya-skolko-zarabatyvaet-chto-nado-znat-i-gde-uchitsya"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MTYzNiwicHVyIjoiYmxvYl9pZCJ9fQ==--72f5a3fb78c634c408f39349dbd2e203809b4069/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX2FuZF9wYWQiOls3MDgsMzU0XSwic2F2ZXIiOnsicXVhbGl0eSI6ODV9fSwicHVyIjoidmFyaWF0aW9uIn19--324dc52aa55ebe818c2a887ebcb832b9ad1c0381/%D1%82%D0%B5%D1%81%D1%82%D0%B5%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA2023-01.png" loading="lazy" alt="Кто такой тестировщик и как им стать"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Кто такой тестировщик и как им стать</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Рассказываем, кто такой тестировщик и чем он занимается, сколько зарабатывает такой специалист, а...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">29 декабря 2023 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/mai-and-hexlet-collaboration"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="Во время обучения программисты должны решать реальные задачи: интервью с руководителем IT-магистратуры МАИ Павлом Кейно"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Во время обучения программисты должны решать реальные задачи: интервью с руководителем IT-магистратуры МАИ Павлом Кейно</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Несколько месяцев назад Хекслет реализовал партнёрский пилотный проект с Московским авиационным и...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">14 января 2021 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/publichnoe-sobesedovanie-dlya-php-programmista"><div style="padding-top:0rem;height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="margin-bottom:var(--mantine-spacing-sm)" class="m_599a2148 mantine-Card-section" data-first-section="true"><div style="--ar-ratio:2" class="m_71ac47fc mantine-AspectRatio-root"><img class="m_9e117634 mantine-Image-root" src="/vite/assets/blog_post-7eTyeLLt.webp" loading="lazy" alt="Публичное собеседование для PHP-программиста"/></div></div><p style="margin-bottom:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-lg);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Публичное собеседование для PHP-программиста</p><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Продолжаем проведение публичных собеседований на youtube-канале Хекслета. 22 декабря в 19:00 по м...</p><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-sm)" class="m_4081bf90 mantine-Group-root">22 декабря 2020 г.<p style="font-size:inherit" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></a></div></div></div></div></div>
<p><strong>— Никита, спасибо большое за интересный разговор. Нам остаётся пригласить читателей изучать вёрстку в рамках <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/programs/layout-designer" rel="noopener noreferrer" target="_blank">программы «Верстальщик»</a>.</strong></p>
<p>— Да, приглашаю. Почему я вообще считаю, что стоит попробовать то, что есть на Хекслете? Я стараюсь давать студентам глубинные вещи, погружаюсь не только в то, что работает, но и в то, почему и как оно работает. В том же курсе по Bootstrap описываются не только классы. Студент понимает, как строятся проекты с помощью Bootstrap, как делать кастомные компоненты. Поэтому приходите на Хекслет за фундаментальными знаниями!</p>
<p><strong>— Ещё раз спасибо за разговор!</strong></p>
<p>— Желаю читателям удачи!</p></div><div class=""><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap;margin-bottom:var(--mantine-spacing-lg)" class="m_4081bf90 mantine-Group-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-user "><path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0"></path><path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path></svg></div><p style="margin-inline-end:var(--mantine-spacing-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дмитрий Дементий</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">5 лет назад</p></div><div style="align-items:center" class="m_8bffd616 mantine-Flex-root __m__-_R_5dirddmiub_"><a style="display:inline-flex" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/html-css-perspectives/votes"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:var(--mantine-spacing-xs);color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-thumb-up "><path d="M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3"></path></svg></div></a><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">18</p></div></div></div><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding:var(--mantine-spacing-xl)" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Читайте также:</p><ul style="margin-inline-start:var(--mantine-spacing-lg)" class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/gid-po-professii-testirovschik-chem-zanimaetsya-skolko-zarabatyvaet-chto-nado-znat-i-gde-uchitsya">Кто такой тестировщик и как им стать</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/mai-and-hexlet-collaboration">Во время обучения программисты должны решать реальные задачи: интервью с руководителем IT-магистратуры МАИ Павлом Кейно</a></span></div></li><li style="margin-bottom:var(--mantine-spacing-sm)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><a style="color:inherit" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/blog/posts/publichnoe-sobesedovanie-dlya-php-programmista">Публичное собеседование для PHP-программиста</a></span></div></li></ul></div><div style="margin-block:var(--mantine-spacing-xl)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div></div><div></div></div><style data-mantine-styles="inline">.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:100%;--col-max-width:100%;}@media(min-width: 48em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}@media(min-width: 62em){.__m__-_R_lmiub_{--col-flex-grow:auto;--col-flex-basis:33.333333333333336%;--col-max-width:33.333333333333336%;}}</style><div class="m_96bdd299 mantine-Grid-col __m__-_R_lmiub_ mantine-visible-from-md"><div style="background-color:var(--mantine-color-indigo-light);border:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-bottom:var(--mantine-spacing-xl);padding:var(--mantine-spacing-xl);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div style="margin-bottom:var(--mantine-spacing-md)" class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Категории</p></div><ul class="m_abbac491 mantine-List-root"><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Мотивация">Мотивация</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Истории успеха">Истории успеха</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Дневник студента">Дневник студента</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Код">Код</button></span></div></li><li style="margin-bottom:var(--mantine-spacing-xs)" class="m_abb6bec2 mantine-List-item" data-with-icon="true"><div class="m_75cd9f71 mantine-List-itemWrapper"><span class="m_60f83e5b mantine-List-itemIcon"><div class="m_4451eb3a mantine-Center-root"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-chevron-compact-right "><path d="M11 4l3 8l-3 8"></path></svg></div></div></span><span class="mantine-List-itemLabel"><button style="color:inherit;text-decoration:underline" class="mantine-focus-auto m_87cf2631 mantine-UnstyledButton-root" type="button" aria-label="Карьера">Карьера</button></span></div></li></ul></div><div style="justify-content:end;margin-top:0rem;position:sticky;top:calc(5rem * var(--mantine-scale))" class="m_8bffd616 mantine-Flex-root __m__-_R_5dlmiub_"><div tabindex="0" style="cursor:pointer"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses_web_development?promo_name=program_category&promo_position=blog_post&promo_creative=card&promo_type=card"><div style="background-color:var(--mantine-color-default);border:calc(0.0625rem * var(--mantine-scale)) solid var(--mantine-color-default-border);padding-inline:var(--mantine-spacing-xl);padding-top:var(--mantine-spacing-xl);padding-bottom:var(--mantine-spacing-xs);width:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root"><div class="m_4451eb3a mantine-Center-root" data-inline="true"><p style="font-size:var(--mantine-font-size-h4)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Курсы по веб-разработке</p></div><img class="m_9e117634 mantine-Image-root" src="/vite/assets/development-BVihs_d5.png"/><p style="margin-bottom:var(--mantine-spacing-xs);text-align:right" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></a></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>