HTML

Руководство по работе с HTML.

Вся информация основана на большом опыте и закреплена источниками: https://html.spec.whatwg.org/ и https://developer.mozilla.org/, а также https://docs.gitlab.com/ee/development/fe_guide/style/html.html

Семантическая вёрстка

Семантические элементы - HTML-теги, которые придают семантическое (а не презентационное) значение содержащимся в них данным. Например:

  • <article>

  • <nav>

  • <strong>

  • <aside>

Лучше использовать семантические теги, но только в том случае, если намерение действительно соответствует семантическому значению самого тега. Посмотри документацию MDN, чтобы узнать, что семантически означает каждый тег.

<!-- плохо - можно использовать семантические теги вместо div. -->
<div class="...">
  <p>
    <!-- плохо - это не то, для чего предназначен тег strong -->
    Simply visit your <strong>Settings</strong> to say hello to the world.
  </p>
  <div class="...">...</div>
</div>

<!-- хорошо - предпочитаю семантические классы, используемые точно -->
<section class="...">
  <p>
    Simply visit your <span class="gl-font-weight-bold">Settings</span> to say hello to the world.
  </p>
  <footer class="...">...</footer>
</section>

Кнопки

Теги кнопок требуют атрибута type в соответствии со спецификацией W3C HTML.

// плохо
<button></button>

// хорошо
<button type="button"></button>

Ссылки

_blank

Не рекомендуется произвольно открывать ссылки в новой вкладке, поэтому при добавлении к ссылкам target="_blank". Интересная статья по ссылкам: Link Targets and 3.2.5.

При использовании target="_blank" с тегами необходимо также добавить атрибут rel="noopener noreferrer". Это предотвращает уязвимость безопасности, задокументированную JitBit.

// плохо
<a href="url" target="_blank"></a>

// хорошо
<a href="url" target="_blank" rel="noopener noreferrer"></a>

Фейковые ссылки

Не используйте поддельные ссылки. Если ссылка вызывает только обработчики событий кликов JavaScript, то используйте тег кнопки. Это будет семантично.

// плохо
<a class="js-do-something" href="#"></a>

// хорошо
<button class="js-do-something" type="button"></button>

Атрибут Role

Не используйте role. Вместо этого используйте семантические элементы HTML, которые итак играют определенную роль.

Комментарии

Всегда используй закрывающие комментарии для блочных НЕ семантических элементов. С этим прекрасно помогает плагин Emmet и настройка "auto_comment".

Благодаря таким закрывающим комментарием, проще изучать и поддерживать вёрстку.

// плохо
<div class="user">
    <div class="user__avatar">
        <img src="avatar.png" alt="">
    </div>
    <div class="user__info">
        <span>Василий</span>
        <span>vasya@mail.ru</span>
    </div>
</div>

// тоже плохо, так как aside - семантический тег
<aside class="sidebar">
    <!-- какой-то контент -->
</aside>
<!-- /.sidebar -->

// хорошо
<div class="user">
    <div class="user__avatar">
        <img src="avatar.png" alt="Василий">
    </div>
    <!-- /.user__avatar -->

    <div class="user__info">
        <span>Василий</span>
        <span>vasya@mail.ru</span>
    </div>
    <!-- /.user__info -->
</div>
<!-- /.user -->

БЭМ

Использование БЭМ у нас - обязательное условие!

В именовании классов не используйте бизнес-логику! Вы должны называть элементы так, как их принято называть на английском языке по прямому назначению.

Например:

  • .field - поле ввода

  • .upload - поле загрузки файлов

  • .menu - меню

  • .tabs - вкладки

  • .table - таблица

Блоки и элементы мы именуем как и принято в БЭМ. Модификаторы мы пишем через два тире (.notify--success).

Last updated