HTML
HTML
HTML (HyperText Markup Language) — это язык разметки, которым описывают структуру и смысл документа в вебе. Файл с расширением
.html— это, по сути, обычный текст с «тегами»-метками, которые сообщают браузеру: вот это заголовок, вот это абзац, вот это ссылка, вот это картинка.
История
HTML — один из тех редких случаев, когда у технологии есть один автор и один год рождения.
1989 — идея. Тим Бернерс-Ли (Tim Berners-Lee), британский физик-программист, работал в CERN (Европейская организация по ядерным исследованиям, под Женевой). У него была банальная боль: учёные из разных стран обмениваются документами, а каждый формат — свой. Он написал служебную записку «Information Management: A Proposal» — там предложил универсальный способ ссылаться из одного документа на другой. Босс на записке вывел резолюцию «vague but exciting» («туманно, но любопытно») — и разрешил поэкспериментировать.
1990 — первая реализация. Бернерс-Ли в одиночку, на компьютере NeXT (тот самый, который Стив Джобс продавал после ухода из Apple), пишет:
- первый веб-сервер (
CERN httpd), - первый браузер (
WorldWideWeb, потом переименован вNexus, чтобы не путать с самим вебом), - первый протокол передачи (HTTP/0.9),
- и первый язык разметки — HTML.
Тегов в той версии было около двух десятков: <title>, <h1>–<h6>, <p>, <a>, <ul>, <li>, <dl> и ещё пара. Никаких картинок, форм, таблиц.
1991 — публикация. В августе Бернерс-Ли публикует первый общедоступный документ с описанием HTML на телеконференции alt.hypertext. Эту дату многие считают «днём рождения веба».
1993 — Mosaic и тег <img>. Студент Иллинойского университета Марк Андриссен (Marc Andreessen) пишет браузер Mosaic, и они с командой добавляют революционный тег <img> — теперь в страницы можно вставлять картинки. Веб моментально перестаёт быть текстовым гетто для физиков и становится массовым.
1995 — HTML 2.0 (RFC 1866). Первая попытка стандартизации. Появляются формы (<form>, <input>), таблицы. Стандартом занимается IETF — та же организация, что делает RFC для интернет-протоколов.
1997 — HTML 3.2 и HTML 4.0. Стандарт переходит в W3C (World Wide Web Consortium) — консорциум, который Бернерс-Ли основал в 1994 году специально для веб-стандартов. Появляются скрипты (<script>), стили (<style>), фреймы.
1999 — HTML 4.01. Долгожителем оказался: эта версия была актуальной почти десять лет.
2000–2007 — XHTML. Попытка переписать HTML по правилам XML — строже, требовательнее (каждый тег надо закрывать, всё в нижнем регистре, и т. п.). Веб-разработчики дружно сказали «нет, спасибо», и XHTML 2.0 тихо умер.
2004 — основание WHATWG. Группа инженеров из Mozilla, Apple и Opera, недовольная медлительностью W3C, организует свою рабочую группу — WHATWG (Web Hypertext Application Technology Working Group). Они начинают пилить новый HTML параллельно официальному.
2014 — HTML5. Официальная рекомендация W3C. Появляются <video>, <audio>, <canvas>, семантические теги (<header>, <nav>, <article>, <footer>), формы с типами (<input type="email">, type="date"), <svg> прямо в разметке.
2019 — HTML Living Standard. W3C и WHATWG договариваются: единый стандарт ведёт WHATWG, и теперь у HTML нет «версий». Это живой стандарт — обновляется постоянно, иногда несколько раз в неделю. Поэтому говорить «HTML 6» уже неправильно: после HTML5 версий нет.
HTML устарел концептуально, но не на практике
Все попытки заменить HTML более «правильным» форматом провалились (XHTML, XML-based UI-форматы, всякие Flash и Silverlight). Веб победил именно потому, что HTML прощает ошибки: незакрытый тег, опечатка в атрибуте — браузер всё равно покажет страницу. Это раздражает педантов, но работает 35 лет подряд.
Что это такое
В физическом смысле HTML — это обычный текстовый файл. Если открыть его в блокноте, ты увидишь что-то такое:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Привет</title>
</head>
<body>
<h1>Заголовок страницы</h1>
<p>Это первый абзац.</p>
<p>А вот <a href="https://example.com">ссылка наружу</a>.</p>
</body>
</html>
Всё, что в угловых скобках <...>, — это теги. Они работают парами: открывающий и закрывающий (<p>...</p>). Текст между ними — содержимое, к которому тег приписывает смысл.
Ключевые понятия:
- Элемент — пара тегов и всё между ними.
<p>Привет</p>— это элементp(paragraph, абзац). - Атрибут — параметр внутри открывающего тега.
<a href="...">— у элементаa(anchor, ссылка) есть атрибутhref. - Семантика — смысл, который тег навешивает на содержимое.
<h1>и<div>могут выглядеть одинаково, но первый говорит «это главный заголовок», а второй — «это просто блок».
Чем HTML отличается от похожих штук:
HTML vs Markdown. Markdown (формат, в котором написан этот файл) — тоже разметка, но проще. В Markdown # Заголовок превращается в <h1>Заголовок</h1>. То есть Markdown в итоге всегда компилируется в HTML — браузеры понимают только HTML. Markdown — это «удобная запись для людей», HTML — «универсальная запись для машин».
HTML vs XML. XML (eXtensible Markup Language) — старший родственник, тоже из тегов в угловых скобках. Но XML строгий: незакрытый тег — ошибка, парсер откажется работать. HTML прощает почти всё. Ещё разница: XML не определяет, что значит каждый тег — там можно изобретать свои. В HTML набор тегов фиксированный и каждому приписан смысл.
HTML vs JSON. JSON — это формат данных (ключ → значение), HTML — формат документа (структура с вложенностью и смыслом каждого блока). На JSON неудобно описывать абзац с курсивом внутри ссылки; HTML для этого и придуман.
Аналогии из жизни
Аналогия 1: разметка в книге. Представь рукопись, которую автор отдаёт редактору. Редактор красным карандашом помечает: «это глава», «это эпиграф», «это сноска», «это курсив». HTML — те же пометки, только машиночитаемые. Браузер берёт текст с пометками и «верстает» книгу по правилам.
Где ломается: в книге пометки временные — финальная типография уберёт их и оставит только результат. В HTML пометки навсегда: браузер каждый раз заново «верстает» страницу из исходника, разметка остаётся.
Аналогия 2: чертёж дома. Архитектор рисует план: тут стена, тут окно, тут дверь. Прораб смотрит и строит. HTML — это план, браузер — прораб, экран — построенный дом.
Где ломается: у настоящего чертежа есть точные размеры — «окно 120 × 80 см». В HTML размеры обычно НЕ указывают — это работа CSS (соседний язык про стили). HTML говорит «здесь окно», CSS — «оно вот такого размера и такого цвета». Чертёж совмещает оба этих языка, а в вебе их специально разделили.
Аналогия 3: партитура. Композитор пишет партитуру: вот ноты для скрипки, вот для виолончели. Оркестр играет. HTML — партитура веб-страницы, браузер — оркестр.
Где ломается: партитуру играют один раз, а HTML «играется» каждый раз, когда кто-то открывает страницу — и каждый «оркестр» (Chrome, Safari, Firefox) играет немного по-своему. Поэтому одна страница может выглядеть в разных браузерах слегка иначе, и это нормально.
Как это работает
Когда ты вводишь в браузере адрес и жмёшь Enter, происходит примерно следующее:
- DNS-запрос. Браузер узнаёт IP-адрес сервера (см. предыдущие статьи про HTTPS).
- HTTP-запрос. Браузер просит у сервера: «отдай мне страницу по такому-то пути».
- Сервер отвечает. В теле ответа лежит тот самый HTML-файл — просто длинная строка с тегами.
- Парсинг. Браузер читает файл и строит из него DOM (Document Object Model) — дерево объектов. Каждый тег становится узлом дерева. Заголовок — родитель, абзацы внутри — дети.
- Подгрузка ресурсов. Если в HTML есть
<link rel="stylesheet" href="styles.css">,<script src="app.js">или<img src="logo.png">— браузер делает отдельные запросы за каждым файлом. Иногда десятки запросов на одну страницу. - Применение стилей. CSS-файл объясняет, как должен выглядеть каждый элемент: цвет, размер, расположение.
- Выполнение скриптов. JavaScript может менять DOM на лету: добавлять элементы, удалять, реагировать на клики.
- Рендеринг. Браузер рисует итоговую картинку на экране.
Псевдосхема:
твой клик
↓
браузер: GET /страница
↓
сервер: <html>...</html>
↓
DOM-дерево ← парсер HTML
↓
+ стили (CSS)
+ поведение (JS)
↓
рендер на экран
Важная штука: HTML — декларативный язык. Ты не пишешь «нарисуй прямоугольник 200 пикселей в высоту, в нём текст с отступом 12». Ты пишешь «это абзац», а как его отрисовать — решают браузер и CSS вместе. В этом сила: тот же HTML можно открыть в браузере на айфоне, на десктопе, в screen reader для слепых, на умных часах — каждый отрендерит по-своему.
И ещё: HTML по своей природе forgiving (прощающий). В строгих языках одна ошибка — и программа не запустится. В HTML можно не закрыть тег, не поставить кавычки вокруг атрибута, написать заглавными — браузер всё равно попытается отрендерить. Внутри браузера сидит сложнейший алгоритм восстановления после ошибок, описанный прямо в стандарте. Этот «парсер с самовосстановлением» — одна из причин, почему написать новый браузер с нуля почти невозможно.
Кэш браузера держит старый HTML
Один из самых частых граблей: ты выкатил новую версию страницы, обновил index.html, а пользователи продолжают видеть старую. Причина — браузер кэширует HTML на минуты или часы и не идёт за новой версией. Решение называется cache-busting: к именам подгружаемых файлов (CSS, JS, картинки) добавляют параметр ?v=20260527c, и при изменении версии браузер видит новую ссылку и перезагружает файл. На сам HTML это не действует — поэтому для HTML обычно настраивают короткий TTL в заголовках ответа, или просят пользователя сделать Cmd+Shift+R (жёсткая перезагрузка без кэша).
Где встречается в обычной жизни
- Ты сейчас читаешь HTML. Эта статья на блоге —
built/html/index.html. Браузер открыл файл и отрендерил, что ты видишь. - Письма в Gmail и Яндекс.Почте. То, что выглядит как красивое письмо с картинками, — это HTML-письмо. Поэтому одно и то же письмо может выглядеть по-разному в разных почтовых клиентах: каждый рендерит HTML своими правилами.
- PDF-документ из браузера. Когда жмёшь «сохранить страницу как PDF» — браузер берёт DOM и «печатает» его в PDF. По сути PDF — это снимок отрендеренного HTML.
- Электронные книги (ePub). Внутри
.epubфайла лежит ZIP-архив с… HTML-файлами. Читалка просто открывает их и показывает. - Уведомления в приложениях. Многие мобильные приложения внутри — на самом деле «обёртка» вокруг HTML-страниц (технология WebView). Telegram, ВКонтакте, мессенджеры банков часто используют HTML для встроенных страниц.
Где встречается в IT и бизнесе
- Сайты. Очевидно: каждый сайт — это HTML + CSS + JS. От лендингов до огромных порталов.
- Веб-приложения (SaaS). Битрикс24, амоCRM, Notion, Figma в браузере — это всё в основе своей HTML, который JavaScript на лету перестраивает.
- Email-маркетинг. Рассылки в Unisender, Mailchimp — это HTML-шаблоны с переменными. Письмо персонализируется на сервере и уходит каждому подписчику.
- Отчёты и дашборды. Многие BI-системы экспортируют HTML — он удобнее PDF: можно отправить ссылку, и человек откроет в браузере без скачивания.
- Документация. Sphinx, MkDocs, Hugo, Jekyll — все генераторы статических сайтов превращают Markdown в HTML и кладут в папку.
Кто пользуется
Все, кто пользуется интернетом. Если конкретнее — по разным оценкам, в мире сейчас примерно 1,1 миллиарда сайтов (точно никто не считает; цифру даёт Internet Live Stats). Из них активных — где-то 200 миллионов. Все они в основе своей — HTML.
Масштаб инженерии: команда Chrome в Google, по разным оценкам, насчитывает несколько тысяч человек. Только парсер HTML и движок рендеринга (Blink) — это, по слухам, миллионы строк кода на C++. Аналогичные движки: WebKit (Apple) — основа Safari, Gecko (Mozilla) — основа Firefox.
Поверх HTML работают огромные индустрии:
- Веб-разработка как профессия — десятки миллионов программистов в мире.
- SEO (поисковая оптимизация) — целая отрасль, которая занимается тем, как правильно разметить HTML, чтобы Google понял страницу и показал её выше в выдаче.
- Веб-аналитика (Яндекс.Метрика, Google Analytics) — встраивают
<script>в HTML и собирают данные о посетителях.
Альтернативы и конкуренты
PDF. Плюс: выглядит одинаково везде, на любом устройстве. Минус: фиксированный размер страницы, текст не подстраивается под экран телефона, нельзя интерактив.
Native-приложения (iOS, Android). Плюс: быстрее, доступ к камере/GPS/уведомлениям, кастомный UI. Минус: надо писать отдельную версию под каждую платформу, обновления через магазин, дорого в разработке.
Flutter / React Native. Плюс: один код — несколько платформ. Минус: всё равно нужно собирать приложение, нельзя просто отправить ссылку.
Email (plain text). Плюс: гарантированно дойдёт и прочитается. Минус: ни картинок, ни форматирования, ни кнопок.
XML / SVG. Плюс: строгий формат, удобный для машинного парсинга. Минус: SVG — про векторную графику, не про документы; XML — про данные, не про человекочитаемое.
Когда НЕ стоит использовать
- Когда нужна высокая производительность на CPU/GPU. Игры, тяжёлая 3D-графика, обработка видео — это не для HTML. Браузер просто не справится. Для этого делают нативные приложения или используют WebGL/WebGPU как «дырку» из HTML наружу.
- Когда документ должен выглядеть пиксель-в-пиксель одинаково везде. Если ты делаешь договор, который и в Москве, и в Лондоне должен распечататься абсолютно одинаково — это PDF. HTML по сути «адаптивен», и это плохо для таких задач.
- Когда нужен офлайн-режим без всяких компромиссов. Хотя есть Service Workers и PWA (Progressive Web Apps), нативное приложение всё равно работает офлайн надёжнее.
Связанные понятия
- DOM (Document Object Model) — дерево объектов в памяти браузера, в которое превращается HTML после парсинга.
- CSS (Cascading Style Sheets) — язык описания стилей; отдельный файл, который говорит HTML-элементам, как выглядеть.
- JavaScript — язык программирования в браузере; меняет DOM и реагирует на действия пользователя.
- Семантическая разметка — практика выбирать теги по смыслу (
<article>,<nav>,<aside>), а не по виду. Важно для SEO и доступности (screen reader понимает, что есть что). - Доступность (a11y, accessibility) — практика делать HTML, который понимают не только зрячие, но и слабовидящие через специальные программы.
- Web Components — современный механизм создавать свои кастомные HTML-теги (
<my-button>), которые работают как встроенные.
Литература и источники
- Tim Berners-Lee, James Hendler, Ora Lassila. The Semantic Web (2001, en) — программная статья отца веба о том, куда HTML должен эволюционировать. Не сбылось как описано, но идея семантической разметки оттуда.
- Mark Pilgrim. HTML5: Up and Running (2010, en, O'Reilly) — каноническое введение в HTML5. Бесплатно доступно в архиве diveinto.html5doctor.com.
- MDN Web Docs (developer.mozilla.org/ru/docs/Web/HTML) — справочник от Mozilla, фактический источник истины по HTML. На русский переведена большая часть.
- HTML Living Standard (html.spec.whatwg.org) — официальный стандарт WHATWG. Читается тяжело, но это первоисточник.
- Wikipedia: HTML (en.wikipedia.org/wiki/HTML и ru.wikipedia.org/wiki/HTML) — хорошее общее введение с историческими подробностями.
- A Brief History of HTML — статья на www.w3.org/People/Raggett/book4/ch02.html от Дэйва Рэггета (Dave Raggett), одного из соавторов ранних версий HTML. Старая, но первоисточник.
Где встретилось у меня
Вчера в одном из проектов (рабочий сайт компании на nm2.duckdns.org) пришлось разбираться с кэшем браузера: задеплоенная новая версия не отображалась, пока не вставили cache-busting ?v=... ко всем ссылкам на CSS и JS из HTML. Параллельно копался в шаблонах квизового сервиса — там HTML-шаблоны на сервере подставляют тексты из базы и отдают браузеру.
Краткое резюме
- HTML — язык разметки, в котором текст обёрнут в теги, говорящие браузеру «вот заголовок», «вот ссылка», «вот картинка».
- Изобретён Тимом Бернерсом-Ли в 1989–1991 в CERN, развивался через стандарты W3C, сейчас живёт как «Living Standard» под WHATWG — без версий.
- Декларативный и forgiving: ошибки прощает, рендер адаптируется под устройство — поэтому одна страница работает на телефоне, мониторе и в screen reader.
- Внутри браузера HTML превращается в DOM-дерево, к которому потом применяются CSS-стили и JavaScript-логика.
- Главные грабли — кэш браузера: для CSS/JS лечится cache-busting, для самого HTML — короткими TTL или жёсткой перезагрузкой страницы.