Как подключить CSS к HTML: три способа и проверка, что стили применились

Чтобы подключить CSS к HTML, положите стили в файл style.css и добавьте в head тег link с rel="stylesheet".

Разбираем этот способ, тег style и атрибут style, пути к файлу и восемь причин, по которым стили не применяются. Каждую ошибку мы воспроизвели в Chrome.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 2891 статья автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3545 экспертных мнений Подписаться на Телеграм-канал
Обложка: Как подключить CSS к HTML: три способа и проверка, что стили применились

Чтобы подключить CSS к HTML, сохраните стили в отдельный файл style.css и добавьте в <head> страницы одну строку: <link rel="stylesheet" href="style.css">. Браузер скачает файл и применит правила ко всем элементам. Этот способ стоит выбирать по умолчанию.

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

CheckroiCheckroiПодборка курсов по CSS182 курса • 37 школСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как подключить CSS-файл через тег link

Рой-верстальщик подключает стили к странице

Внешний файл удобен тем, что один набор стилей подключается к любому числу страниц. Поменяли цвет кнопки в style.css, и он сменился на всём сайте.

  1. Создайте папку проекта и положите в неё index.html. Как это сделать в Блокноте или редакторе кода, мы разобрали в инструкции как создать HTML-файл.
  2. Рядом создайте папку css, а в ней файл style.css. Расширение должно быть именно .css.
  3. Впишите в файл первое правило, например цвет заголовка.
  4. Откройте index.html и вставьте тег <link> между <head> и </head>.
  5. Сохраните оба файла и обновите страницу в браузере.

Структура проекта получится такой:

moj-sajt/
├── index.html
└── css/
    └── style.css

Код страницы:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <title>Мой первый сайт</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <h1>Мой первый сайт</h1>
  <p>Эта страница выглядит так благодаря одному файлу style.css.</p>
</body>
</html>

И сам файл стилей:

h1 {
  color: #7324ff;
  font-size: 30px;
}

p {
  font-size: 18px;
  line-height: 1.5;
}

Вот как похожая страница, дополненная списком и кнопкой, выглядит в Chrome 154 без файла стилей и с ним.

Страница в браузере до и после подключения CSS-файла через тег link
Слева страница без стилей: шрифт по умолчанию, ссылка вместо кнопки. Справа та же разметка с подключённым style.css. Кадры сделаны в Chrome

Что значат rel, href и type

Обязательных атрибутов у тега два. Остальные нужны в отдельных случаях.

Атрибут Что делает Нужен ли
rel="stylesheet" Сообщает браузеру, что по ссылке лежит таблица стилей Да. Без него файл не применяется, валидатор W3C показывает ошибку
href Путь к файлу: относительный, от корня сайта или полный адрес Да
type="text/css" Указывает тип файла Нет, для стилей он подразумевается по умолчанию
media Применяет файл только при условии: при печати, на узком экране По ситуации

Описание всех атрибутов есть в справочнике MDN по тегу link и в спецификации HTML.

Атрибут media пригодится, когда вы делаете отдельную версию для печати: <link rel="stylesheet" href="print.css" media="print">. Мы проверили это в Chrome: на экране файл не действует, при печати заголовок перекрашивается. Условия по ширине экрана удобнее писать внутри CSS, этому посвящена статья про медиа-запросы.

Как указать путь к файлу CSS

Больше всего вопросов «почему стили не подключились» связано с путём в href. Браузер ищет файл относительно адреса страницы. Где лежит папка проекта на диске, ему неважно.

Запись Где браузер ищет файл Когда подходит
style.css В той же папке, что и страница Страница и файл лежат рядом
css/style.css В подпапке css рядом со страницей Обычная структура маленького сайта
../css/style.css На уровень выше, затем в папке css Страница лежит во вложенной папке, например /blog/
/css/style.css От корня сайта Сайт открыт через сервер, страниц много и они на разной глубине
https://…/style.css По полному адресу Чужая библиотека или файл на CDN

Мы проверили типичную ошибку. Страница лежит в папке blog, а путь скопирован с главной: css/style.css. Браузер запросил /blog/css/style.css, получил 404 и показал голую разметку. С путём ../css/style.css та же страница оформилась.

Ошибка пути к CSS: страница в папке blog с href css/style.css и с ../css/style.css
Страница лежит в папке blog. С путём css/style.css браузер ищет файл в blog/css/ и получает 404, с ../css/style.css стили на месте

Второй подвох касается пути от корня. Пока сайт работает через локальный сервер или хостинг, /css/style.css находится. Если же открыть страницу двойным щелчком, адрес начнётся с file:///, и браузер станет искать файл в корне диска. В Chrome это закончилось ошибкой ERR_FILE_NOT_FOUND.

Совет: пока учитесь и открываете файлы прямо с диска, пишите относительные пути. Корневые /css/… оставьте для сайта на сервере.

И ещё одно. На большинстве хостингов стоит Linux, а там Style.css и style.css считаются разными файлами. На своём компьютере под Windows или macOS всё работает, а после загрузки на сервер стили пропадают. Называйте файлы строчными латинскими буквами.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Внутренние стили в теге style

Предметная раскладка: файлы и инструменты веб-вёрстки

Стили можно написать прямо в HTML-документе, внутри тега <style> в разделе <head>:

<head>
  <meta charset="utf-8">
  <title>Страница</title>
  <style>
    h1 { color: #7324ff; }
    p { font-size: 18px; }
  </style>
</head>

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

Тег <style> живёт в служебной части документа рядом с <title> и <meta>. Как устроен HTML-документ целиком, мы разбирали в статье что такое HTML.

Минус тот же, что у любого копирования: на сайте из десяти страниц правку придётся вносить десять раз. Атрибут type="text/css" у тега <style> писать не нужно. Валидатор W3C на него выдаёт предупреждение, что атрибут лишний.

Инлайн-стили в атрибуте style

Третий способ задаёт оформление одному элементу через атрибут style:

<p style="color: #7324ff; font-size: 18px;">Этот абзац фиолетовый.</p>

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

Где инлайн-стили встречаются на практике:

  • в HTML-письмах, потому что часть почтовых программ не загружает внешние файлы и вырезает тег <style>;
  • когда значение подставляет скрипт, например ширину полосы загрузки;
  • для быстрой проверки «а что будет, если».

Для обычной вёрстки инлайн-стили неудобны. Оформление размазывается по разметке, повторяется в каждом элементе, а перебить его из файла можно только через !important. Почему так происходит, объясняют правила каскада и специфичности, их подробно разбирают на курсах по CSS.

Другие способы: @import и JavaScript

Правило @import

Один CSS-файл может подключить другой:

@import url("base.css");

h1 { color: #7324ff; }

Главное условие: @import стоит в самом начале файла, выше всех остальных правил. Так требует спецификация CSS Cascade. Мы проверили, что будет при нарушении: когда @import переехал под правило для h1, Chrome проигнорировал вложенный файл, и в консоли об этом не появилось ни строчки.

Ещё один минус в скорости. Браузер узнаёт о вложенном файле, только когда скачает и прочитает первый, поэтому загрузка идёт цепочкой. Несколько тегов <link> подряд грузятся параллельно.

Подключение из JavaScript

Иногда стили нужно добавить уже после загрузки страницы, например для виджета или темы оформления. Скрипт создаёт тег <link> и вставляет его в <head>:

const link = document.createElement("link");
link.rel = "stylesheet";
link.href = "css/style.css";
document.head.append(link);

В нашем тесте стили применились так же, как при обычном подключении. Как скрипт находит и меняет элементы страницы, мы объясняли в статье про DOM-дерево.

Чужие стили по CDN

Готовые библиотеки подключают тем же тегом, только в href пишут полный адрес:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/modern-normalize@3.0.1/modern-normalize.min.css">

Свой файл подключайте после библиотеки, тогда ваши правила смогут её переопределить.

Какой способ выбрать

Способ Где пишется Когда использовать Минус
Внешний файл, <link> Отдельный .css, ссылка в <head> Почти всегда: сайт, лендинг, учебный проект Лишний запрос к серверу, но браузер кеширует файл
Тег <style> Внутри страницы Одна страница, пример, стили первого экрана Правила не переиспользуются на других страницах
Атрибут style У конкретного элемента Письма, значения из скрипта, быстрый тест Разметка тяжелеет, правила трудно перебить
@import Внутри CSS-файла Сборка из нескольких файлов, если нет сборщика Файлы грузятся цепочкой

Если сомневаетесь, берите внешний файл. Остальные способы решают частные задачи. Об устройстве вёрстки в целом подробнее в материале что такое вёрстка.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Какие стили важнее, если правила спорят

Бывает, что один и тот же элемент получает разные значения из файла, тега <style> и атрибута. Ниже один заголовок с четырьмя наборами правил и цвет, который в каждом случае выбрал Chrome.

Приоритет стилей CSS: внешний файл, тег style, атрибут style и !important
Один заголовок, четыре набора правил. Тег style ниже link перебивает файл, атрибут style перебивает оба, а !important в файле сильнее атрибута
  • Файл и тег <style> равны по силе. Побеждает то правило, что стоит ниже в коде. Поставили <style> после <link>, заголовок стал зелёным. Поменяли местами, и он снова синий.
  • Атрибут style сильнее обоих. Красный из атрибута перебил и файл, и тег.
  • !important в файле сильнее обычного инлайн-стиля. Поэтому !important лучше оставить для крайних случаев, иначе потом его придётся перебивать таким же !important.

Порядок важен и между файлами. Если подключено несколько <link>, при равной специфичности селекторов выигрывает правило из последнего.

Почему CSS не подключается

Рой нашёл причину и проверяет чек-лист

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

  1. Нет rel="stylesheet" или в нём опечатка. С rel="styleshet" браузер даже не стал скачивать файл.
  2. Неверный путь. Откройте инструменты разработчика (F12), вкладку Network, и обновите страницу. Файл стилей с кодом 404 значит, что путь в href ведёт не туда. Как проверять сетевые запросы, описано в документации Chrome DevTools.
  3. Путь от корня при открытии с диска. /css/style.css под адресом file:/// указывает в корень диска. Замените на относительный путь.
  4. Файл называется style.css.txt. Windows по умолчанию скрывает расширения, и Блокнот мог дописать своё. Включите показ расширений в Проводнике и переименуйте файл.
  5. Сервер отдаёт файл с неверным типом. Мы отдали style.css с заголовком Content-Type: text/plain: файл скачался с кодом 200, но стили не применились. В Network у файла стилей должен быть тип text/css.
  6. Лишний или неверный type. С type="text/plain" Chrome файл проигнорировал. Проще удалить атрибут совсем.
  7. Браузер показывает старую версию. Он кеширует CSS-файлы. Обновите страницу без кеша (Ctrl+F5, на Mac Cmd+Shift+R) или допишите к адресу версию: style.css?v=2.
  8. Правило перебито другим. Файл подключился, но конкретное свойство не работает. На вкладке Elements выделите элемент: перечёркнутое свойство на панели Styles значит, что его перекрыло более сильное или более позднее правило.

Разметку стоит прогнать через валидатор W3C: тег <link> без rel он помечает как ошибку. Редактор кода с подсветкой тоже ловит половину опечаток, подборка таких программ есть в статье о редакторах для веб-разработки.

Тег <link> со стилями разрешено ставить и внутри <body>: в спецификации HTML тип stylesheet отмечен как допустимый в теле документа, и в нашем тесте стили применились. Но пока браузер дойдёт до такого тега, часть страницы успеет показаться без оформления, поэтому привычное место для <link> всё-таки <head>.

Где освоить HTML и CSS системно

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

Ниже курсы по CSS из нашего каталога, смежные программы есть в подборке курсов по HTML. Если хочется понять, куда эти навыки ведут, загляните в обзор профессии HTML-верстальщика и в план как стать фронтенд-разработчиком.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
HTML и CSS с нуля
Перейти на сайт курса
SkillboxSkillbox91 626 ₽7635 ₽/мес.11 месяцевОбзор курса
HTML и CSS. Адаптивная вёрстка и автоматизация
Перейти на сайт курса
HTMLAcademyHTML Academy23 400 ₽3900 ₽/мес.2 месяцаОбзор курса
Основы вёрстки HTML и CSS
Перейти на сайт курса
Академия СинергияАкадемия Синергия32 676 ₽2723 ₽/мес.3 месяцаОбзор курса
HTML и CSS с нуляSkyproSkypro195 160 ₽7972 ₽/мес.12 месяцевОбзор курса
Frontend-разработчик: сайты на HTML/CSS/JavaScript
Перейти на сайт курса
CoddyCoddy9200 ₽ - 3 месяцаОбзор курса

Больше программ — в полном каталоге курсов по CSS

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

Куда вставлять тег link: в head или в body?

В head. Спецификация HTML разрешает link со стилями и внутри body, и в Chrome стили применятся, но часть страницы успеет показаться без оформления.

Можно ли подключить к странице несколько CSS-файлов?

Да, несколькими тегами link подряд. Браузер скачивает их параллельно, а при равной силе селекторов выигрывает правило из файла, подключённого последним.

Нужно ли писать type="text/css"?

Нет. У тега link этот атрибут ничего не меняет, а у тега style валидатор W3C предупреждает, что он лишний. С неверным значением type="text/plain" Chrome файл вообще не стал загружать.

Почему изменения в CSS-файле не видны на странице?

Чаще всего браузер показывает сохранённую копию файла. Обновите страницу без кеша (Ctrl+F5, на Mac Cmd+Shift+R) или допишите к адресу версию, например style.css?v=2. Если не помогло, откройте вкладку Network в инструментах разработчика и проверьте, не отдаёт ли файл ошибку 404.

Как подключить CSS к HTML в VS Code?

Так же, как в любом редакторе: создайте style.css в папке проекта и добавьте в head строку <link rel="stylesheet" href="style.css">. Редактор подсвечивает код и подсказывает теги, а подключение делает браузер. Другие редакторы для вёрстки мы сравнили в статье о редакторах для веб-разработки.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

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

Напишите, что думаете. Нам важно ваше мнение!