HTML & CSS

Методический материал по темам HTML и CSS

Эта страница нужна для подготовки и повторения. Материал объясняет основные темы верстки: структуру HTML-документа, подключение CSS, семантику, flexbox, навигацию, карточки, псевдоэлементы, изображения, шрифты, селекторы и отступы.

16тем для повторения
HTMLструктура страницы
CSSоформление интерфейса
Flexboxраскладка блоков

1. Что такое верстка

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

HTML

HTML описывает, какие элементы есть на странице: заголовки, абзацы, ссылки, кнопки, картинки, формы, меню, карточки и секции.

CSS

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

Главный принцип

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

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

2. Структура файлов сайта

Файлы сайта лучше раскладывать по папкам. Так проект проще читать, переносить, проверять и дорабатывать. Обычно HTML-страница лежит в корне проекта, стили — в папке css, изображения — в images, шрифты — в fonts, скрипты — в js.

site/ ├── index.html └── src/ ├── css/ │ ├── normalize.css │ ├── index.css │ └── main_page.css ├── fonts/ ├── images/ └── js/
Часть проектаДля чего нужна
index.htmlГлавная HTML-страница. В ней находится разметка: теги, текст, ссылки, изображения и контейнеры.
cssПапка со стилями. Здесь хранятся файлы, которые оформляют страницу.
normalize.cssФайл для выравнивания стандартных стилей браузеров.
imagesПапка для картинок, иконок, логотипов и фоновых изображений.
fontsПапка для локальных шрифтов, если они подключаются не через интернет, а из проекта.
jsПапка для JavaScript. На начальном этапе верстки она может быть пустой.

Правило

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

3. Базовая структура HTML-документа

Любая HTML-страница начинается с каркаса. Он сообщает браузеру тип документа, язык страницы, кодировку, настройки отображения и заголовок вкладки.

<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Название страницы</title>
  </head>
  <body>
    <!-- Видимая часть страницы -->
  </body>
</html>

<!doctype html>

Включает современный режим HTML5.

lang="ru"

Указывает язык страницы. Для русскоязычного материала используют ru, для английского интерфейса — en.

charset="UTF-8"

Позволяет корректно отображать русские буквы, английские буквы, цифры и спецсимволы.

viewport

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

4. Подключение CSS-файлов

CSS-файлы подключаются в блоке <head> с помощью тега <link>. Через атрибут href указывается путь к файлу со стилями.

<link rel="stylesheet" href="./src/css/normalize.css" />
<link rel="stylesheet" href="./src/css/index.css" />
<link rel="stylesheet" href="./src/css/main_page.css" />

Порядок подключения

CSS читается сверху вниз. Поэтому сначала обычно подключают файл нормализации, затем общие стили, затем стили конкретной страницы или конкретного блока.

Важно

Если два CSS-правила меняют одно и то же свойство одного элемента, браузер выбирает правило по каскаду, специфичности и порядку подключения. Поэтому порядок файлов имеет значение.

5. Семантические теги

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

ТегНазначениеПример использования
<header>Верхняя часть страницы или раздела.Логотип, поиск, профиль пользователя.
<nav>Навигация по сайту или приложению.Главное меню, боковое меню, список ссылок.
<main>Основное содержимое страницы.Главный блок с контентом.
<section>Отдельный смысловой раздел.Раздел с карточками, раздел с описанием, раздел с преимуществами.
<article>Самостоятельный фрагмент контента.Новость, карточка статьи, пост.
<footer>Нижняя часть страницы или блока.Контакты, копирайт, дополнительные ссылки.
<div>Обычный контейнер без смысла.Группировка элементов для CSS.

Если у блока есть понятная роль, лучше выбрать семантический тег. Если блок нужен только для группировки и оформления, подходит <div>.

7. Flexbox

Flexbox — это способ расположить элементы в строку или колонку и управлять расстоянием между ними. Он особенно удобен для шапок, меню, кнопок, карточек и небольших групп элементов.

.header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
}
СвойствоЧто делает
display: flexВключает flex-раскладку для дочерних элементов.
flex-direction: rowРасполагает элементы в строку. Это значение по умолчанию.
flex-direction: columnРасполагает элементы в колонку.
justify-contentУправляет расположением элементов по главной оси.
align-itemsУправляет выравниванием элементов по поперечной оси.
gapЗадает расстояние между flex-элементами.

Строка

flex-direction: row подходит для шапки, горизонтального меню, ряда кнопок.

Колонка

flex-direction: column подходит для бокового меню, карточки, формы или вертикального списка.

9. Псевдоэлементы

Псевдоэлементы позволяют добавить декоративный элемент через CSS, не добавляя лишний тег в HTML. Самые частые псевдоэлементы — ::before и ::after.

.menu-button_active {
  position: relative;
}

.menu-button_active::before {
  content: "";
  position: absolute;
  left: -12px;
  width: 4px;
  height: 32px;
  border-radius: 999px;
  background: #18333e;
}

Когда использовать

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

Что не забыть

У псевдоэлемента почти всегда должен быть content: "". Для абсолютного позиционирования родителю обычно ставят position: relative.

10. Карточки

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

<article class="card">
  <img class="card__image" src="./src/images/place.png" alt="Горный пейзаж" />
  <div class="card__content">
    <h3 class="card__title">Название места</h3>
    <p class="card__text">Краткое описание карточки.</p>
  </div>
</article>
.card {
  overflow: hidden;
  border-radius: 24px;
  background: #ffffff;
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.08);
}

.card__image {
  display: block;
  width: 100%;
  height: 220px;
  object-fit: cover;
}

.card__content {
  padding: 20px;
}

Почему карточкам нужны классы

Классы позволяют одинаково оформить все карточки и отдельно управлять их частями. Например, можно отдельно стилизовать изображение, заголовок, текст и нижнюю панель карточки.

11. Изображения и пути

Изображения подключаются через тег <img>. В атрибуте src указывается путь к файлу, а в alt — текстовое описание изображения.

<img src="./src/images/logo.svg" alt="Логотип сайта" />
ЗаписьЧто означает
./Начать путь из текущей папки.
../Подняться на одну папку выше.
src/images/logo.svgЗайти в папку src, затем в images, затем взять файл logo.svg.
/images/logo.svgАбсолютный путь от корня сайта. В обычной локальной верстке может работать не так, как ожидается.

Атрибут alt

alt нужен для доступности и случаев, когда изображение не загрузилось. Если изображение декоративное и не несет смысла, alt можно оставить пустым: alt="". Если изображение важно для понимания страницы, описание должно быть осмысленным.

12. Шрифты

Шрифты можно использовать системные, подключать из внешних сервисов или хранить локально в проекте. Локальное подключение удобно, когда нужно, чтобы сайт не зависел от стороннего сервиса.

@font-face {
  font-family: "Baloo 2";
  src: url("../fonts/Baloo_2/Baloo2-VariableFont_wght.ttf") format("truetype");
  font-weight: 400 800;
  font-style: normal;
}

body {
  font-family: "Baloo 2", Arial, sans-serif;
}
СвойствоНазначение
font-familyНазвание шрифта, которое потом используется в CSS.
srcПуть к файлу шрифта.
font-weightДоступная толщина шрифта.
font-styleОбычный, курсивный или другой стиль начертания.

13. CSS-селекторы

Селектор показывает, к каким HTML-элементам применится CSS-правило. Чем понятнее селекторы, тем проще читать и поддерживать стили.

СелекторТипЧто выбирает
bodyПо тегуВсе элементы <body>. Обычно он один.
.headerПо классуВсе элементы с классом header.
#mainПо idЭлемент с идентификатором main.
.header imgВложенный селекторВсе картинки внутри блока с классом header.
nav > aДочерний селекторТолько прямые ссылки внутри nav.
.button:hoverПсевдоклассКнопку в момент наведения мыши.
.button::beforeПсевдоэлементДекоративный элемент перед содержимым кнопки.

Специфичность

Специфичность — это сила селектора. Селектор по классу сильнее селектора по тегу. Селектор с несколькими классами сильнее одного класса. Если правила равны по силе, обычно побеждает то, которое написано ниже.

14. Размеры и отступы

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

ЕдиницаПримерКогда использовать
pxpadding: 20pxТочные размеры: иконки, небольшие отступы, высота кнопок.
%width: 50%Размер относительно родителя.
vwwidth: 50vwРазмер относительно ширины окна браузера.
vhheight: 100vhРазмер относительно высоты окна браузера.
remfont-size: 1.25remРазмер относительно базового размера шрифта.

Блочная модель

content

Содержимое элемента: текст, картинка или другие блоки.

padding

Внутренний отступ между содержимым и границей блока.

border

Граница элемента.

margin

Внешний отступ между элементом и соседними блоками.

gap

Расстояние между элементами внутри flex- или grid-контейнера.

box-sizing

Определяет, как браузер считает итоговый размер элемента.

* {
  box-sizing: border-box;
}

С box-sizing: border-box ширина элемента включает контент, внутренние отступы и границу. Это часто делает верстку предсказуемее.

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

  1. Неправильный путь к файлу. Если картинка или CSS не загружается, сначала проверяют путь в src или href.
  2. Забыли подключить CSS. HTML может быть правильным, но без <link rel="stylesheet"> стили не появятся.
  3. Путают margin и padding. margin двигает сам блок, padding двигает содержимое внутри блока.
  4. Пишут слишком много безымянных div. Если блок нужно стилизовать или найти в коде, ему лучше дать класс.
  5. Ломают вложенность тегов. Каждый открытый тег должен быть закрыт в правильном месте.
  6. Используют огромные фиксированные размеры. Это может вызвать горизонтальную прокрутку и проблемы на маленьких экранах.
  7. Ставят z-index без понимания позиционирования. z-index работает предсказуемо только вместе с контекстом наложения и позиционированием.
  8. Не проверяют страницу после маленьких изменений. Верстку лучше проверять часто, а не только в конце.
  9. Оставляют важные изображения без alt. Это ухудшает доступность страницы.
  10. Не используют единый стиль именования классов. Из-за этого CSS быстро становится хаотичным.

16. Вопросы для самопроверки

  1. Что такое верстка?
  2. За что отвечает HTML?
  3. За что отвечает CSS?
  4. Для чего нужен <!doctype html>?
  5. Что делает <meta charset="UTF-8">?
  6. Зачем нужен viewport?
  7. Почему CSS-файлы подключаются в <head>?
  8. Почему normalize.css подключают раньше основных стилей?
  9. Чем семантический тег отличается от обычного div?
  10. Для чего используется тег <nav>?
  11. Что делает display: flex?
  12. Чем отличается flex-direction: row от flex-direction: column?
  13. Что делает justify-content: space-between?
  14. Что делает align-items: center?
  15. Для чего нужен gap?
  16. Чем отличается margin от padding?
  17. Что означает единица vw?
  18. Что означает единица vh?
  19. Как работает относительный путь ./src/images/logo.svg?
  20. Для чего нужен атрибут alt у картинки?
  21. Что делает правило @font-face?
  22. Что выбирает селектор nav > a?
  23. Что делает псевдокласс :hover?
  24. Для чего нужен псевдоэлемент ::before?
  25. Почему декоративный элемент часто лучше делать через CSS, а не отдельным HTML-тегом?
  26. Что такое специфичность CSS-селектора?
  27. Что нужно проверить, если изображение не отображается?
  28. Почему полезно давать класс каждому важному блоку?
  29. Что делает box-sizing: border-box?
  30. Почему страницу нужно проверять в браузере после небольших изменений?

Краткий итог

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