Атрибут style в HTML: как задать элементу инлайн-стиль

Атрибут style записывает CSS-правила прямо в тег, минуя отдельную таблицу стилей: style="color: teal; font-size: 18px;". Такую запись называют инлайн-стилем - третьим способом подключить CSS к странице, помимо тега <style> и внешнего файла. Эти три способа подробно сравниваются в уроке Три способа подключения CSS.

HTML
<p style="color: teal; font-size: 18px;">Текст заметки</p>

Атрибут style в HTML: что это и как работает

Атрибут style входит в глобальные атрибуты и допустим на любом теге, но действует только на тех, которые отображаются на странице. Его значение - не произвольный текст, а набор CSS-деклараций: те же пары «свойство: значение», что пишут внутри фигурных скобок в таблице стилей, только без селектора и без самих скобок. Браузер разбирает этот блок отдельно для каждого тега и применяет получившиеся правила только к нему одному.

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

Как записать значение атрибута style: синтаксис

Внутри style декларации разделяют точкой с запятой: style="свойство: значение; свойство: значение;". Правило простое, но есть особенности, из-за которых стиль ломается незаметно.

Пример: как браузер разбирает разные варианты записи

Результат

Выберите вариант записи и посмотрите, какие свойства браузер действительно применил.

Самая неожиданная деталь - пропущенная точка с запятой между двумя декларациями делает обе нерабочими, а не только вторую: браузер читает всю строку как одно нераспознанное свойство и отбрасывает её целиком. А вот лишние точки с запятой, двойные пробелы вокруг двоеточия и пустая строка в конце - не ошибка, браузер их просто игнорирует.

Приоритет style: что сильнее - инлайн-стиль или класс

У инлайн-стиля очень высокий приоритет в каскаде - выше любого обычного селектора в таблице стилей, будь то класс, id или тег. Поэтому style обычно побеждает правило класса, даже если класс написан позже по тексту CSS-файла. Но у этого приоритета есть потолок: правило с пометкой !important в таблице стилей снова побеждает обычный инлайн-стиль.

Пример: style против класса с !important

Результат

У карточки есть класс с правилом color: blue !important. Включите стиль в атрибуте и сравните, что сильнее.

Но и это можно обойти: если пометку !important добавить не только в класс, но и прямо в сам инлайн-стиль, побеждает снова он - внутри «важных» правил браузер опять сравнивает их обычным образом, а у инлайн-записи в этом сравнении приоритет выше, чем у любого селектора. Двойной !important обычно значит, что в CSS накопился конфликт. Его лучше распутать, а не усиливать новыми перебивающими правилами.

CSS-переменные в атрибуте style

Менее известная возможность style - через него можно задать не только обычное CSS-свойство, но и пользовательскую переменную, название которой начинается с двух дефисов: style="--accent: #ffb199;". Саму переменную при этом читает правило в таблице стилей через функцию var(), а инлайн-стиль лишь подставляет ей значение для одного конкретного элемента.

Пример: цвет карточки через CSS-переменную в style

Результат

Правило в CSS берёт цвет из переменной --accent. Кнопки задают эту переменную через атрибут style у блока.

Способ удобен, когда значение в стилях должно поменяться у одного элемента, а правило, которое его использует, при этом остаётся общим для всех - например, одна и та же карточка в разных местах страницы получает разный акцентный цвет, не дублируя весь набор CSS-свойств.

Атрибут style в JavaScript

В JavaScript у каждого элемента есть свойство style - отдельный объект с одним CSS-свойством на каждое поле. Названия через дефис в этом объекте превращаются в camelCase: font-weight становится style.fontWeight. Можно задавать свойства по одному, либо заменить всю строку целиком через style.cssText.

JavaScript
const box = document.querySelector(".box");

box.style.color = "crimson";       // одно свойство
box.style.setProperty("--accent", "#a9c9ff"); // CSS-переменная
box.style.cssText = "";             // очистить значение атрибута
box.removeAttribute("style");       // убрать атрибут целиком

Пример: разница между очисткой и удалением style

Результат

Нажимайте кнопки по очереди: атрибут меняется, а строка внизу показывает, что именно видит браузер.

Разница между style.cssText = "" и removeAttribute("style") заметна только в коде, а не на экране: после очистки атрибут остаётся на теге с пустым значением, hasAttribute("style") вернёт true. После удаления атрибута на теге не остаётся вовсе, и тот же метод вернёт false. Для скрипта, который проверяет наличие style, это разные состояния.

Когда style не стоит использовать вместо класса

Инлайн-стиль удобен для значения, которое вычисляется в скрипте и относится ровно к одному элементу: координаты перетаскиваемого блока, цвет по результату вычисления, ширина прогресс-бара. Как только одно и то же оформление нужно повторить у нескольких тегов, style превращается в дублирование кода: правило придётся вписывать в каждый тег заново и так же вручную править в каждом месте при любом изменении.

Для повторяющегося оформления подходит class: одно правило в таблице стилей меняет сразу все элементы с этим названием. Из-за высокого приоритета style ещё и мешает переопределять стиль через класс при наведении, медиазапросе или состоянии - тогда правило из CSS приходится дополнительно перебивать через !important, вместо обычного правила.

Частые ошибки с атрибутом style

Часть ошибок с style незаметна на глаз - стиль просто «не работает», и непонятно почему.

ОшибкаЧто происходитКак исправить
style="color:red font-weight:bold" без точки с запятойБраузер видит одну нераспознанную запись, не применяется ни одно из двух свойствРазделять декларации точкой с запятой: color:red; font-weight:bold;
style="fontWeight: bold" в camelCaseВ самом атрибуте такое название свойства браузер не распознаёт, стиль не применяетсяВ атрибуте писать через дефис: font-weight: bold. CamelCase работает только у объекта element.style в JavaScript
Одинаковый style скопирован в десяток теговПравило оформления продублировано, при правке нужно менять каждый тег отдельноВынести повторяющееся оформление в класс и правило CSS
style="" вместо удаления атрибутаАтрибут остаётся на теге пустым, скрипты видят style как существующийДля полного удаления использовать removeAttribute("style")
Правило в style пытаются перебить классомИнлайн-стиль почти всегда сильнее обычного селектора класса, класс не срабатываетЛучше убрать правило из style и перенести в класс. Пометка !important в CSS нужна только в крайнем случае

Шпаргалка по атрибуту style

ПравилоЧто запомнить
Где работаетНа любом теге
Синтаксис значениясвойство: значение; свойство: значение;
Разделитель декларацийТочка с запятой
Пропущенная точка с запятойЛомает обе соседние декларации
Приоритет в каскадеВыше обычного селектора класса или id
Что сильнее styleПравило с !important в CSS
Что сильнее это правилоИнлайн-стиль со своим !important
CSS-переменная в stylestyle="--name: значение;"
Свойство в JSelement.style.fontWeight
Очистить значениеstyle.cssText = "" (атрибут остаётся)
Удалить атрибутremoveAttribute("style")
Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×