Язык разметки гипертекста (HTML) довольно старый.

Наша жизнь стала немыслима без Всемирной паутины. HTML — один из краеугольных камней Интернета.

HTML — относительно простой язык. Он состоит из набора элементов (тегов), которые используются для структурирования содержимого и указания веб-браузерам отображать документы.

Первоначально HTML активно использовался для стилей. Известные примеры тегов, которые служат подсказками для стиля:

  • ‹marquee› (на заре Интернета веб-сайт не был веб-сайтом без бегущей строки)

Хотя тег ‹font› все еще можно найти на 6,5 миллионах веб-сайтов, не рекомендуется использовать HTML для внешнего вида. Каскадные таблицы стилей (CSS) — это язык для оформления HTML-элементов. CSS существует уже с конца 1990-х годов.

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

Начало

Тим Бернерс-Ли и Роберт Кайо работали в 1980-х годах в Европейской организации ядерных исследований (ЦЕРН). Они разработали гипертекстовую систему до www. Целью этой системы было облегчить обмен и обновление информации между исследователями. Уже в 1960-х годах армия США разработала интернет.

Это была гениальная идея объединить эти две технологии: Интернет и гипертекст.

Мне просто нужно было взять идею гипертекста и соединить ее с идеями TCP и DNS и — та-да! - Всемирная паутина. (Тим Бернерс-Ли)

В 1980-х Бернерс-Ли и Кайо разработали первый веб-браузер, HTTP-протокол и первый веб-сервер (на NeXTcube). В 1991 году был запущен первый веб-сайт: http://info.cern.ch/hypertext/WWW/TheProject.html

Можно утверждать, что изобретение WWW сравнимо с изобретением книгопечатания. Половина населения мира находится в сети. Это оказывает огромное влияние на нашу жизнь - как положительное, так и отрицательное.

1991: Тим Бернерс-Ли опубликовал первую неофициальную версию HTML.

1993: опубликован HTML 1.0.

Этот начальный этап в истории HTML можно охарактеризовать как базовый обмен информацией через веб-браузеры. В то время HTML состоял из 18 тегов. Для сравнения, сейчас у него более 140 тегов. Веб-разработчиков было не так много.

Известные теги этой первой версии HTML (v1.2):

  • заголовок ‹h1›, ‹h2›, … для упорядочения содержимого путем добавления заголовков и подзаголовков в верхнюю часть разделов страницы
  • абзац ‹p› для обозначения абзацев текста
  • привязка ‹a› для ссылки на другой веб-контент
  • список ‹ul›, ‹ol› для организации элементов в список
  • изображение ‹img› для встраивания изображений в веб-страницу

1990-е

1995: опубликован HTML 2.0.

Эта версия содержала несколько дополнительных функций.

1997: опубликован HTML 3.2.

Эта версия содержала множество улучшений. HTML3 содержал новые функции, такие как:

  • таблица (изменяемый размер)
  • форма
  • апплет (небольшие Java-программы, которые дают более динамичный опыт статичному веб-контенту)
  • обтекание изображения текстом
  • фон изображения
  • суб(супер)скрипт

Движущей силой этого большого улучшения был Дэйв Рэггетт. По его мнению, веб-страницы должны больше походить на (глянцевые) журнальные статьи, а не на (скучные) страницы учебников. Raggett сыграл важную роль в развитии веб-технологий. Помимо HTML, он работал над: например, HTTP, XHTML, VRML и Web of Things. В 1993–1998 годах он работал над веб-браузером Arena. Это был частный проект. В наши дни трудно понять, что в то время крупные компьютерные корпорации не верили в WWW.

Хотя HTML3 и веб-браузер Arena были очень инновационными, они не стали успешными с точки зрения использования. Арена была частным проектом. Усовершенствования HTML3 были слишком масштабными, чтобы их могли быстро внедрить производители браузеров. Это наблюдение привело к более модульному подходу к разработке HTML в последующие годы.

2000-е

1999: опубликован HTML 4.01.

HTML 4.01 был очень успешным и наиболее часто используемой версией в 2000-х годах. В 2000 году XHTML был опубликован. XHTML — это HTML с более строгими правилами.

В HTML 4.01 были введены важные новые элементы:

  • ‹table› для организации данных в строки и столбцы (уже в HTML3?)
  • ‹style› для добавления CSS и определения стиля HTML-элементов.
  • ‹скрипт›, чтобы добавить JavaScript и сделать (статические) веб-страницы более интерактивными

Внедряя CSS, можно провести разделение между определением семантической структуры документа и тем, как эти элементы представляются пользователю и визуализируются.

Появление JavaScript, языка программирования для Интернета, дало почти безграничные возможности для улучшения взаимодействия с пользователем.

2010-е

2008: черновик HTML5, подготовленный Рабочей группой по технологиям веб-гипертекстовых приложений (WHATWG).

2014: официальный стандарт консорциума World Wide Web (W3C)

HTML5 — это расширение очень популярной версии HTML 4.01. Слоган HTML5: давайте делать вещи лучше! Можно выделить три аспекта:

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

Известным примером является числовой тип ввода ‹input type="number"›:

Ввод числа удобен для пользователя. Например, невозможно ввести нечисловое значение. На разных устройствах ведет себя одинаково. И больше не нужно писать код JavaScript для самостоятельной реализации функций ввода чисел. Это веб-компонент, который инкапсулирует JavaScript и стили.

HTML5 предлагает больше.

  1. Аудио и видео
  • плагины больше не нужны
  • функции воспроизведения
  • доступность

В минималистичном фрагменте кода ниже элементы ‹video› и ‹canvas› используются для подключения к камере устройства и отрисовки снимка изображения:

<video id="my-video" autoplay></video>

<button onclick="getCurrentFrame()">Take Snapshot</button>

<canvas id="my-canvas" width="640" height="480"></canvas>

<script>
    const video = document.getElementById('my-video');
    const canvasContext = document.getElementById('my-canvas').getContext('2d');

    if (!navigator.getUserMedia) {
        console.log("getUserMedia not supported by your browser");
    }

    navigator.getUserMedia(
        {
            video: true,
            audio: false
        },
        (stream) => video.srcObject = stream,
        (error) => console.log(error)
    );

    function getCurrentFrame() {
        canvasContext.drawImage(video, 0, 0)
    }
</script>

2. Множество новых семантических тегов

Примеры:

  • ‹заголовок›
  • ‹нижний колонтитул›
  • ‹навигация›

Семантические теги придают смысл и структуру страницам. Это важно для:

  • программы для чтения с экрана, поисковые роботы и плагины
  • поисковые системы и поисковая оптимизация (SEO)
  • стиль (CSS)

CSS должен быть максимально основан на осмысленных HTML-элементах, а не на атрибутах class и id элементов ‹div›. Новые семантические теги HTML5 помогают избежать разделения:

(веб-дизайн, обычно уничижительный) Практика написания кода веб-страницы с большим количеством элементов div вместо значимых семантических элементов HTML. (Википедия)

3. Повышение производительности

Примеры улучшения производительности:

  • асинхронная загрузка JavaScript: ‹script async›
  • предварительная загрузка видео: ‹предварительная загрузка видео›

4. Офлайн-поддержка

Функции автономной поддержки: AppCache, сервис-воркеры и локальное хранилище.

В течение 2010-х годов между WHATWG и W3C велась дискуссия об управлении версиями HTML. W3C хотел использовать этапный подход. WHATWG хотела использовать живой документ. Преимущество последнего заключается в том, что поставщики браузеров могут легче адаптироваться к итеративным обновлениям (см. проблемы реализации HTML3). Недостатки заключаются в том, что сложнее обеспечить поддержку и может быть проблемой выяснить, какие функции стали доступны в определенный момент времени.

С 2019 года WHATWG является авторитетом стандарта HTML и DOM. Спецификация HTML — это живой документ. Смотрите https://whatwg.org/

HTML6

В настоящее время люди говорят о HTML6. Учитывая тот факт, что HTML развивается путем итеративных обновлений, говорить о версии 6 проблематично. Новые функции частично являются продолжением уже пройденного пути, например, нативные компоненты и расширение семантических тегов, а частично новые идеи, как экспресс-теги и пространства имен. Сайт html6test.com измеряет, насколько хорошо ваш браузер поддерживает HTML6. Это говорит о том, что существует набор функций, которые считаются HTML6.

Давайте посмотрим на эти совершенно новые функции.

Больше семантических тегов

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

Меню

<menu type="toolbar">
  <li><button>Apples</button></li>
  <li><button>Pears</button></li>
  <li><button>Oranges</button></li>
</menu>

Список определений

<dl>
  <dt>Firefox</dt>
  <dd>
    A free, open source, cross-platform, graphical web browser developed by the
    Mozilla Corporation and hundreds of volunteers.
  </dd>

  <dt>Chrome</dt>
  <dd>Another web browser</dd>
</dl>

Фигура

<figure>
  <figcaption>Johan Cruijff</figcaption>
  <blockquote>
    Als ik zou willen dat je het begreep, zou ik het beter hebben uitgelegd.
  </blockquote>
</figure>

<figure>
  <img src="favicon.ico">
  <figcaption>Star</figcaption>
</figure>

<figure>
  <pre>
      ___________________________
    < I'm an expert in my field. >
      ___________________________
          \   ^__^
           \  (oo)\_______
              (__)\       )\/\
                  ||----w |
                  ||     ||
  </pre>
</figure>

Код

<p>The <code>push()</code> method adds one or more elements to
  the end of an array and returns the new length of the array.</p>

Определение

<p>A <dfn id="def-validator">validator</dfn> is a program that
  checks for syntax errors in code or documents.</p>

Время

<p>The concert starts at <time datetime="2018-07-07T20:00:00">20:00</time>.</p>

Этот элемент представляет временную метку в машиночитаемом формате.

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

Микроформаты — это способ добавления разметки к документам. Это позволяет программному обеспечению (парсерам) извлекать информацию и индексировать, искать или обрабатывать ее иным образом. Как и семантические теги, микроформаты добавляют в документы метаинформацию. См. https://microformats.org/

В Интернете можно найти заметки о новой предстоящей функции HTML: так называемых экспресс-тегах. Идея в том, что автор может создавать свои собственные теги. Это уменьшит использование ‹div› и, следовательно, добавит семантическую структуру. Примерами таких тегов DIY могут быть:

  • ‹логотип› вместо ‹div id="логотип"›
  • ‹панель инструментов› вместо ‹div id="панель инструментов"›
  • ‹контейнер› вместо ‹div id="контейнер"›

Это предполагает пространства имен, как в XML:

  • ‹html:название›
  • ‹html:a›
  • ‹html:тело›
  • и т. д.

Больше нативных компонентов

В контексте улучшения, которое началось с HTML5 в 2010-х годах, было создано больше новых богатых компонентов. Эти HTML-элементы втянули (в теневой DOM) код JavaScript и CSS, который в противном случае разработчикам пришлось бы писать самим. Давайте посмотрим на некоторые примеры. Эти фрагменты кода максимально минималистичны. Удивительно видеть функциональность, которую эти элементы предлагают из коробки!

Подробности

<details id="foo">
  <summary>Presenting with IntelliJ IDEA</summary>
  To enable mouse zoom, you need to turn it on explicitly.
  Go to Preferences > Editor > General and select Change font size with
  Command+Mouse Wheel (on Mac)
</details>

<button onclick="toggleDetails()">Toggle</button>

<script>
  function toggleDetails() {
    const el = document.getElementById('foo');
    el.open = !el.open;
  }
</script>

Список данных (автозаполнение)

<input list="browsers">

<datalist id="browsers">
  <option value="Chrome">
  <option value="Edge">
  <option value="Firefox">
  <option value="Safari">
</datalist>

Список данных, подключенный к средству выбора даты и времени:

<input type="date" list="dates">

<datalist id="dates">
  <option value="2023-06-01">
  <option value="2023-06-02">
  <option value="2023-06-03">
</datalist>

<input type="time" list="hours">

<datalist id="hours">
  <option value="12:00">
  <option value="13:00">
  <option value="14:00">
  <option value="15:00">
</datalist>

Список данных, подключенный к ползунку диапазона:

<input type="range" list="percentages" min="0" max="100">

<datalist id="percentages">
  <option value="0"></option>
  <option value="25"></option>
  <option value="50"></option>
  <option value="75"></option>
  <option value="100"></option>
</datalist>

Список данных, подключенный к палитре цветов:

<input type="color" list="redColors">

<datalist id="redColors">
  <option value="#800000"></option>
  <option value="#8B0000"></option>
  <option value="#A52A2A"></option>
  <option value="#DC143C"></option>
</datalist>

Диалог

<dialog id="foo">
  <p>Is this a HTML-powered dialog box?</p>
  <form method="dialog">
    <input type="submit" value="Yes">
    <input type="submit" value="No">
  </form>
</dialog>

<button onclick="openDialog()">Open dialog</button>

<button onclick="showDialogValue()">Show value</button>

<script>
  openDialog = () => document.getElementById('foo').open = true;

  showDialogValue = () => window.alert(`Dialog value: ${document.getElementById('foo').returnValue}`)
</script>

метр

<meter
  id="fuel"
  min="0" max="100"
  low="33" high="66" optimum="80"
  value="100"
>
</meter>

<script>
  const el = document.getElementById('fuel');
  const intervalId = setInterval(() => {
    el.value -= 1;
    if (el.value === 100) {
      clearInterval(intervalId);
    }
  }, 100);
</script>

Индикатор

<progress id="foo" value="0" max="100"></progress>

<script>
  const el = document.getElementById('foo');
  const intervalId = setInterval(() => {
    el.value += 1;
    if (el.value === 100) {
      clearInterval(intervalId);
    }
  }, 100);
</script>

Слухи

Помимо этой продолжающейся работы над семантическими тегами и нативными компонентами, есть еще много улучшений. Например: тег ‹picture› с его детальным управлением рендерингом изображений, тег ‹output› и новый атрибут «скрытый». Кроме того, некоторые блоги в Интернете описывают новые функции, статус которых мне неясен:

  • Подключаемые языки. Например, ‹script type="text/python"›. Почему следует использовать Python вместо JavaScript?
  • Гарантированные библиотеки. Библиотеки, предоставляемые веб-браузерами.
  • Усиленная аутентификация.
  • Встроенная камера. В HTML пока нет встроенного компонента камера. Интересная статья об использовании элемента ‹input› без JavaScript: https://jakub-kozak.medium.com/how-to-open-the-native-camera-in-mobile-browsers-327820fa669a.

Краткое содержание

Современная жизнь очень сильно зависит от доступа в Интернет. HTML относится к технической основе Интернета. Это старый язык, но очень важный и очень живой. Он используется миллионами авторов и постоянно развивается и совершенствуется.