Menu

Атрибуты HTML: синтаксис, class, id, data-* и логические

Атрибуты добавляют элементу HTML информацию: куда ведет ссылка, что показывает картинка, какой класс CSS применяется. Разберем синтаксис, глобальные атрибуты любого элемента, class и id, логические атрибуты и атрибуты data-*.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Что такое атрибуты HTML

Атрибут добавляет элементу информацию. Его пишут внутри открывающего тега: имя, знак равенства и значение в кавычках, name="value". У элемента может быть сколько угодно атрибутов, их разделяют пробелами.

href говорит ссылке, куда вести, src и alt описывают картинку, type, placeholder и required настраивают поле ввода. У каждого элемента свой набор атрибутов, а некоторые (глобальные атрибуты ниже) работают у любого элемента.

Правила синтаксиса

<input type="text" name="city" value="Paris" disabled>
  • Имя, знак равенства, значение в кавычках. Принято писать двойные кавычки; одинарные тоже работают (title='Say "hi"' позволяет поставить двойную кавычку внутри значения).
  • Имена не зависят от регистра. CLASS и class это один и тот же атрибут. Значения зависят: class="Box" и class="box" это разные классы.
  • Без пробелов кавычки необязательны, но ставьте их все равно. class=big box дает элементу класс big и второй, бессмысленный атрибут box.
  • Порядок не важен. <img alt="" src="a.png"> то же самое, что <img src="a.png" alt="">.
  • Каждое имя один раз на элемент. Если атрибут встречается дважды, браузер оставляет первый и молча отбрасывает второй.

Логические атрибуты

Некоторые атрибуты либо включены, либо выключены. У них наличие означает true, а значение игнорируется. Так работают disabled, checked, required, readonly, hidden, multiple, autofocus и open.

Третья кнопка неактивна, хотя в значении написано false: браузер проверяет только, есть ли атрибут. Чтобы выключить логический атрибут, удалите его. В JavaScript именно это делает button.disabled = false.

Атрибут class

class дает элементу одно или несколько имен, по которым его находят CSS и JavaScript. Один класс может быть у нескольких элементов, а у одного элемента может быть несколько классов через пробел:

Каждый дополнительный класс добавляет свои правила поверх остальных. В CSS класс выбирают через точку (.card); в JavaScript классы меняют element.classList.add('featured') и classList.remove. Классы это обычный способ задавать стили: большая часть вашего CSS будет нацелена на классы.

Атрибут id

id дает элементу имя, которое должно быть уникальным на странице. Используйте его, когда нужен ровно один элемент: цель ссылки, <label for> или document.getElementById.

Клик по подписи ставит фокус в поле, потому что for="email" указывает на id="email". Ссылка прокручивает к #pricing, потому что фрагмент в href совпадает с id.

classid
Сколько элементов может его иметьЛюбое количествоОдин (уникальный)
Значений на элементНесколько, через пробелОдно
Селектор CSS.name#name
Типичное применениеСтили для групп элементовЦели ссылок, подписи, один конкретный элемент в JavaScript

В id не может быть пробелов. Начинайте его с буквы, чтобы им было удобно пользоваться в CSS: #2col не является корректным селектором CSS без экранирования.

Глобальные атрибуты

Эти атрибуты работают у любого элемента:

АтрибутЧто делает
idУникальное имя элемента
classСписок имен классов через пробел
styleВстроенный CSS, например style="color: red"
titleТекст подсказки при наведении
langЯзык содержимого, например lang="fr"
dirНаправление текста: ltr, rtl или auto
hiddenСкрывает элемент (логический)
tabindexДелает элемент доступным для фокуса по Tab или задает порядок
contenteditableПозволяет пользователю редактировать текст элемента
data-*Ваши собственные данные, читаются из JavaScript

У атрибута lang есть отдельная страница, потому что он влияет на программы чтения с экрана, перевод и поиск.

Атрибуты data-*

Если нужно хранить на элементе собственное значение, добавьте к имени префикс data-. После префикса подойдет любое имя, а JavaScript читает значения через element.dataset, где дефисы превращаются в camelCase:

data-product-id превращается в dataset.productId. Значения всегда возвращаются строками, поэтому перед арифметикой преобразуйте их через Number(). CSS тоже умеет выбирать по ним: [data-price="4.50"].

Частые ошибки

  • class написан дважды. <div class="a" class="b"> оставляет только a. Запишите оба в один атрибут: class="a b".
  • Повторный id. Два элемента с одинаковым id ломают ссылки вида #id, подписи и getElementById, который возвращает только первый. Для всего повторяющегося используйте класс.
  • disabled="false" или checked="false". Атрибут все еще есть, значит он включен. Удалите его.
  • Значения с пробелами без кавычек. alt=My photo задает alt равным My. Берите в кавычки каждое значение.
  • Придуманные атрибуты без data-. <div price="4"> некорректный HTML, и он может конфликтовать с будущим стандартным атрибутом. Используйте data-price.

Часто задаваемые вопросы

Что такое атрибут HTML?

Атрибут это дополнительная информация внутри открывающего тега в виде name="value". Он настраивает элемент: href задает, куда ведет ссылка, src и alt описывают картинку, class и id позволяют CSS и JavaScript найти элемент.

Чем class отличается от id в HTML?

id должен быть уникальным на странице и обозначает один элемент, для ссылок #fragment, <label for> и getElementById. class может быть у многих элементов, а у одного элемента может быть несколько классов через пробел. Для стилей используйте классы.

Как добавить элементу несколько классов?

Запишите их в один атрибут class через пробел: <div class="card featured dark">. Если написать class дважды, это не сработает: браузер оставит только первый.

Нужны ли кавычки в атрибутах HTML?

Кавычки необязательны, если в значении нет пробелов и специальных символов, но надежнее ставить их всегда. class=big box дает элементу класс big и отдельный атрибут с именем box.

Почему кнопка с disabled="false" все равно неактивна?

disabled это логический атрибут: его наличие означает true, что бы ни было написано в значении. Чтобы включить элемент, удалите атрибут или выполните в JavaScript button.disabled = false, что его и удаляет.

Можно ли придумать свои атрибуты HTML?

Используйте префикс data-: data-price="12" или data-user-id="7" допустимы у любого элемента, а в JavaScript они доступны через element.dataset. Придуманные имена без префикса делают HTML некорректным.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ