Модуль 01 — Веб-страница и HTML-документ

Из чего состоит страница и как её видит браузер

Прогресс курса Модуль 1 из 9

Что вы освоите в этом модуле

01

Как браузер показывает страницу

Веб-страница — это текстовый файл. Браузер получает его с сервера по протоколу HTTP (подробно — в курсе «Основы компьютерных сетей»), читает и рисует на экране. В файле три языка, у каждого своя роль:

ЯзыкОтвечает заПример
HTMLСодержание и структуру: что на странице — заголовок, абзац, ссылка, форма<h1>Кафе «Нева»</h1>
CSSВнешний вид: цвета, шрифты, расположение блоковh1 { color: navy; }
JavaScriptПоведение: реакцию на действия пользователя без перезагрузкиОткрыть меню по нажатию

Этот курс — про первые два. Порядок работы браузера: получить HTML → разобрать его в дерево элементов (DOM) → загрузить файлы, на которые HTML ссылается (стили, картинки, шрифты) → применить стили → нарисовать. Страница сайта nevabit.ru, которую вы читаете, устроена так же: один HTML-файл на модуль и один общий CSS-файл.

02

Теги, элементы, атрибуты

HTML размечает текст тегами — словами в угловых скобках. Открывающий тег <p>, закрывающий </p> с косой чертой, между ними — содержимое. Всё вместе называется элементом.

<p>Это абзац текста.</p>
<a href="https://nevabit.ru/">Ссылка на сайт</a>
<img src="logo.png" alt="Логотип кафе">

У тегов бывают атрибуты — дополнительные сведения в открывающем теге, в виде имя="значение". href у ссылки — куда она ведёт, src у картинки — где лежит файл, alt — текст вместо картинки. Некоторые элементы не имеют содержимого и закрывающего тега — их называют пустыми: <img>, <br>, <meta>, <input>.

Элементы вкладываются друг в друга, как матрёшки: закрывать нужно в обратном порядке. <p><strong>…</strong></p> — верно, <p><strong>…</p></strong> — ошибка. Браузер не сообщает об ошибках разметки, а молча «чинит» их по своим правилам — и результат бывает неожиданным:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Вложенность</title>
</head>
<body>
    <p>Абзац, в котором <strong>важное слово</strong> выделено.</p>
    <p>Абзац с ошибкой: <strong>тег не закрыт</p>
    <p>Следующий абзац тоже стал жирным.</p>
</body>
</html>
Результат в браузере
Первый абзац с выделенным словом; во втором абзаце жирный текст после двоеточия, третий абзац целиком жирный из-за незакрытого тега strong

Незакрытый <strong> браузер перенёс в следующий абзац. На странице из сотни строк такую ошибку ищут долго — поэтому разметку проверяют валидатором (раздел 07). Имена тегов пишут строчными буквами, значения атрибутов — в двойных кавычках.

03

Скелет документа

У каждой HTML-страницы одинаковый каркас. Создайте каталог site, в нём файл index.html:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Моя первая страница</title>
</head>
<body>
    <h1>Привет, веб!</h1>
    <p>Это моя первая страница. Её показывает браузер,
       а написана она в обычном текстовом редакторе.</p>
</body>
</html>
СтрокаЗачем
<!DOCTYPE html>Сообщает браузеру, что это современный HTML. Без неё браузер включает «режим совместимости» со старыми ошибками вёрстки
<html lang="ru">Корневой элемент. lang — язык страницы: по нему экранный диктор выбирает произношение, браузер — переносы и перевод
<head>Служебная часть: на экране не видна
<meta charset="UTF-8">Кодировка файла. Без неё кириллица может превратиться в «кракозябры»
<meta name="viewport" …>Ширина страницы на телефоне равна ширине экрана. Без неё телефон показывает страницу уменьшенной копией настольной (модуль 08)
<title>Название во вкладке браузера, в закладках и в результатах поиска
<body>Всё, что видно на странице

Откройте файл в браузере: двойной щелчок или перетаскивание в окно браузера. Адрес в строке начнётся с file:// — страница открыта с диска, без сервера:

Результат в браузере
Страница с заголовком «Привет, веб!» и абзацем текста под ним

Браузер показал заголовок крупно и жирно, абзац — обычным текстом, хотя никаких стилей мы не писали. Это стили браузера по умолчанию: у каждого элемента есть начальный вид, CSS его меняет. Отступы в коде (четыре пробела перед <h1>) нужны только человеку — на результат они не влияют.

Главная страница каталога называется index.html. Веб-сервер отдаёт её, когда в адресе указан только каталог: nevabit.ru/html-css-basics/ — это файл html-css-basics/index.html.
04

Пробелы и переносы строк

Браузер схлопывает любую последовательность пробелов, табуляций и переводов строк в один пробел. Поэтому в коде абзац можно разбивать на строки как удобно, а принудительный перенос делается тегом <br>:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Пробелы</title>
</head>
<body>
    <p>Слова      разделены
       многими пробелами
       и переводами строк.</p>
    <p>Перенос строки внутри абзаца —<br>только тегом br.</p>
</body>
</html>
Результат в браузере
Первый абзац выведен одной строкой с одиночными пробелами между словами; во втором абзаце перенос после тире

<br> — для переноса внутри одного абзаца: строки адреса, стихи. Отступ между частями текста делают не пустыми <br><br>, а новым абзацем <p> и CSS.

05

Комментарии

Текст между <!-- и --> браузер не показывает. Комментарии оставляют для себя и коллег или временно «выключают» кусок разметки:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Комментарии</title>
</head>
<body>
    <!-- Шапка: заменить на логотип, когда он будет готов -->
    <h1>Кафе «Нева»</h1>
    <p>Открыто ежедневно с 9:00 до 22:00.</p>
    <!-- <p>Скидка 10 % до конца месяца</p> -->
</body>
</html>
Результат в браузере
На странице только заголовок «Кафе «Нева»» и строка о часах работы, закомментированного абзаца о скидке нет
Комментарии не видны на странице, но приходят в браузер вместе с HTML: любой посетитель прочитает их через «Просмотр кода страницы». Пароли, внутренние адреса и заметки «для своих» в комментарии не пишут.
06

Редактор и инструменты разработчика

Для вёрстки подойдёт любой редактор кода. В курсе — VS Code: он подсвечивает теги, сам закрывает их, а набор ! и Tab в пустом файле .html вставляет скелет документа. Расширение Live Server открывает страницу через небольшой локальный сервер и обновляет её при каждом сохранении файла.

В любом браузере есть инструменты разработчика — F12 или Ctrl+Shift+I (в Яндекс Браузере, Chrome, Firefox одинаково). Главное на старте:

Что смотреть в инструментах разработчика

  • Elements (Элементы) — дерево DOM, как его понял браузер. Ошибка с незакрытым тегом из раздела 02 видна здесь сразу: strong оказался внутри трёх абзацев.
  • Styles — какие правила CSS применились к выбранному элементу и какие перекрыты. Значения можно менять прямо там и сразу видеть результат (до перезагрузки).
  • Выбор элемента — кнопка со стрелкой в левом верхнем углу панели или Ctrl+Shift+C: щёлкните по элементу на странице, и он выделится в дереве.
  • Режим устройства — Ctrl+Shift+M: страница в размере телефона (модуль 08).

Ctrl+U показывает исходный HTML, каким его прислал сервер. Откройте так любой сайт — это лучший способ увидеть, как сделаны чужие страницы.

07

Проверка разметки

Браузер прощает ошибки, валидатор — нет. Сервис validator.w3.org/nu проверяет HTML по стандарту: загрузите файл (вкладка «Validate by File Upload») или вставьте код (вкладка «Validate by Direct Input»). Сообщения — на английском, с номером строки и столбца. Для файла nested.html из раздела 02:

Error: End tag “p” seen, but there were open elements.        (строка 9)
Error: Unclosed element “strong”.                             (строка 9)
Error: Element “p” not allowed as child of element “strong” in this context.   (строка 10)

Исправлять начинают с первой ошибки: остальные часто — её следствия. Здесь все три исчезнут, если закрыть </strong> перед </p>.

Частые ошибки начинающих

  • Тег не закрыт или закрыт не в том порядке.
  • Нет <!DOCTYPE html>, lang или <meta charset>.
  • У картинки нет атрибута alt.
  • Один и тот же id у двух элементов (модуль 04).
  • Блочный элемент внутри строчного: абзац внутри ссылки на <span> и подобное.

Ключевые выводы модуля

Запомните главное

  • HTML — содержание и структура, CSS — внешний вид, JavaScript — поведение
  • Элемент = открывающий тег + содержимое + закрывающий тег; атрибуты — в открывающем теге
  • Скелет: <!DOCTYPE html>, <html lang="ru">, в head — charset, viewport, title; видимое — в body
  • Пробелы и переводы строк в коде схлопываются; перенос — <br>, новый абзац — <p>
  • Браузер молча чинит ошибки разметки — проверяйте валидатором и в инструментах разработчика (F12)
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Все модули Модуль 02: Текст, ссылки, изображения