Тег dfn в HTML: как обозначить термин и где записать его определение

Тег dfn (от английского definition, «определение») отмечает термин в том месте, где его определяют: вводят и тут же объясняют. Термин - слово или словосочетание с точным значением, которое в тексте нужно объяснить, например «вьюпорт» или «брейкпоинт». Тег парный, закрывающий обязателен. Собственных атрибутов у него нет.

Какое упоминание слова отмечают тегом dfn, где в тексте записать само определение, что считается термином, если у тега есть title, как сослаться на определение через id и как собрать из таких тегов словарь на JS, - обо всём этом ниже.

HTML
<p><dfn>Вьюпорт</dfn> - видимая часть
  страницы в окне браузера.</p>

Тег dfn в HTML: что это и какое упоминание термина отмечать

Термин определяют один раз: там, где он впервые появляется и сразу объясняется. Именно это упоминание оборачивают в dfn. Повторы термина дальше по тексту остаются обычными словами. Тег означает не «здесь стоит термин», а «здесь термин определяется». Так его описывает и стандарт WHATWG: как место, где термин определяется (по-английски defining instance). Есть и справка MDN.

HTML
<p><dfn>Брейкпоинт</dfn> - ширина окна,
  при которой меняется вёрстка.</p>
<p>Задайте брейкпоинт в условии
  для стилей.</p>

В примере слово «брейкпоинт» отмечено тегом только в первом абзаце, где его объясняют. Во втором абзаце оно уже знакомо читателю, и тег не нужен. Если слово нужно только выделить, а объяснять его не требуется, подойдёт другой тег: сравнение с другими тегами ниже.

Браузер выводит dfn курсивом и больше ничего не добавляет: нет ни подчёркивания, ни подсказки, ни перехода. Смысл тега в разметке. Программа, которая читает страницу, может найти в ней все определения, а читатель видит выделенное слово в тот момент, когда его объясняют.

Определение рядом с тегом dfn: абзац, dt и dd, section

Стандарт требует, чтобы объяснение термина находилось рядом с dfn: в том же абзаце, в той же паре dt и dd или в том же разделе section. Из этих трёх предков берётся ближайший, и он считается областью определения. Браузер правило не проверяет и выводит разметку одинаково в любом случае. Но если объяснение оказалось в другом абзаце, программа, которая ищет определения, не найдёт его рядом с термином.

Самая простая область - абзац. Объяснение может стоять и после термина, и до него, важно только, чтобы оно было внутри области.

HTML
<p><dfn>Вьюпорт</dfn> - видимая часть
  страницы в окне браузера.</p>

В списке определений термин записывают в dt, а объяснение в следующем dd. Областью считается пара из них: по стандарту это группа списка определений.

HTML
<dl>
  <dt><dfn>Вьюпорт</dfn></dt>
  <dd>Видимая часть страницы в окне.</dd>
  <dt><dfn>Скролл</dfn></dt>
  <dd>Прокрутка страницы.</dd>
</dl>

Если термин - заголовок раздела, областью считается весь section вместе с абзацами под заголовком.

HTML
<section>
  <h3><dfn>Вьюпорт</dfn></h3>
  <p>Видимая часть страницы в окне.</p>
</section>

Пример: где стандарт ждёт определение

Результат

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

Атрибут title в теге dfn: что считается термином

По умолчанию термином считается текст внутри dfn. Стандарт задаёт три способа и проверяет их по порядку. Сначала смотрят на атрибут title самого dfn. Потом на title вложенного abbr, но только когда этот abbr единственный внутри, а своего текста у dfn нет. Если ничего не подошло, термином считается весь текст внутри.

HTML
<dfn>Скролл</dfn>
<dfn title="Document Object Model">DOM</dfn>
<dfn><abbr title="Document Object Model">DOM</abbr></dfn>

Первая запись - текст, вторая - title у самого dfn, третья - title у abbr. Про аббревиатуры и расшифровку в title подробно написано на странице про abbr, в разделе Тег abbr и dfn: как записать определение аббревиатуры.

В title у dfn записывают только сам термин, без объяснения: стандарт требует, чтобы там было только определяемое слово. Объяснение остаётся в тексте рядом. Значение title читатель увидит лишь при наведении мыши, на телефоне подсказки нет. Поэтому запись через title нужна не читателю, а программам, которые читают DOM и собирают термины.

Пример: что программа сочтёт термином

Результат

Четыре записи. Выберите ответ, и кадр покажет, что даёт правило стандарта: он проверяет запись тем же порядком, что описан выше.

Тег dfn с id: ссылка на определение термина

Чтобы на определение можно было сослаться, dfn получает атрибут id, а в других местах страницы записывают ссылки a с адресом вида #id. Читатель, который встретил незнакомое слово, нажимает на него и попадает к объяснению. По стандарту такая ссылка помечает ещё одно использование термина, определённого этим dfn.

HTML
<p><dfn id="viewport">Вьюпорт</dfn> - видимая
  часть страницы в окне браузера.</p>

<p>На телефоне <a href="#viewport">вьюпорт</a>
  уже, чем на компьютере.</p>

Значение id пишут латиницей, без пробелов, и оно должно быть уникальным на странице. Если два элемента получили один id, ссылка приведёт к первому из них. Ссылку записывают там, где читателю нужна подсказка, а не у каждого упоминания.

Когда читатель переходит по ссылке, у определения срабатывает псевдокласс :target. Им можно подсветить определение, чтобы его было легко найти на странице.

CSS
dfn:target {
  background: #fff2c9;
}

Пример: переход к определению

Результат

Три записи. Нажмите на слово «вьюпорт» во втором абзаце: кадр проверит, есть ли на странице элемент с таким id, и покажет результат.

Тег dfn и словарь терминов: что можно собрать скриптом

Определения, отмеченные dfn, можно собрать программой. Скрипт находит все dfn, определяет термин по правилу из предыдущего раздела и складывает термины в список. Браузер словарь сам не строит, но разметка позволяет сделать это за несколько строк JS.

JS
const terms = [...document.querySelectorAll('dfn')]
  .map(d => d.title || d.textContent);

Этот короткий вариант берёт title у dfn или его текст, а вложенный abbr не проверяет. Полное правило из стандарта есть в примере ниже.

Скрипт находит только слова, отмеченные тегом dfn. Слово, которое просто выделено курсивом, в словарь не попадёт: для программы курсив ничего не означает.

Пример: словарь из разметки

Результат

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

Стили тега dfn: курсив по умолчанию и как его изменить

В Chrome у dfn по умолчанию font-style: italic. Вес и цвет остаются такими же, как у окружающего текста, подчёркивания нет. Даже если у dfn есть title, никакого значка подсказки не появляется: этим он отличается от abbr, у которого title даёт пунктир.

Внутри курсивного окружения, например в em или i, dfn остаётся курсивным и не становится прямым. В заголовке он выводится жирным курсивом, в ссылке берёт цвет ссылки. Свойство font-style: normal убирает курсив.

Курсив у dfn совпадает с курсивом у i и em, поэтому определение термина трудно отличить от иностранного слова или акцента. Если это важно, у dfn задают свой вид в CSS.

CSS
dfn {
  font-style: normal;
  font-weight: 700;
  color: #7C6CF6;
}

Такой dfn выглядит как отдельный вид выделения, и читатель узнаёт в нём место, где термин определяется. Подсветку при переходе по ссылке через :target разобрали в разделе про id.

Тег dfn или i, em, strong, abbr, cite: как выбрать

В браузере i, em и dfn выглядят одинаково: все три выводятся курсивом. Различие в том, что сообщает тег. Ещё в таблице strong, abbr и cite: их часто путают с определением термина.

ТегЧто он сообщаетКогда выбрать
dfnЗдесь термин определяетсяПервое упоминание, объяснение в той же области
iТермин, иностранное слово или мысль, выделенные другим голосомТермин используется, но не определяется здесь; иностранное слово
emСлово читается с нажимом, от этого меняется смысл фразыНужен интонационный акцент
strongВажность, предупреждениеЧитатель не должен пропустить
abbrСокращение, расшифровка в titleАббревиатура; при её определении записывается внутри dfn
citeНазвание произведенияКнига, статья, фильм; это не термин

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

Ошибки с этим тегом связаны с тем, что его используют вместо курсива, а не для определения термина.

ОшибкаЧто происходитКак исправить
dfn на каждом упоминании: <dfn>вьюпорт</dfn> и в первом, и в пятом абзацеПрограмма насчитает несколько определений одного слова, а читатель получит курсив без объясненияОставить dfn на первом упоминании с объяснением, повторы записать обычным текстом
Объяснение в другом абзаце: <p><dfn>Вьюпорт</dfn> важен.</p>, а смысл слова написан в следующем <p>Объяснение вне области определения, программа не найдёт его рядом с терминомЗаписать объяснение в тот же абзац, пару dt и dd или раздел
Объяснение в title: <dfn title="видимая часть страницы">Вьюпорт</dfn>Термином считается значение title, и программа запишет «видимая часть страницы» вместо слова «вьюпорт»Убрать title или записать в нём только термин; объяснение оставить в тексте
Вложенный dfn: <dfn>вьюпорт <dfn>окна</dfn></dfn>Стандарт это запрещает; браузер ошибку не покажет, но программа не поймёт, какой из двух терминов определяетсяОдин dfn на один термин
dfn для названия книги: <dfn>Мастер и Маргарита</dfn>Тег сообщает, что здесь определяется термин, а это название произведенияcite
dfn без объяснения: <dfn>Брейкпоинт</dfn> используется в стилях.Тег обещает объяснение, а рядом его нетДобавить объяснение в эту же область или взять i
Пустой dfn с id: <dfn id="viewport"></dfn>Термина нет, программа получит пустую строку, а ссылка приведёт в пустое местоЗаписать термин внутрь тега
Ссылка без id: <a href="#viewport">вьюпорт</a>, а у dfn атрибута нетПереход не выполняется, страница остаётся на местеДобавить dfn атрибут id="viewport"
Ждут подчёркивание и подсказку, как у abbrdfn даёт только курсив, title подчёркивания не создаётДля расшифровки сокращения записать abbr с title внутри dfn
Категория
Поделиться в социальных сетях

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

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

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

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

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