Есть ли тег content в HTML: устаревший тег, атрибут meta и свойство CSS

Устаревший тег <content> был точкой подстановки в Shadow DOM первой версии: в него попадало содержимое компонента, которое выбирал CSS-селектор из атрибута select. Браузеры его убрали, и теперь для них это неизвестный тег. Тег парный: закрывающий </content> нужен.

Чаще под фразой «тег content» имеют в виду другое: атрибут content у тега meta, свойство CSS content или блок с классом content. Все эти варианты собраны в таблице ниже. А вместо устаревшего тега в Shadow DOM используют slot.

HTML
<content select=".a"></content>

Тег content в HTML: что это за устаревший тег

Shadow DOM прячет часть разметки компонента от остальной страницы. Эту скрытую часть называют shadow root. Содержимое, которое автор страницы записывает внутри компонента, по замыслу должно было попасть в нужное место внутри этой скрытой части. В первой версии Shadow DOM такое место обозначал тег content, а атрибут select сообщал, какую часть содержимого показать: например, select=".a" брал только теги с классом a.

Во второй версии Shadow DOM тег content заменил slot. Выбор по селектору исчез: теперь у содержимого записывают атрибут slot, а у места подстановки name.

HTML
<content select=".a"></content>

Какие ещё бывают content: meta, CSS и блоки страницы

Слово content встречается в HTML и CSS в нескольких местах, и ни одно из них не является тегом content.

Где встречаетсяЧто этоПример
Атрибут content у metaзначение, которое идёт в паре с name, http-equiv или property<meta name="description" content="Краткое описание страницы">
meta name="viewport"настройки ширины экрана на телефоне<meta name="viewport" content="width=device-width, initial-scale=1">
meta name="robots"указания для поисковых роботов<meta name="robots" content="noindex, nofollow">
meta http-equivслужебные указания браузеру, например переадресация<meta http-equiv="refresh" content="5; url=/new/">
Свойство CSS contentтекст или картинка в псевдоэлементах ::before и ::after.note::before { content: "Важно: "; }
justify-content и align-contentсвойства CSS для выравнивания в flex и griddisplay: flex; justify-content: center;
Класс contentобычное название блока с основным содержимым, это не тег<main class="content">...</main>

Значение атрибута content у meta может быть любой строкой: описанием, списком настроек через запятую или адресом. Какая строка нужна, определяет атрибут рядом с ним: name, http-equiv или property.

Как браузер читает content в разметке

Для браузера content неизвестный тег. Его класс HTMLUnknownElement, свойства select и метода getDistributedNodes у него нет, а display по умолчанию inline. Текст внутри остаётся обычным текстом страницы. На первой версии Shadow DOM держались класс HTMLContentElement и метод createShadowRoot, их в браузере больше нет.

JavaScript
const c = document.querySelector("content");
console.log(c.constructor.name, typeof HTMLContentElement);

Пример: как браузер читает content

Результат

Кнопки меняют запись. Под ней показаны класс тега, размер и наличие старых классов браузера.

Работает ли content внутри shadow root

Нет. Если записать content в современный shadow root, содержимое компонента не покажется: сам компонент имеет высоту 0. Содержимое выводит только slot. Слот без name принимает теги без атрибута slot, слот с name принимает теги с таким же значением slot.

Пример: content и slot внутри shadow root

Результат

Кнопки меняют запись в shadow root. Высоты тегов и назначенные слоты измерены в рамке.

Какие браузеры понимали content

Тег поддерживали браузеры на движке Chromium и Firefox, но их разработчики его уже убрали. В Safari тега не было.

Пример: таблица версий

БраузерС какой версииУбран в версии
Chrome3589
Edge7989
Firefox33, только с включённым флагом59
Opera2675
Safariне былонет

Чем заменить content: тег slot

В Shadow DOM второй версии место подстановки обозначает slot. Он принимает содержимое компонента по названию: у слота записывают name, а у выводимого тега атрибут slot с тем же значением. Слот без name принимает всё, у чего нет атрибута slot.

HTML
<div id="card">
  <h3 slot="title">Заголовок</h3>
  <p>Текст карточки</p>
</div>
JavaScript
const root = document.querySelector("#card").attachShadow({ mode: "open" });
root.innerHTML = '<slot name="title"></slot><slot></slot>';

Выбрать содержимое по CSS-селектору, как это делал select, у slot нельзя: нужные теги помечают атрибутом slot заранее. Для собственных компонентов используйте такой способ, а старый content не записывайте.

Частые ошибки с тегом content

ОшибкаЧто получитсяКак исправить
<content select=".a"></content> внутри Shadow DOMСодержимое компонента не показывается, его высота равна 0Записать <slot></slot> или <slot name="..."></slot>
<slot select=".a"> по аналогии с contentАтрибут игнорируется, в слот попадает всё, у чего нет slotПометить нужные теги атрибутом slot и дать слоту такое же name
Свойство CSS content: "Важно: " на обычном элементеТекст не появляетсяЗаписать свойство на ::before или ::after
Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×