Как правильно верстать в 2022 году. Часть 1
Вступление
Меня зовут Николай и я Frontend-разработчик. Хочу рассказать о самых распространённых ошибках в вёрстке современных проектов.
Дело в том, что лишь малая часть современных фронтендеров обращает внимание на работу с HTML и CSS, предпочитая готовые решения, вроде UI-библиотек и систем сеток. Но эти решения неидеальные и приходится дописывать обёртки вокруг них, видоизменять код, переписывать стили и совершать прочие действия для соответствия требованиям проекта. Тут-то и начинаются проблемы: вёрстка местами становится избыточной, стили переназначются через important и с каждым релизом проект всё сложней поддерживать. Я уже не говорю об удобстве использования и доступности. Об этом думают вообще в последнюю очередь.
В этой статье я расскажу лишь о небольшой части проблем, которые можно достаточно быстро решить, не прибегая к радикальному переписыванию больших частей проекта.
Содержание
Используйте правильные теги.
Как правильно вкладывать теги друг в друга.
Работа с медиаконтентом.
Пишем таблицы на HTML правильно.
a
или button
? Работа с интерактивными элементами и как выбрать правильный тег.
Различный теги для медиа-контента.
Прекратите писать велосипеды! Как мы можем стилизовать дефолтные HTML-элементы.
Пишем доступные формы.
Избыточная вёрстка. Как облегчить разметку.
Современные фишки HTML и CSS способные облегчить нам жизнь.
Экспериментальные технологии, входящие в стандарт.
Используйте правильные теги
Исторически так сложилось, что HTML служит для описания документов. То есть язык гипертекстовой разметки был придуман для обмена документами (в основном научного характера) и не предназначался для построения сложных веб-приложений и сайтов. Благодаря развитию стандарта стало полегче, но большинство современных разработчиков всё ещё предпочитают семантику — чёткую структууа контента, где каждый тег говорит о том, зачем он здесь и что ожидается внутри; доступность — HTML может рендериться не только браузером, но и другими инструментами, вроде скрин-ридеров, роботов-поисковиков и т.д. И в наших силах упростить для них парсинг страниц. Про какие теги нам следует стоит помнить? Почти любой сайт или приложение можно разбить на 3 большие части: Шапка — это контент вверху страницы. Там обычно размещается логотип, навигационное меню и другие элементы, которые должны быть доступны пользователю с любой страницы. Тег Подвал — нижняя часть сайта, где обычно дублируется навигация и располагаются контакты компании. Также, как и шапка, Тег Плохо Хорошо Помимо трёх базовых семантических тегов существует ряд других. Разберём их ниже. Это независимый блок на странице, который без внешнего контекста может существовать в рамках других сайтов и сервисов. Это может быть статья в блоге, твит, виджет VK, коментарий к публикации и т.д. Желательно, чтобы у этого блока был заголовок. Неотделяемая от основного контента секция на странице. Например, это может быть блок на лендинге. Чаще всего имеет заголовок. Побочный, косвенный контент на странице, находящийся в стороне. Может иметь заголовок и быть не в одном экземпляре. Главная ошибка — использовать его только для боковой панели. Этот тег многогранен и может использоваться для любых блоков, не имеющих основное значение. Блок навигации с ссылками на другие страницы или разделы текущей страницы. Может использоваться только для основной навигации, а не для каждой группы ссылок. Например навигацию в В этот тег нужно вкладывать контактные данные. У него по-особенному работает «область видимости» — контактные данные в Как и в любом документе на HTML-странице могут содержаться заголовки. По стандарту мы обязаны всегда указывать заголовок первого уровня Как вы видите, заголовки выстраиваются в иерархию и идут один за одним, формируя логичную структуру. По поводу использования нескольких заголовков Простой тег для абзацев, именно для разделения текстовых частей. Не используйте для коротких фраз внутри интерфейса. С точки зрения доступности, этот тег очень крут, дает пользователям с ограниченными возможностями «прыгать» между ними с помощью шорткатов. Это иллюстрация с необязательной подписью. Во многих книгах изображения подписываются как «Рис. 1 — такой-то объект». Вот это и есть Тег для вставки длинных цитат. Может иметь аттрибут Одиночный тег для разделения контента. Про него забывают и заменяют на Тег для вывода предварительно отформатированного текста. Имеет ограниченную область использования — ASCII-арт, вывод программного кода. Не рекомендую использовать для других задач, так как тег довольно ненадёжен и непредсказуем. Например, мы потеряем всё форматирование, если сборщик проекта минифицирует HTML. Списки в вебе просто везде! Но очень редко их верстают как списки. Например, преимущества компании на лендинге это что? Правильно, список. Они бывают двух видов: упорядоченные и неупорядоченные. Я в этот раздел также добавил список описаний Description list. Неупорядоченный список применяется в том случае, если мы безболезненно можем поменять порядок элементов. Примеры: cписок ингредиентов для рецепта; преимущества компании; партнёры компании. Упорядоченный список применяется тогда, когда нам важен порядок элементов. Например: Списки описаний применяются для формирования списков терминов. Чудесные теги, которые чаще всего используют не по назначению. Они несут исключительно визуальное выделение текста. Если вы сбросите их стили, то они ничем не будут отличаться от обычного текста. В данный момент их можно использовать как теги для дополнительного выделения текста, которое вы оформите с помощью CSS. И да, тег НЕ предназначен для иконок. Как и Браузер выделяет текст обёрнутый тегом Оба тега связаны с цитирований, но применяются в разных случаях. Применяется для оформления программного кода внутри текста. Если требуется вывести многострочный блок кода, то лучше использовать Тег для обозначения даты и времени. У него может быть атрибут datetime, куда необходимо передать дату и время в формате ISO. Используются для добавления в текст индексов и степеней. Удобны для описания формул. Нужны, чтобы показать, что из текста было что-то удалено или добавлено. При этом они также обозначают факт изменения текста семантически, а не только визуально. Простой тег для переноса строки, думаю, все про него знают, потому что альтернативы нет. Нативный дропдаун прямо в HTML! На самом деле не совсем так. Внимание! Данный тег не поддерживается IE и старыми версиями основных браузеров. Тег для аббревиатур. Тег для выделения термина. Элемент
JavaScript — язык программирования,
используемый в основных веб-браузерах.
Изпользуется для выделения названия клавиш в клавиатурных сочетаниях. Тег для обозначения вывода компьютерной программы. По-умолчанию выводится моноширинным шрифтом.
Приложение упало с ошибкой: Элемент для вывода математических переменных Теги, связанные с направлением текста ltr и rtl. Необходимы, когда мы встраиваем в текст, написанный языком в одном направлении, фразу или предложение написанное в другом.
Это арабское слово будет перевёрнуто.
Элемент, выделенный по причине его актуальности в определённом контексте. Чаще всего используется для выделения ключевых фраз, введенных пользователем, в результатах поиска. По умолчанию, на текст внутри этого тега применяется жёлтый фон. Современный компонет, который может показывать шкалу с наполнением разного цвета, в зависимости от указанных значений. Используется преимущественно для отображения числовых значений, например, количества результатов поиска, объема жидкости, давления и др. Имеет следующие аттрибуты: Температура воды Текст внутри является фолбэком для браузеров, которые не поддерживают этот тег. Тег для отображения индикатора, показывающего ход выполнения задачи. По простому — прогресс-бар. Одиночный тег, указывающий, в каком месте можно переносить цельную строку. Является аналогом символа Теги, в основном используемые для иероглифов. Не вижу смысла подробно их разбирать. Если интересно, можно почитать здесь. Просто забудьте об этих тегах. Стандарт говорит, что они больше не поддерживаются и не рекомендует их использовать. Полный список здесь. В этой статье ничего не сказано про элементы форм, таблицы, всякий медиа-контент, а также теги Также, я ничего не сказал по Структурные теги документа
, и
. Сейчас это стало неким стандартом в дизайне. Некоторые части приложения повторяются от страницы к странице, и мы можем выделить их в отдельные части (шапку и подвал).
не обязательно один на странице, он может озаглавливать любую независимую часть (например, быть частью модального окна). может быть не один и использоваться для других независимых частей, помимо страницы.
обычно обозначает место для основного контента, который не повторяется от страницы к странице.
не имеет смысла упаковывать в
, так как подвал сам по себе предполагает присутствие навигационных элементов. И этот тег не обязательно должен включать в себя список ссылок. Туда может входить навигация любого типа, главное, чтобы она считалась основной.
относятся к ближайшему родительскому блоку
, либо к
, если он находится вне
.
Заголовки
. Остальные уровни опциональны, но они должны быть в иерархической последовательности! Это значит, что мы не можем
поставить после
. Чтобы лучше это понять, посмотрим код ниже:
Наша кондитерская самая кондитерская из всех кондитерских
...
Почему наши булочки лучшие?
...
Мука высочайшего сорта
...
Много корицы
...
Корица со Шри-Ланки
...
Минимум сахара
...
: вы МОЖЕТЕ использовать несколько заголовков первого уровня, если это требуется на странице. Когда-то давно некоторые злые SEO-специалисты настоятельно не рекомендовали так делать, хотя спецификация ничего не говорит на этот счёт. Сейчас мы, конечно, не узнаем действительно ли поисковики снижали сайт в выдаче за использование двух и более заголовков первого уровня, но уже даже многие SEOшники признали, что этот фактор малозначителен при ранжировании сайтов.
Блочные теги
и
. Но в рамках HTML назначение этого тега гораздо шире. Мы можем разместить внутри цитату (см. ниже), фрагмент кода, какую-нибудь диаграмму. В общем
— это любой объект с подписью. Подпись размещается внутри тега
, который, в свою очередь, вкладывается в .
cite
, в котором указывается URL на источник цитаты, а также хорошо совместим с тегом , где в
можно указать автора и название источника.border-bottom
, но помимо визуального отображения этот тег несёт семантический смысл — тематическое разделение абзацев.Списки
, ,
Строчные теги
,
,
,
выделяет текст курсивом. Но зачем нам два тега для одного и того же? В том то и дело, что они разные.
, как говорилось выше, не несёт никакого семантического смысла, это просто визуальное выделение, а
делает акцент на обёрнутом им тексте, который меняет смысл всего предложения. Например:
Я просто обожаю , когда верстальщики используют только дивы.
полужирным. Но помимо визуального выделения, текст обретает семантический смысл — большую важность по сравнению с остальным текстом вокруг.
и
— тег, в который мы оборачиваем текст, который отсылается к другому документу/произведению/etc.
Больше информации вы сможете найти в стандарте [ISO-0000]
похож на
, разница лишь в том, что
применяется для строчных цитат.
Рубль растёт к доллару и евро
— сообщает RT со ссылкой на ФАН. в связке с тегом
.
и
x1 + x2 = y2
и Вася пришёл домой в
Интерактивные элементы
применяется, чтобы скрыть часть информации, которую можно получить, кликнув по кнопке, описанной во внутреннем теге
.Рубль растет на фоне заявлений Запада о введении санкцийпротив России
Подробнее
Согласно данным валютных торгов на Московской бирже, по состоянию
на 22.40 мск курс доллара находился на уровне 78,7 рубля (-1,6%),
курс евро снижался до 89,3 рубля (-0,9%).
Другие интересные теги
HTML — основной язык разметки веб-приложений
, пара
/
или
, который является ближайшим предком
считается определением термина.
Чтобы открыть диспечер задач, нажмите сочетание клавиш
Ctrl+Shift+Esc.
404 Неизвестный ресурсДля рассчёта расстояния S, необходимо
перемножить скорость V на время t.
и
изолирует от окружающего текста фрагмент, который может поменять направление (но не обязательно поменяет).
в свою очередь, переопределяет направление текста так, что текст внутри тега отображается в другом направление, нежели чем окружающий.
min
— минимальное значение шкалы; max
— максимальное значение шкалы; low
— предел, при достижении которого, значение считается низким; optimum
— предел, при достижении которого, значение считается оптимальным; high
— предел, при достижении которого, значение считается высоким; value
— собственно само значение.
, с той лишь разницей, что не добавляет символ переноса в конце строки.,
,
, , и прочая эзотерика
Заключение части 1
и
. Об этом в следующих публикациях.
, которые являются базовыми элементами для вёрстки. Их стоит использовать только в том случае, когда ничто из вышеперечисленного не подошло.