W3docs

HTML-тег <style>

Тег <style> задаёт стили элементов страницы. Описание, синтаксис, атрибуты и примеры.

Тег <style> встраивает правила CSS непосредственно в HTML-документ. Он определяет, как элементы на странице должны отображаться, без использования отдельного файла таблицы стилей. Такой подход принято называть внутренним (или встроенным) CSS.

Совет

Чтобы загрузить CSS из отдельного файла, используйте элемент <link rel="stylesheet">.

Страница может содержать более одного элемента <style>, и правила из всех них объединяются.

Почему <style> размещается в <head>

CSS внутри тега <style> предназначен для браузера, а не для читателя, поэтому он помещается внутри элемента <head>. Для этого есть веские причины:

  • Это блокирующий рендеринг. Браузер должен прочитать и применить CSS, прежде чем сможет отрисовать страницу. Размещение стилей в <head> позволяет браузеру узнать, как должно выглядеть всё содержимое, до отрисовки тела документа.
  • Это предотвращает FOUC (мелькание неоформленного содержимого). Если стили определены в конце документа, браузер может кратко отобразить неоформленное содержимое, а затем применить к нему стили — что вызывает заметное мерцание и сдвиг макета.

HTML5 технически допускает размещение элемента <style> внутри <body> (браузер всё равно применит правила), однако это не рекомендуется: это может вызвать перерасчёт макета и описанный выше FOUC. Держите стили в <head>.

Опасно

В более ранних версиях HTML и в XHTML атрибут type="text/css" был обязателен для тега <style>. В HTML5 он используется по умолчанию и может быть опущен.

Три способа подключения CSS

Тег <style> — лишь один из трёх способов применить CSS. Выбор правильного имеет значение:

МетодКакПодходит для
Инлайновый атрибут style<p style="color: red;">Единичное переопределение на одном элементе. Сложно поддерживать и обладает наивысшей специфичностью — используйте редко.
Внутренний <style>Блок <style> в <head>Стили, нужные только одной странице, или критический CSS, который нужно встроить, чтобы избежать дополнительного запроса.
Внешний <link rel="stylesheet">Отдельный файл .cssСтили, общие для множества страниц. Кэшируются браузером и разделяют содержимое и оформление — стандартный выбор для реальных сайтов.

Подробное сравнение смотрите в разделе HTML Styles.

Синтаксис

Тег <style> является парным. Содержимое записывается между открывающим (<style>) и закрывающим (</style>) тегами.

Пример HTML-тега <style>:

HTML-тег <style>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      h1 {
        color: #1c87c9;
      }
      p {
        color: #8ebf42;
      }
    </style>
  </head>
  <body>
    <h1>Text heading.</h1>
    <p>First paragraph.</p>
  </body>
</html>

Селекторы (h1, p) внутри блока нацелены на элементы тела документа, а объявления в фигурных скобках задают их стили.

Результат

style example

Условное применение стилей с помощью media

Атрибут media позволяет применять блок <style> только тогда, когда соответствующий медиазапрос совпадает — например, только на маленьких экранах, только на экранах (не при печати) или только при печати. Правила блока, чей запрос не совпадает, игнорируются.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <!-- Always applies -->
    <style>
      p {
        color: #1c87c9;
      }
    </style>
    <!-- Applies only on screens up to 600px wide -->
    <style media="screen and (max-width: 600px)">
      p {
        color: #8ebf42;
        font-size: 20px;
      }
    </style>
  </head>
  <body>
    <p>Resize the window: this text turns green and grows on narrow screens.</p>
  </body>
</html>

То же самое можно сделать с помощью элемента <link> (<link rel="stylesheet" media="..." href="...">).

Атрибуты

АтрибутЗначениеОписание
mediamedia_queryУказывает медиа, для которых применяются стили, например screen and (max-width: 600px). Если не указан, стили применяются ко всем медиа.
typetext/cssУказывает MIME-тип таблицы стилей. Необязателен в HTML5, так как text/css используется по умолчанию.

Устаревший атрибут scoped

Вы можете встретить упоминания атрибута scoped, который был призван ограничить действие правил блока <style> родительским элементом и его потомками. Он так и не получил широкой поддержки и был удалён из стандарта HTML — не используйте его. Для ограничения области действия CSS сегодня используйте один из современных подходов:

  • Shadow DOM (через пользовательские элементы / веб-компоненты), где стили полностью инкапсулированы и не просачиваются внутрь или наружу.
  • Скопированные имена классов — уникальный префикс класса на компонент, задаваемый вручную или генерируемый инструментами, такими как CSS Modules.

Практика

Практика
Что верно относительно HTML-тега style?
Что верно относительно HTML-тега style?
Was this page helpful?