Методический материал по темам HTML и CSS
Эта страница нужна для подготовки и повторения. Материал объясняет основные темы верстки: структуру 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>.
6. Шапка страницы
Шапка сайта обычно содержит элементы, которые помогают пользователю быстро понять, где он находится, и выполнить главное действие. В интерфейсах там часто размещают логотип, поиск, кнопку фильтра, информацию о пользователе или кнопку входа.
<header class="header">
<div class="header__logo">
<img src="./src/images/logo.svg" alt="Логотип" />
</div>
<form class="header__search">
<input type="text" placeholder="Поиск" />
<button type="submit">Найти</button>
</form>
<div class="header__profile">Профиль</div>
</header>
Что важно в шапке
- Элементы должны быть выровнены по одной линии или понятной сетке.
- Поиск лучше оформлять через
form,inputиbutton. - Иконки должны иметь корректный путь в
src. - Если картинка несет смысл, у нее должен быть нормальный
alt. - Для больших блоков удобно использовать классы по смыслу:
header,header__logo,header__search.
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. Размеры и отступы
Размеры и отступы формируют внешний вид страницы. Без них блоки будут прилипать друг к другу, текст будет читаться хуже, а интерфейс будет выглядеть неаккуратно.
| Единица | Пример | Когда использовать |
|---|---|---|
px | padding: 20px | Точные размеры: иконки, небольшие отступы, высота кнопок. |
% | width: 50% | Размер относительно родителя. |
vw | width: 50vw | Размер относительно ширины окна браузера. |
vh | height: 100vh | Размер относительно высоты окна браузера. |
rem | font-size: 1.25rem | Размер относительно базового размера шрифта. |
Блочная модель
content
Содержимое элемента: текст, картинка или другие блоки.
padding
Внутренний отступ между содержимым и границей блока.
border
Граница элемента.
margin
Внешний отступ между элементом и соседними блоками.
gap
Расстояние между элементами внутри flex- или grid-контейнера.
box-sizing
Определяет, как браузер считает итоговый размер элемента.
* {
box-sizing: border-box;
}
С box-sizing: border-box ширина элемента включает контент, внутренние отступы и границу. Это часто делает верстку предсказуемее.
15. Частые ошибки
- Неправильный путь к файлу. Если картинка или CSS не загружается, сначала проверяют путь в
srcилиhref. - Забыли подключить CSS. HTML может быть правильным, но без
<link rel="stylesheet">стили не появятся. - Путают
marginиpadding.marginдвигает сам блок,paddingдвигает содержимое внутри блока. - Пишут слишком много безымянных
div. Если блок нужно стилизовать или найти в коде, ему лучше дать класс. - Ломают вложенность тегов. Каждый открытый тег должен быть закрыт в правильном месте.
- Используют огромные фиксированные размеры. Это может вызвать горизонтальную прокрутку и проблемы на маленьких экранах.
- Ставят
z-indexбез понимания позиционирования.z-indexработает предсказуемо только вместе с контекстом наложения и позиционированием. - Не проверяют страницу после маленьких изменений. Верстку лучше проверять часто, а не только в конце.
- Оставляют важные изображения без
alt. Это ухудшает доступность страницы. - Не используют единый стиль именования классов. Из-за этого CSS быстро становится хаотичным.
16. Вопросы для самопроверки
- Что такое верстка?
- За что отвечает HTML?
- За что отвечает CSS?
- Для чего нужен
<!doctype html>? - Что делает
<meta charset="UTF-8">? - Зачем нужен
viewport? - Почему CSS-файлы подключаются в
<head>? - Почему
normalize.cssподключают раньше основных стилей? - Чем семантический тег отличается от обычного
div? - Для чего используется тег
<nav>? - Что делает
display: flex? - Чем отличается
flex-direction: rowотflex-direction: column? - Что делает
justify-content: space-between? - Что делает
align-items: center? - Для чего нужен
gap? - Чем отличается
marginотpadding? - Что означает единица
vw? - Что означает единица
vh? - Как работает относительный путь
./src/images/logo.svg? - Для чего нужен атрибут
altу картинки? - Что делает правило
@font-face? - Что выбирает селектор
nav > a? - Что делает псевдокласс
:hover? - Для чего нужен псевдоэлемент
::before? - Почему декоративный элемент часто лучше делать через CSS, а не отдельным HTML-тегом?
- Что такое специфичность CSS-селектора?
- Что нужно проверить, если изображение не отображается?
- Почему полезно давать класс каждому важному блоку?
- Что делает
box-sizing: border-box? - Почему страницу нужно проверять в браузере после небольших изменений?
Краткий итог
HTML и CSS работают вместе. HTML задает структуру и смысл страницы, CSS превращает эту структуру в аккуратный интерфейс. Для уверенной верстки нужно понимать каркас HTML-документа, семантические теги, подключение стилей, flexbox, работу с изображениями, шрифтами, селекторами и отступами.