Что такое атрибуты 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.
class | id | |
|---|---|---|
| Сколько элементов может его иметь | Любое количество | Один (уникальный) |
| Значений на элемент | Несколько, через пробел | Одно |
| Селектор 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 некорректным.