Menu

Внешний и внутренний CSS: link и style

Внешний CSS хранится в файле .css, который каждая страница подключает через <link rel="stylesheet">; внутренний CSS находится в элементе <style> на одной странице. Разберем оба способа, пути к файлам и то, какое правило побеждает при их встрече.

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

Внешний CSS в одной строке

Внешний CSS это отдельный файл .css. Его подключают из <head> каждой страницы, которой он нужен:

<head>
  <link rel="stylesheet" href="styles.css">
</head>

В самом файле лежат обычные правила CSS, без HTML-тегов вокруг:

/* styles.css */
body {
  font-family: system-ui, sans-serif;
  color: #111827;
}

.card {
  border: 2px solid #2563eb;
  border-radius: 8px;
  padding: 12px 16px;
}

Превью ниже неоткуда загрузить второй файл, поэтому тот же CSS помещен в элемент <style>. Это внутренний CSS, и выглядит он точно так же, как подключенный файл:

Внутренний CSS: элемент style

Внутренний CSS это элемент <style> на странице. Разместите его в <head>, чтобы стили были известны до отрисовки body. Он действует на всю страницу, а его правила используют селекторы, чего не умеют встроенные атрибуты style.

Наведите курсор на тег: :hover здесь работает, потому что это настоящее правило. Третий способ, атрибут style, описан на странице про inline CSS.

Внутренний и внешний CSS

Внешний (<link>)Внутренний (<style>)
ГдеФайл .cssВнутри HTML-страницы
Область действияВсе страницы, которые его подключаютОдна страница
КешированиеСкачивается один раз, используется на всех страницахОтправляется заново с каждой страницей
Смена оформления сайтаПравка одного файлаПравка каждой страницы
Дополнительный запросДа, по одному на файлНет
Подходит дляНастоящих сайтовДемо, одиночных страниц, HTML-писем, критического CSS

Специфичность у обоих одинаковая: правило в элементе <style> и то же правило в подключенном файле весят ровно одинаково. При равенстве побеждает то, что идет в документе позже.

Порядок: побеждает более поздняя таблица стилей

Таблицы стилей читаются в порядке документа, и <link>, и <style>. Из двух правил с одинаковой специфичностью побеждает более позднее. Два блока <style> ниже изображают подключенный файл и следующее за ним переопределение на уровне страницы:

Кнопка сохраняет отступы и белый текст из первого правила и берет из второго только фон. Поэтому таблицу стилей сайта ставят после таблицы фреймворка: сначала <link> на библиотеку, потом на свою.

Пути к файлам в href

href у <link> это URL, который вычисляется относительно расположения HTML-файла.

hrefЗагружает
styles.cssФайл в той же папке, что и страница
css/styles.cssПапку css рядом со страницей
../styles.cssНа одну папку выше
/styles.cssОт корня сайта
https://example.com/a.cssПолный URL на другом сервере

Если страницы сайта лежат на разной глубине, путь от корня (/css/styles.css) работает на каждой из них.

Таблицы стилей для печати и других сред

Атрибут media ограничивает таблицу стилей подходящими условиями. Его принимают и <link>, и <style>:

<link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="wide.css" media="(min-width: 900px)">

Превью это экран, поэтому баннер виден. На настоящей странице баннер исчезает при печати, а в DevTools то же самое видно, если эмулировать тип среды print (панель Rendering).

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

  • Неверный путь. Опечатка в href ничего не загружает, и страница остается без стилей. Откройте DevTools, вкладку Network, и найдите 404 на файле .css.
  • Забытый rel="stylesheet". Без него <link href="styles.css"> не загружает таблицу стилей.
  • HTML внутри файла .css. В файле .css только правила. Теги <style> в нем не являются валидным CSS и ломают соседнее правило.
  • Своя таблица стилей раньше таблицы фреймворка. При равной специфичности побеждает более поздний файл, поэтому свой CSS подключайте последним.
  • Видна старая версия. Браузеры кешируют таблицы стилей. Сделайте жесткую перезагрузку или добавьте версию в URL (styles.css?v=2) при выкладке изменений.

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

Что такое внешний CSS?

Внешний CSS это таблица стилей в отдельном файле .css, которую загружают через <link rel="stylesheet" href="styles.css"> в <head> страницы. Все страницы, подключившие файл, получают одинаковые стили, а браузер кеширует файл между страницами.

Что такое внутренний CSS?

Внутренний CSS, его также называют встроенной таблицей стилей, это CSS внутри элемента <style> в самом HTML-документе, обычно в <head>. Он действует только на эту страницу.

Как подключить CSS-файл к HTML?

Добавьте <link rel="stylesheet" href="styles.css"> внутрь <head>. href это путь относительно HTML-файла: css/styles.css указывает в папку css рядом с ним, а /styles.css отсчитывается от корня сайта.

Что лучше, внутренний или внешний CSS?

Внешний CSS для всего, где больше одной страницы: правится один файл, а браузер скачивает его один раз и использует повторно. Внутренний CSS подходит для одной страницы, демо или небольшого блока критических стилей, которые нужны в первом ответе сервера.

Почему не работает внешний CSS?

Обычные причины: неверный путь в href (ищите 404 на вкладке Network), нет rel="stylesheet", теги <style> внутри файла .css или более позднее правило, которое перебивает ваше. Жесткая перезагрузка исключает старую копию из кеша.

Coddy programming languages illustration

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

НАЧАТЬ