HTML Flashcards
Что такое HTML и как он работает?
HTML (HyperText Markup Language) — это язык разметки гипертекста, стандартный язык для создания веб-страниц. Он используется для структурирования содержимого веб-страницы, определения его смысла и взаимосвязей между различными частями. HTML не является языком программирования; это язык разметки.
Как работает HTML:
-
Теги (Tags): HTML-документ состоит из тегов. Тег — это ключевое слово, заключенное в угловые скобки (
<
и>
). Большинство тегов имеют открывающий и закрывающий тег. Закрывающий тег имеет косую черту (/
) перед именем тега.
```html
<p>Это абзац текста.</p>```
В этом примере<p>
— открывающий тег абзаца,</p>
— закрывающий тег абзаца, а “Это абзац текста.” — содержимое абзаца. -
Элементы (Elements): Элемент HTML — это всё, что находится между открывающим и закрывающим тегом, включая сами теги. В примере выше весь
<p>Это абзац текста.</p>
— это элемент абзаца. -
Атрибуты (Attributes): Теги могут иметь атрибуты. Атрибуты предоставляют дополнительную информацию об элементе. Атрибуты указываются в открывающем теге и имеют вид
имя="значение"
.html <a href="https://www.example.com">Ссылка на example.com</a>
В этом примере<a>
— тег ссылки,href
— атрибут, указывающий URL, на который ведет ссылка, а “https://www.example.com” — значение атрибутаhref
. “Ссылка на example.com” — текст ссылки. -
Структура HTML-документа: HTML-документ имеет определенную структуру:
```html
<!DOCTYPE html>
<html>
<head>
<meta></meta>
<meta></meta>
<title>Заголовок страницы</title>
</head>
<body>
<h1>Главный заголовок</h1>
<p>Абзац текста.</p>
<img></img>
</body>
</html>```-
<!DOCTYPE html>
: Объявление типа документа. Сообщает браузеру, что это HTML5-документ. -
<html>
: Корневой элемент HTML-документа.-
lang="ru"
: Атрибут, указывающий язык документа (в данном случае русский).
-
-
<head>
: Содержит метаданные о документе (информацию, которая не отображается на странице).-
<meta charset="UTF-8">
: Указывает кодировку документа (UTF-8). -
<meta name="viewport" ...>
: Настройки viewport для адаптивного дизайна. -
<title>
: Заголовок страницы (отображается во вкладке браузера).
-
-
<body>
: Содержит видимое содержимое страницы.-
<h1>
: Заголовок первого уровня. -
<p>
: Абзац текста. -
<img>
: Изображение.-
src
: Атрибут, указывающий путь к изображению. -
alt
: Атрибут, содержащий альтернативный текст для изображения (отображается, если изображение не загрузилось, и используется скринридерами).
-
-
-
-
Вложенность (Nesting): Элементы HTML могут быть вложены друг в друга. Это означает, что один элемент может содержать другие элементы.
```html
<div>
<p>Это абзац <em>внутри</em> div.</p>
</div>```
В этом примере элемент<p>
вложен в элемент<div>
, а элемент<em>
(курсив) вложен в элемент<p>
. - Браузер (Browser): Браузер (Chrome, Firefox, Safari, Edge и т.д.) интерпретирует HTML-код и отображает веб-страницу. Браузер читает HTML-документ сверху вниз, анализирует теги, атрибуты и содержимое и строит DOM (Document Object Model) — объектное представление документа. Затем браузер использует DOM для отображения страницы.
-
Семантика (Semantics): HTML5 ввел множество семантических тегов, которые имеют определенное значение и помогают структурировать контент более осмысленно. Примеры:
-
<header>
: Шапка сайта или раздела. -
<nav>
: Навигация по сайту. -
<main>
: Основное содержимое страницы. -
<article>
: Статья, запись в блоге, новость и т.д. -
<aside>
: Боковая панель (сайдбар). -
<footer>
: Подвал сайта. -
<section>
: Раздел документа. -
<figure>
и<figcaption>
: Изображение и подпись к нему.
-
Основные теги HTML:
-
Текстовые теги:
-
<p>
: Абзац. -
<h1>
-<h6>
: Заголовки (от<h1>
— самый важный, до<h6>
). -
<span>
: Строчный элемент (используется для выделения части текста). -
<strong>
: Важный текст (жирный). -
<em>
: Акцентированный текст (курсив). -
<br>
: Перенос строки (одиночный тег). -
<hr>
: Горизонтальная линия (одиночный тег).
-
-
Ссылки:
-
<a>
: Ссылка. Атрибутhref
указывает URL.
-
-
Изображения:
-
<img>
: Изображение. Атрибутыsrc
(путь к изображению) иalt
(альтернативный текст).
-
-
Списки:
-
<ul>
: Ненумерованный список. -
<ol>
: Нумерованный список. -
<li>
: Элемент списка.
-
-
Таблицы:
-
<table>
: Таблица. -
<tr>
: Строка таблицы. -
<th>
: Ячейка заголовка таблицы. -
<td>
: Ячейка данных таблицы.
-
-
Формы:
-
<form>
: Форма. -
<input>
: Поле ввода. -
<textarea>
: Многострочное поле ввода. -
<button>
: Кнопка. -
<select>
: Выпадающий список. -
<option>
: Элемент выпадающего списка. -
<label>
: Метка для элемента формы.
-
-
Блочные и строчные элементы:
-
Блочные (Block-level): Занимают всю доступную ширину. Начинаются с новой строки. Примеры:
<div>
,<p>
,<h1>
-<h6>
,<form>
,<ul>
,<ol>
,<li>
,<header>
,<nav>
,<main>
,<article>
,<aside>
,<footer>
,<section>
. -
Строчные (Inline): Занимают только ту ширину, которая необходима для их содержимого. Не начинаются с новой строки. Примеры:
<span>
,<a>
,<img>
,<strong>
,<em>
,<input>
,<button>
,<textarea>
,<select>
.
-
Блочные (Block-level): Занимают всю доступную ширину. Начинаются с новой строки. Примеры:
-
Контейнеры:
-
<div>
: Блочный контейнер (используется для группировки элементов). -
<span>
: Строчный контейнер.
-
Как это всё связано с веб-разработкой:
HTML — это основа любой веб-страницы. CSS (Cascading Style Sheets) используется для стилизации HTML-элементов (определения цвета, шрифтов, расположения и т.д.). JavaScript используется для добавления интерактивности (обработки событий, изменения содержимого страницы, отправки запросов на сервер и т.д.). Вместе HTML, CSS и JavaScript составляют основу фронтенд-разработки.
Пример простого сайта:
```html
<!DOCTYPE html>
<html>
<head>
<meta></meta>
<meta></meta>
<title>My Simple Website</title>
<style>
body { font-family: sans-serif; margin: 20px; } h1 { color: navy; } p { line-height: 1.5; } .highlight { background-color: yellow; }</style>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>This is a simple example of an HTML page.</p>
<p>It includes a heading, some text, and a <span>highlighted</span> word.</p>
<img></img>
<p><a>Visit Example.com</a></p>
</body>
</html>
~~~
Этот пример показывает базовую структуру HTML-документа, использование заголовков, абзацев, стилей (встроенных в тег <style>
), изображений и ссылок. Это очень простой пример, но он демонстрирует основные принципы работы HTML.
Какую роль играет семантическая разметка в HTML?
Семантическая разметка в HTML играет критически важную роль в создании доступных, поддерживаемых и SEO-оптимизированных веб-сайтов. Она заключается в использовании HTML-тегов, которые несут смысловую нагрузку, описывая назначение и тип контента, который они содержат, а не только его внешний вид.
Роли семантической разметки:
-
Улучшение доступности (Accessibility):
- Скринридеры (Screen Readers): Скринридеры — это программы, которые читают содержимое веб-страницы вслух для людей с нарушениями зрения. Семантические теги помогают скринридерам понять структуру страницы и правильно её интерпретировать. Например, скринридер может объявить: “Заголовок первого уровня: Добро пожаловать на наш сайт”, “Навигация”, “Основное содержимое”, “Подвал”. Без семантической разметки скринридеру было бы сложно определить, где находится основное содержимое, а где — навигация.
-
Навигация с клавиатуры: Пользователи, которые не могут использовать мышь, перемещаются по странице с помощью клавиатуры. Семантические теги, такие как
<nav>
,<header>
,<footer>
,<main>
,<aside>
, помогают им быстро переходить к нужным разделам страницы. - Понимание структуры: Семантические теги помогают всем пользователям, включая тех, кто использует вспомогательные технологии, лучше понимать структуру и организацию контента на странице.
-
Улучшение SEO (Search Engine Optimization):
- Поисковые роботы: Поисковые роботы (краулеры) анализируют HTML-код страницы, чтобы понять её содержание и проиндексировать её. Семантические теги помогают поисковым роботам лучше понять, о чём страница, какие части контента являются наиболее важными, и как страница связана с другими страницами.
- Ранжирование: Правильное использование семантических тегов может положительно повлиять на ранжирование страницы в результатах поиска.
- Rich Snippets (Расширенные сниппеты): Семантическая разметка (особенно микроразметка, schema.org) может помочь поисковым системам создавать расширенные сниппеты (rich snippets) в результатах поиска, которые содержат дополнительную информацию о странице (например, рейтинг, цену, автора, дату публикации).
-
Улучшение поддерживаемости и читаемости кода:
-
Разработчики: Семантический HTML-код легче читать и понимать другим разработчикам (и вам самим в будущем). Вместо множества
<div>
и<span>
вы видите чёткую структуру:<header>
,<nav>
,<main>
,<article>
,<aside>
,<footer>
. Это упрощает внесение изменений и исправление ошибок. - Совместная работа: В командной разработке семантическая разметка помогает всем членам команды понимать структуру кода и работать с ним более эффективно.
-
Разработчики: Семантический HTML-код легче читать и понимать другим разработчикам (и вам самим в будущем). Вместо множества
-
Повторное использование и переносимость:
-
Стилизация: Семантические теги упрощают стилизацию контента с помощью CSS. Вы можете использовать селекторы по тегам (
header
,nav
,article
и т.д.) вместо того, чтобы полагаться только на классы и идентификаторы. - Переносимость: Семантический HTML-код более переносим. Его легче использовать в разных контекстах (например, в мобильных приложениях, RSS-ридерах) и адаптировать к различным устройствам.
-
Стилизация: Семантические теги упрощают стилизацию контента с помощью CSS. Вы можете использовать селекторы по тегам (
Примеры семантических тегов:
-
<header>
: Шапка сайта или раздела. Обычно содержит логотип, название сайта, навигацию. -
<nav>
: Навигация по сайту. Содержит ссылки на основные разделы сайта. -
<main>
: Основное содержимое страницы. Должен быть только один<main>
на странице. -
<article>
: Независимый, самодостаточный блок контента (статья, запись в блоге, новость, комментарий). Может быть несколько<article>
на странице. -
<aside>
: Боковая панель (сайдбар). Содержит контент, который относится к основному содержимому, но не является его частью (например, реклама, ссылки на похожие статьи, облако тегов). -
<footer>
: Подвал сайта. Обычно содержит информацию об авторских правах, контактную информацию, ссылки на социальные сети. -
<section>
: Раздел документа. Используется для группировки тематически связанного контента. -
<figure>
и<figcaption>
: Изображение и подпись к нему. -
<time>
: Дата и/или время. -
<address>
: Контактная информация. -
<mark>
: Выделенный текст (например, результаты поиска). -
<details>
и<summary>
: Сворачиваемый блок контента.
Пример несемантической разметки:
```html
<div>
<div>...</div>
<div>...</div>
</div>
<div>
<div>...</div>
<div>...</div>
</div>
<div>...</div>
<div>...</div>
**Пример семантической разметки:** ```html <header> <img src="logo.png" alt="Логотип"> <nav>...</nav> </header> <main> <article>...</article> <article>...</article> </main> <aside>...</aside> <footer>...</footer>
Важно:
- Семантическая разметка не заменяет
<div>
и<span>
.<div>
и<span>
по-прежнему используются, но только тогда, когда нет более подходящего семантического тега. - Не стоит использовать семантические теги только ради того, чтобы использовать семантические теги. Тег должен соответствовать смыслу контента.
- Семантическая разметка — это не только теги HTML5. Это и правильное использование заголовков (
<h1>
-<h6>
), списков (<ul>
,<ol>
,<li>
), ссылок (<a>
), изображений (<img>
с атрибутомalt
) и других элементов HTML.
В заключение, семантическая разметка — это неотъемлемая часть современной веб-разработки. Она делает веб-сайты более доступными, удобными для поисковых систем, поддерживаемыми и переносимыми. Использование семантических тегов — это не просто хорошая практика, это необходимость для создания качественных веб-сайтов.
Чем отличаются блочные и строчные элементы?
В HTML элементы делятся на две основные категории: блочные (block-level) и строчные (inline). Это различие определяет, как элементы отображаются на странице и как они взаимодействуют друг с другом.
Блочные элементы (Block-level elements):
- Занимают всю доступную ширину: Блочный элемент всегда начинается с новой строки и занимает всю доступную ширину родительского элемента (или окна браузера, если родительского элемента нет). Даже если содержимое элемента занимает меньше места, чем доступная ширина, следующий элемент всё равно начнётся с новой строки.
-
Можно задавать ширину и высоту: Вы можете явно задавать ширину (
width
) и высоту (height
) блочных элементов с помощью CSS. -
Можно задавать отступы (margin и padding) со всех сторон: Вы можете задавать внешние (
margin
) и внутренние (padding
) отступы со всех четырёх сторон (сверху, снизу, слева, справа) блочных элементов. -
Примеры:
-
<div>
(универсальный блочный контейнер) -
<p>
(абзац) -
<h1>
-<h6>
(заголовки) -
<form>
(форма) -
<ul>
,<ol>
,<li>
(списки) -
<header>
,<nav>
,<main>
,<article>
,<aside>
,<footer>
,<section>
(семантические блочные элементы HTML5) -
<hr>
(горизонтальная линия) -
<pre>
(форматированный текст) -
<table>
(таблица) <figure>
<video>
<canvas>
<address>
<blockquote>
-
Строчные элементы (Inline elements):
- Занимают только ту ширину, которая необходима для их содержимого: Строчный элемент не начинается с новой строки и занимает только ту ширину, которая необходима для отображения его содержимого. Следующий элемент будет располагаться рядом с ним (если есть место).
-
Нельзя задавать ширину и высоту: Вы не можете явно задавать ширину (
width
) и высоту (height
) строчных элементов. Их размеры определяются их содержимым. -
Ограниченные возможности для задания отступов:
- Вы можете задавать горизонтальные внешние (
margin-left
,margin-right
) и внутренние (padding-left
,padding-right
) отступы. -
Вертикальные внешние (
margin-top
,margin-bottom
) отступы игнорируются. -
Вертикальные внутренние (
padding-top
,padding-bottom
) отступы применяются, но не влияют на расположение соседних элементов. Они могут перекрывать соседние элементы.
- Вы можете задавать горизонтальные внешние (
-
Примеры:
-
<span>
(универсальный строчный контейнер) -
<a>
(ссылка) -
<img>
(изображение) -
<strong>
(важный текст, жирный) -
<em>
(акцентированный текст, курсив) -
<br>
(перенос строки) -
<input>
(поле ввода) -
<button>
(кнопка) -
<textarea>
(многострочное поле ввода) -
<select>
(выпадающий список) -
<label>
(метка для элемента формы) -
<code>
(код) -
<kbd>
(клавиша) -
<samp>
(пример вывода) -
<var>
(переменная) -
<cite>
(цитата) -
<q>
(короткая цитата) -
<time>
(дата/время) -
<mark>
(выделенный текст) -
<small>
(мелкий текст) -
<sub>
(нижний индекс) -
<sup>
(верхний индекс)
-
Ключевые отличия (таблица):
display
property (CSS):
Свойство display
в CSS позволяет изменять поведение элементов. Вы можете сделать блочный элемент строчным и наоборот:
-
display: block;
— делает элемент блочным. -
display: inline;
— делает элемент строчным. -
display: inline-block;
— делает элемент строчно-блочным. Это гибрид:- Элемент ведёт себя как строчный (не начинается с новой строки, занимает ширину содержимого).
- Но при этом можно задавать ширину, высоту и вертикальные отступы (как у блочного элемента).
Пример:
```html
<!DOCTYPE html>
<html>
<head>
<title>Block vs Inline</title>
<style>
.block { background-color: lightblue; margin: 10px; padding: 20px; width: 200px; /* Работает */ height: 100px; /* Работает */ border: 1px solid blue; } .inline { background-color: lightgreen; margin: 10px; /* Вертикальные margin игнорируются */ padding: 20px; /* Вертикальные padding применяются, но не влияют на соседей */ width: 200px; /* Игнорируется */ height: 100px; /* Игнорируется */ border: 1px solid green; } .inline-block { background-color: lightcoral; margin: 10px; /* Работает */ padding: 20px; /* Работает */ width: 200px; /* Работает */ height: 100px; /* Работает */ border: 1px solid red; display: inline-block; /* Строчно-блочный */ }</style>
</head>
<body>
<div>Это блочный элемент (div).</div>
<p>Это блочный элемент (p).</p>
<span>Это строчный элемент (span).</span>
<a>Это строчный элемент (a).</a>
<div>Это строчно-блочный элемент (div).</div>
<span>Это строчно-блочный элемент (span).</span>
</body>
</html>
~~~
Важные замечания:
- В HTML5 некоторые теги, которые раньше были строчными, стали блочными (например,
<canvas>
,<video>
). - Внутри строчных элементов нельзя размещать блочные элементы. Это невалидный HTML. Внутри блочных элементов можно размещать как блочные, так и строчные элементы.
- Свойство
display: none;
полностью скрывает элемент (он не отображается и не занимает места на странице).
Понимание разницы между блочными и строчными элементами — это основа верстки в HTML и CSS. Это знание необходимо для правильного расположения элементов на странице и создания адаптивного дизайна.
Свойство | Блочные элементы | Строчные элементы |
| ———————- | ———————————————- | ———————————————- |
| Начало с новой строки | Да | Нет |
| Ширина | Занимают всю доступную ширину | Занимают ширину содержимого |
| Задание ширины/высоты | Можно | Нельзя |
| Вертикальные отступы | margin
и padding
работают со всех сторон | margin
сверху/снизу игнорируются, padding
сверху/снизу не влияет на соседей |
| Горизонтальные отступы | margin
и padding
работают | margin
и padding
работают |
Что такое DOCTYPE и зачем он нужен?
DOCTYPE
(Document Type Declaration, объявление типа документа) — это инструкция, которая сообщает веб-браузеру, какую версию HTML (или XML) использует документ. DOCTYPE
не является HTML-тегом; это именно инструкция. Он располагается в самом начале HTML-документа, перед тегом <html>
.
Зачем нужен DOCTYPE
:
-
Выбор режима рендеринга (Rendering Mode):
DOCTYPE
определяет, в каком режиме браузер будет отображать страницу:- Стандартный режим (Standards Mode): Браузер интерпретирует HTML и CSS в соответствии со спецификациями W3C (World Wide Web Consortium). Это желаемый режим, обеспечивающий наиболее предсказуемое и кросс-браузерное поведение.
- Режим совместимости (Quirks Mode): Браузер пытается эмулировать поведение старых браузеров (например, Internet Explorer 5). Этот режим предназначен для поддержки старых веб-сайтов, которые были написаны без учёта стандартов. В режиме совместимости могут быть ошибки в отображении и работе JavaScript.
- Почти стандартный режим (Almost Standards Mode): Промежуточный режим между стандартным и режимом совместимости.
DOCTYPE
или с неправильнымDOCTYPE
браузер может перейти в режим совместимости, что приведёт к непредсказуемому отображению страницы. -
Валидация HTML:
DOCTYPE
используется валидаторами HTML (например, W3C Markup Validation Service) для проверки соответствия кода стандартам. Валидатор используетDOCTYPE
, чтобы определить, по каким правилам проверять документ. -
Поддержка современных возможностей: Правильный
DOCTYPE
гарантирует, что браузер будет поддерживать все современные возможности HTML и CSS, определённые в спецификации.
Виды DOCTYPE
:
-
HTML5 (рекомендуется):
html <!DOCTYPE html>
Это самый простой и рекомендуемыйDOCTYPE
. Он сообщает браузеру, что документ использует HTML5. HTML5 — это текущий стандарт HTML. -
HTML 4.01:
-
Strict:
html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
ЭтотDOCTYPE
предписывает строгое соответствие стандарту HTML 4.01. Он не допускает использования устаревших элементов и атрибутов. -
Transitional:
html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
ЭтотDOCTYPE
допускает использование некоторых устаревших элементов и атрибутов. -
Frameset:
html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
ЭтотDOCTYPE
используется для документов, использующих фреймы (frames). Фреймы устарели и не рекомендуются к использованию.
-
Strict:
-
XHTML 1.0:
-
Strict:
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
Transitional:
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
Frameset:
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-
Strict:
-
XHTML 1.1:
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Ключевые моменты:
-
Всегда используйте
<!DOCTYPE html>
: Для современных веб-сайтов всегда используйте<!DOCTYPE html>
. Это самый простой и правильный способ указать, что вы используете HTML5. -
Регистр не важен:
DOCTYPE
не чувствителен к регистру.<!DOCTYPE html>
,<!doctype html>
,<!DoCtYpE hTmL>
— все эти варианты эквивалентны. -
Расположение:
DOCTYPE
должен быть первой строкой в HTML-документе, перед любыми другими тегами. -
Не HTML-тег:
DOCTYPE
— это не HTML-тег, а инструкция для браузера. - Устаревшие DOCTYPE: Не используйте устаревшие DOCTYPE (HTML 4.01, XHTML).
Влияние на CSS:
DOCTYPE
влияет не только на интерпретацию HTML, но и на работу CSS. В стандартном режиме браузеры применяют CSS в соответствии со спецификациями, а в режиме совместимости могут быть отклонения.
Пример (правильный HTML5-документ):
```html
<!DOCTYPE html>
<html>
<head>
<meta></meta>
<meta></meta>
<title>Document</title>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
~~~
В этом примере <!DOCTYPE html>
сообщает браузеру, что это HTML5-документ, и браузер должен отображать его в стандартном режиме.
В заключение, DOCTYPE
— это важная часть HTML-документа, которая сообщает браузеру, как интерпретировать код. Использование правильного DOCTYPE
(<!DOCTYPE html>
) обеспечивает кросс-браузерную совместимость, поддержку современных возможностей HTML и CSS, а также правильную работу валидаторов.
Как работают метатеги (meta charset, viewport и т. д.)?
Метатеги (meta tags) в HTML — это специальные теги, которые предоставляют метаданные о HTML-документе. Метаданные — это данные о данных; в контексте HTML метатеги описывают сам HTML-документ, но не отображаются непосредственно на веб-странице. Метатеги размещаются внутри элемента <head>
.
Основные атрибуты метатегов:
-
name
: Определяет имя метаданных (например,description
,keywords
,author
,viewport
). -
content
: Определяет значение метаданных, связанных с именем (name
). -
http-equiv
: Предоставляет HTTP-заголовок для информации/значения атрибутаcontent
. Может использоваться для эмуляции HTTP-заголовка ответа. -
charset
: Определяет кодировку символов для HTML-документа (например,UTF-8
). Этот атрибут используется в единственном метатеге<meta charset="...">
.
Рассмотрим наиболее важные и часто используемые метатеги:
-
charset
(Кодировка):```html<meta></meta>```- Назначение: Указывает кодировку символов, используемую в HTML-документе.
-
UTF-8
: Рекомендуемая кодировка. Поддерживает практически все символы всех языков мира. -
Важность:
- Правильное отображение текста: Если кодировка не указана или указана неверно, браузер может неправильно отобразить текст (вместо кириллицы могут появиться “кракозябры”).
- SEO: Поисковые системы учитывают кодировку при индексации страницы.
-
Расположение: Должен быть первым элементом внутри
<head>
и находиться в пределах первых 1024 байт документа. -
Замечание: Это единственный метатег, использующий атрибут
charset
вместоname
иcontent
.
-
viewport
(Адаптивный дизайн):```html<meta></meta>```- Назначение: Управляет тем, как страница отображается на мобильных устройствах. Без этого метатега мобильные браузеры часто отображают страницы в уменьшенном масштабе, как если бы они были предназначены для настольных компьютеров.
-
width=device-width
: Устанавливает ширину области просмотра (viewport) равной ширине экрана устройства. -
initial-scale=1.0
: Устанавливает начальный масштаб страницы равным 100%. -
Другие значения (менее распространённые):
-
minimum-scale
: Минимальный масштаб. -
maximum-scale
: Максимальный масштаб. -
user-scalable
: Разрешает или запрещает пользователю масштабировать страницу (yes/no). Не рекомендуется использоватьuser-scalable=no
, так как это ухудшает доступность.
-
- Важность: Критически важен для создания адаптивных (responsive) веб-сайтов, которые хорошо выглядят на любых устройствах.
-
description
(Описание):```html<meta></meta>```- Назначение: Предоставляет краткое описание содержимого страницы.
-
Важность:
- SEO: Описание может использоваться поисковыми системами для отображения в результатах поиска (сниппетах). Хотя описание не является прямым фактором ранжирования, оно влияет на CTR (click-through rate) — отношение числа кликов к числу показов. Хорошее описание может привлечь больше пользователей на сайт.
- Пользователи: Описание помогает пользователям понять, о чём страница, ещё до перехода на неё.
-
Рекомендации:
- Длина: Оптимальная длина — 150-160 символов. Более длинные описания могут быть обрезаны.
- Содержание: Описание должно быть точным, информативным и привлекательным. Используйте ключевые слова, но не переусердствуйте.
- Уникальность: Описание должно быть уникальным для каждой страницы сайта.
-
keywords
(Ключевые слова):```html<meta></meta>```- Назначение: Содержит список ключевых слов, относящихся к содержимому страницы.
- Важность (в настоящее время): Практически не важен. Большинство поисковых систем (включая Google) игнорируют этот метатег при ранжировании, так как он часто использовался для спама (перечисления множества нерелевантных ключевых слов).
- Рекомендации: Можно не использовать. Если используете, не перечисляйте слишком много ключевых слов.
-
author
(Автор):```html<meta></meta>```- Назначение: Указывает автора документа.
- Важность: Не влияет на SEO или отображение страницы. Может использоваться для информационных целей.
-
robots
(Управление индексацией):```html<meta></meta>```- Назначение: Управляет поведением поисковых роботов (краулеров).
-
Значения
content
:-
index
: Разрешить индексирование страницы. -
noindex
: Запретить индексирование страницы. -
follow
: Разрешить переход по ссылкам на странице. -
nofollow
: Запретить переход по ссылкам на странице. -
none
: Эквивалентноnoindex, nofollow
. -
all
: Эквивалентноindex, follow
(значение по умолчанию). -
noarchive
: Запретить поисковым системам показывать кэшированную копию страницы. -
nosnippet
: Запретить поисковым системам показывать сниппет (описание) страницы в результатах поиска. -
notranslate
: Запретить поисковым системам предлагать перевод страницы. -
noimageindex
: Запретить индексирование изображений на странице.
-
- Важность: Позволяет контролировать, какие страницы сайта будут проиндексированы поисковыми системами.
-
Замечание: Это рекомендации для поисковых роботов, а не строгие директивы. Поисковые роботы могут их игнорировать. Более надёжный способ запретить индексацию — использовать файл
robots.txt
.
-
http-equiv
(Эмуляция HTTP-заголовков):-
refresh
(Перенаправление):
```html
<meta></meta>```- Назначение: Перенаправляет пользователя на другую страницу через указанное количество секунд.
-
content
:5;url=https://www.example.com/
— перенаправление наhttps://www.example.com/
через 5 секунд. - Не рекомендуется: Лучше использовать серверные редиректы (например, 301 редирект).
-
content-type
(Тип контента и кодировка):
```html
<meta></meta>```-
Назначение: Устанавливает тип контента и кодировку документа. Эквивалентно HTTP-заголовку
Content-Type
. -
Устарело: В HTML5 рекомендуется использовать
<meta charset="UTF-8">
.
-
Назначение: Устанавливает тип контента и кодировку документа. Эквивалентно HTTP-заголовку
-
X-UA-Compatible
(Режим совместимости Internet Explorer):
```html
<meta></meta>```- Назначение: Указывает Internet Explorer использовать наиболее современный доступный режим рендеринга.
-
IE=edge
: Рекомендуемое значение. - Важность: Важен для поддержки старых версий Internet Explorer.
-
-
Open Graph (Социальные сети):```html<meta></meta><meta></meta><meta></meta><meta></meta><meta></meta>```
- Назначение: Используется социальными сетями (Facebook, Twitter, LinkedIn и др.) для отображения информации о странице при публикации ссылки на неё.
-
og:title
: Заголовок страницы. -
og:description
: Описание страницы. -
og:image
: URL изображения, которое будет отображаться в превью. -
og:url
: Канонический URL страницы. -
og:type
: Тип контента (website, article, video.movie, etc.). - Важность: Улучшает внешний вид ссылок на ваш сайт в социальных сетях и может увеличить CTR.
-
Twitter Cards (Twitter):```html<meta></meta><meta></meta><meta></meta><meta></meta><meta></meta>```
* Назначение: Аналогично Open Graph, но для Twitter.
*twitter:card
: Тип карточки (summary, summary_large_image, player, app).
*twitter:site
: Twitter-аккаунт сайта.
*twitter:title
: Заголовок.
*twitter:description
: Описание.
*twitter:image
: Изображение. -
Другие метатеги:
-
<meta name="theme-color" content="#ffffff">
: Устанавливает цвет темы для мобильных браузеров (например, цвет адресной строки в Chrome на Android). -
<meta name="application-name" content="Название приложения">
: Имя веб-приложения (для PWA). -
<meta name="generator" content="Название CMS">
: Указывает, какая CMS использовалась для создания страницы.
-
Пример:
```html
<!DOCTYPE html>
<html>
<head>
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
<title>Заголовок страницы</title>
<!-- Open Graph -->
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
<!-- Twitter Card -->
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
<meta></meta>
</head>
<body>
...
</body>
</html>
~~~
В этом примере показано использование наиболее важных метатегов: charset
, viewport
, description
, robots
, X-UA-Compatible
, Open Graph и Twitter Card.
Метатеги — это важный инструмент для управления тем, как браузеры, поисковые системы и социальные сети обрабатывают ваш веб-сайт. Правильное использование метатегов улучшает SEO, доступность, внешний вид сайта в социальных сетях и обеспечивает корректное отображение на различных устройствах.
Что такое Progressive Enhancement и Graceful Degradation?
Чем отличается <section> от <article> и <div>?
Давайте разберём отличия <div>
, <article>
и <section>
, чтобы понять, когда и какой элемент использовать.
<div>
(Division - Раздел):
-
Назначение:
<div>
— это универсальный блочный контейнер. Он не несёт никакой семантической нагрузки. Используется для группировки элементов в целях стилизации (с помощью CSS) или управления ими с помощью JavaScript.<div>
сам по себе ничего не “говорит” о содержимом, которое он в себе заключает. -
Когда использовать:
- Когда вам нужен контейнер для применения стилей (например, фон, отступы, границы) к группе элементов.
- Когда вам нужно сгруппировать элементы для манипуляций с помощью JavaScript (например, показать/скрыть группу элементов).
- Когда нет более подходящего семантического элемента.
-
Пример (плохой, без семантики):```html<div>
<div>Заголовок новости</div>
<div>Текст новости...</div>
</div>``` -
Пример (лучше, с семантикой):```html<article>
<h2>Заголовок новости</h2>
<p>Текст новости...</p>
</article>```
<article>
(Статья):
-
Назначение:
<article>
— это семантический элемент HTML5, который представляет собой независимый, самодостаточный блок контента. Это означает, что содержимое<article>
должно иметь смысл само по себе, даже если его вырвать из контекста страницы. Примеры:- Статья в блоге или журнале.
- Новость.
- Сообщение на форуме.
- Комментарий.
- Виджет (например, прогноз погоды).
-
Когда использовать:
- Когда у вас есть блок контента, который является самостоятельной единицей информации.
- Когда этот контент можно было бы перенести на другой сайт или в RSS-ленту, и он всё равно имел бы смысл.
- Когда контент имеет заголовок (обычно
<h1>
-<h6>
).
-
Вложенность:
<article>
может содержать другие<article>
(например, комментарии внутри статьи).<article>
может содержать<header>
,<footer>
,<section>
. -
Пример:```html<article>
<header>
<h1>Заголовок статьи</h1>
<p>Автор: Иван Иванов, Дата: <time>26 января 2024</time></p>
</header>
<p>Текст статьи...</p>
<section>
<h2>Подзаголовок</h2>
<p>...</p>
</section>
<footer>
<p>Теги: HTML, семантика</p>
</footer>
</article>```
<section>
(Раздел):
-
Назначение:
<section>
— это семантический элемент HTML5, который представляет собой тематический раздел документа или приложения.<section>
группирует контент, который связан общей темой. В отличие от<article>
,<section>
не является самодостаточным. -
Когда использовать:
- Когда вам нужно разделить страницу на логические разделы (например, “Введение”, “Основные положения”, “Заключение”).
- Когда у раздела есть заголовок (обычно
<h1>
-<h6>
). - Когда контент внутри раздела объединён общей темой.
-
Вложенность:
<section>
может содержать другие<section>
(например, подразделы внутри раздела).<section>
может содержать<article>
,<header>
,<footer>
. -
Пример:```html<main>
<section>
<h1>Введение</h1>
<p>...</p>
</section>
<section>
<h1>Основные положения</h1>
<article>
<h2>Первый пункт</h2>
<p>...</p>
</article>
<article>
<h2>Второй пункт</h2>
<p>...</p>
</article>
</section>
<section>
<h1>Заключение</h1>
<p>...</p>
</section>
</main>```
Ключевые отличия (таблица):
Элемент | Семантика | Самодостаточность | Пример использования
Что такое ARIA-атрибуты и зачем они нужны?
ARIA (Accessible Rich Internet Applications) атрибуты — это набор специальных атрибутов HTML, которые добавляют семантическую информацию и улучшают доступность веб-контента и веб-приложений для людей с ограниченными возможностями, использующих вспомогательные технологии (скринридеры, экранные лупы, голосовое управление и т.д.). ARIA не меняет внешний вид или поведение элементов на странице, а предоставляет дополнительную информацию для вспомогательных технологий.
Зачем нужны ARIA-атрибуты:
- Улучшение доступности динамического контента: ARIA особенно полезна для динамически изменяющегося контента (например, контента, загружаемого с помощью AJAX, виджетов, одностраничных приложений). Без ARIA вспомогательным технологиям сложно понять, что изменилось на странице и как с этим взаимодействовать.
- Дополнение семантики HTML: ARIA расширяет семантику HTML, позволяя описывать роли, состояния и свойства элементов, которые не могут быть адекватно описаны стандартными HTML-тегами.
- Создание доступных пользовательских элементов управления: ARIA позволяет создавать доступные пользовательские элементы управления (например, нестандартные слайдеры, вкладки, деревья), которые ведут себя как стандартные элементы управления, но имеют нестандартный внешний вид.
- Улучшение навигации: ARIA помогает структурировать контент и улучшать навигацию по странице с помощью вспомогательных технологий.
- Соответствие стандартам доступности: Использование ARIA является важной частью обеспечения соответствия веб-сайтов стандартам доступности, таким как WCAG (Web Content Accessibility Guidelines).
Основные типы ARIA-атрибутов:
-
Роли (Roles):
- Определяют тип элемента или его назначение.
- Примеры:
role="button"
,role="navigation"
,role="tablist"
,role="tab"
,role="alert"
,role="dialog"
,role="checkbox"
,role="slider"
,role="search"
,role="main"
,role="complementary"
,role="banner"
,role="contentinfo"
. -
role="application"
: Указывает, что область страницы является веб-приложением, а не документом. Использовать с осторожностью. -
role="none"
orrole="presentation"
: Указывает, что элемент не имеет семантической роли (используется для элементов, которые нужны только для визуального оформления). -
Важно: Не переопределяйте роли существующих HTML-элементов без необходимости (например, не используйте
role="button"
для ссылки<a>
). Используйте правильные HTML-элементы, а ARIA — для дополнения семантики.
-
Свойства (Properties):
- Описывают характеристики элемента, связанные с его ролью.
- Примеры:
aria-label
,aria-labelledby
,aria-describedby
,aria-required
,aria-hidden
,aria-disabled
,aria-expanded
,aria-selected
,aria-checked
,aria-valuemin
,aria-valuemax
,aria-valuenow
,aria-current
.
-
Состояния (States):
- Описывают текущее состояние элемента.
- Примеры:
aria-pressed
,aria-expanded
,aria-selected
,aria-checked
,aria-hidden
,aria-disabled
,aria-busy
. - Состояния часто изменяются динамически с помощью JavaScript в ответ на действия пользователя.
Рассмотрим наиболее важные ARIA-атрибуты:
-
aria-label
:- Предоставляет текстовую метку для элемента.
- Используется, когда у элемента нет видимого текстового содержимого, которое могло бы служить меткой.
- Пример:
html <button aria-label="Закрыть"> <svg>...</svg> <!-- Иконка "крестик" --> </button>
-
aria-labelledby
:- Указывает ID другого элемента (или элементов), который содержит текстовую метку для текущего элемента.
- Используется, когда метка элемента находится в другом месте на странице.
- Пример:```html<div>Настройки</div><div>
...
</div>```
-
aria-describedby
:- Указывает ID другого элемента (или элементов), который содержит описание текущего элемента.
- Используется для предоставления дополнительной информации об элементе (например, подсказки, инструкции).
- Пример:```html
<label>Пароль:</label>
<input></input><p>Пароль должен содержать не менее 8 символов, одну заглавную букву и одну цифру.</p>```
-
aria-hidden
:- Указывает, что элемент (и все его потомки) должен быть скрыт от вспомогательных технологий.
-
aria-hidden="true"
: Скрыть элемент. -
aria-hidden="false"
: Показать элемент (значение по умолчанию). -
Важно: Не путать с CSS-свойством
display: none
или атрибутомhidden
.aria-hidden
скрывает элемент только от вспомогательных технологий, но не визуально.display: none
иhidden
скрывают элемент и визуально, и от вспомогательных технологий. - Пример:```html<div>
Этот контент скрыт от скринридеров.
</div>```
-
aria-disabled
:- Указывает, что элемент отключен (неактивен).
-
aria-disabled="true"
: Элемент отключен. -
aria-disabled="false"
: Элемент включен (значение по умолчанию). -
Важно: Не путать с HTML-атрибутом
disabled
.aria-disabled
сообщает о состоянии элемента вспомогательным технологиям, но не предотвращает взаимодействие с элементом (например, клики).disabled
предотвращает взаимодействие и сообщает о состоянии. Для стандартных HTML-элементов управления (например,<button>
,<input>
) используйтеdisabled
.aria-disabled
используйте для пользовательских элементов управления. - Пример:```html<div>Нажать</div>```
-
aria-expanded
:- Указывает, раскрыт или свёрнут элемент (например, выпадающее меню, аккордеон).
-
aria-expanded="true"
: Элемент раскрыт. -
aria-expanded="false"
: Элемент свёрнут. - Пример:```html
<button>Меню</button><ul>
...
</ul>``````javascript
// JavaScript для переключения состояния
const button = document.querySelector(‘button’);
const menu = document.getElementById(‘menu’);button.addEventListener(‘click’, () => {
const expanded = button.getAttribute(‘aria-expanded’) === ‘true’;
button.setAttribute(‘aria-expanded’, !expanded);
menu.hidden = expanded;
});
```
-
aria-selected
:- Указывает, выбран ли элемент (например, вкладка в наборе вкладок, элемент списка).
-
aria-selected="true"
: Элемент выбран. -
aria-selected="false"
: Элемент не выбран. - Пример (вкладки):```html<div>
<button>Вкладка 1</button>
<button>Вкладка 2</button>
</div><div>Содержимое вкладки 1</div><div>Содержимое вкладки 2</div>```
-
aria-checked
:- Указывает, отмечен ли элемент (checkbox, radio button).
-
aria-checked="true"
: Элемент отмечен. -
aria-checked="false"
: Элемент не отмечен. -
aria-checked="mixed"
: Используется для чекбоксов, которые могут находиться в “смешанном” состоянии (например, когда отмечены только некоторые дочерние элементы). -
Важно: Для стандартных HTML-элементов
<input type="checkbox">
и<input type="radio">
используйте атрибутchecked
.aria-checked
используйте для пользовательских элементов управления.
-
aria-live
:- Указывает, что область страницы является “живой” и может динамически обновляться. Скринридеры будут отслеживать изменения в этой области и сообщать о них пользователю.
- Значения:
-
aria-live="off"
(по умолчанию): Обновления не объявляются. -
aria-live="polite"
: Объявлять об обновлениях, когда скринридер не занят. -
aria-live="assertive"
: Объявлять об обновлениях немедленно (использовать с осторожностью, так как может прервать пользователя).
-
- Пример:```html<div>
<!-- Сюда динамически добавляются сообщения -->
</div>```
-
aria-atomic
:- Используется вместе с
aria-live
. Указывает, нужно ли скринридеру объявлять всю “живую” область целиком или только изменившуюся часть. -
aria-atomic="true"
: Объявлять всю область. -
aria-atomic="false"
(по умолчанию): Объявлять только изменившуюся часть.
- Используется вместе с
-
aria-relevant
:- Используется вместе с
aria-live
. Указывает, какие типы изменений в “живой” области важны. - Значения (можно комбинировать через пробел):
-
additions
: Добавление новых узлов. -
removals
: Удаление узлов. -
text
: Изменение текстового содержимого. -
all
: Все изменения (additions removals text).
-
- Пример:```html<div>
<!-- Сюда динамически добавляются сообщения -->
</div>```
- Используется вместе с
-
aria-current
:- Указывает текущий элемент в наборе (например, текущая страница в навигации, текущий шаг в мастере).
- Значения:
page
,step
,location
,date
,time
,true
,false
. - Пример:
```html
<nav>
<ol>
<li><a>Home</a></li>
<li><a>Products</a></li>
<li><a>Shoes</a></li>
</ol>
</nav>```
Пример (пользовательский слайдер):
```html
<div>
</div>
~~~
В этом примере <div>
превращается в доступный слайдер с помощью ARIA-атрибутов.
Важные замечания:
-
Используйте HTML-семантику, где это возможно: ARIA — это дополнение к HTML, а не замена. Всегда используйте правильные HTML-элементы (например,
<button>
,<nav>
,<form>
), а ARIA — только для тех случаев, когда HTML не справляется. - Не злоупотребляйте ARIA: Избыточное использование ARIA может ухудшить доступность.
- Тестируйте с помощью вспомогательных технологий: Обязательно тестируйте свой сайт с помощью скринридеров (например, NVDA, JAWS, VoiceOver), чтобы убедиться, что он действительно доступен.
- ARIA не заменяет JavaScript: ARIA сообщает о семантике и состоянии элементов, но не обрабатывает события и не изменяет поведение элементов. Для этого нужен JavaScript.
- Валидация: Проверяйте свой HTML-код на наличие ошибок, связанных с ARIA, с помощью валидатора (например, W3C Markup Validation Service).
ARIA — мощный инструмент для создания доступных веб-сайтов и приложений. Правильное использование ARIA позволяет людям с ограниченными возможностями полноценно взаимодействовать с вашим контентом.