DIV официально разрешён внутри DL
- Опубликовано:
В стандарт HTML («живую» WHATWG-версию) недавно внесено долгожданное изменение, благодаря которому непосредственными дочерними элементами элемента DL теперь могут быть не только DT и DD, но и DIV, между которыми (как и между DT и DD) могут также располагаться SCRIPT и TEMPLATE.
При этом, судя по спецификации, дочерними элементами одного и того же DL не могут быть одновременно DT/DD и DIV. Иными словами, соседними элементами DT/DD и DIV по-прежнему быть не могут, т. е. такой код теперь разрешён:
<dl>
<div>
<dt>Lorem</dt>
<dd>Ipsum</dd>
</div>
<div>
<dt>Dolor</dt>
<dd>Amet</dd>
</div>
</dl>
а такой — нет:
<dl>
<dt>Lorem</dt>
<dd>Ipsum</dd>
<div>
<dt>Dolor</dt>
<dd>Amet</dd>
</div>
</dl>
В официальном HTML-валидаторе W3C данное изменение WHATWG-версии спецификации HTML пока не учитывается, но уже учитывается в экспериментальном валидаторе HTML5.org.
Предыстория
Ранее применение стилей к отдельно взятой группе элементов DT/DD как единому целому было невозможно, и приходилось либо жертвовать семантикой, вместо одного списка DL используя несколько следующих друг за другом и семантически не связанных элементов DL, каждый из которых содержал собственную группу DT/DD, либо вместо списка DL использовать список UL, каждый элемент которого содержал отдельный элемент DL, содержащий ровно одну группу DT/DD, что несколько загромождало HTML-код.
Запросы от веб-разработчиков на добавление возможности группировки элементов DT/DD в течение многих лет отклонялись, а представители рабочих групп HTML и CSS настаивали на том, что задачу лучше решить на уровне CSS и HTML соответственно.
HTML
Редактор спецификации HTML Ян Хиксон (Ian Hickson) заявлял, что задача группировки элементов с целью применения стилей относится не к HTML, а к CSS, и должна решаться с помощью гипотетического механизма генерации виртуальных контейнеров средствами CSS.
Аргументом технического характера были трудности, связанные с возможными неоднозначностями при разборе кода списков DL, содержащих что-либо помимо DT и DD, с учётом порочной особенности HTML, состоящей в легитимной возможности не указывать закрывающие теги некоторых элементов, в том числе DT и DD, хотя едва ли кто-то в здравом уме пользуется этой возможностью.
CSS
Представители рабочей группы CSS (CSSWG), в том числе Элика Этемад (Elika Etemad), известная как fantasai, напротив, были уверены, что целесообразнее решить вопрос средствами HTML, т. к., по их словам, псевдоэлементы трудно описать в спецификации и они слишком сложны в реализации и использовании.
Дополнительные аргументы в пользу HTML-решения состояли в том, что наличие реального обрамляющего элемента позволило бы ссылаться на него с помощью якоря (хотя на практике вполне достаточно назначить идентификатор элементу DT соответствующей группы), а также дало бы возможность легко оперировать группами DT/DD средствами DOM (хотя на самом деле возможность получения отдельной группы как массива элементов или объекта DocumentFragment можно было бы встроить в DOM без необходимости обрамления групп реальными HTML-контейнерами).
Огромным преимуществом потенциального CSS-решения была бы возможность группировать разные наборы элементов в зависимости, например, от Media Queries, что абсолютно невозможно в случае с контейнерами, явным образом фигурирующими непосредственно в HTML-коде.
На сайте CSSWG даже есть страница, предлагающая возможный синтаксис описания виртуальных контейнеров в таблицах стилей, но недавний запрос тайваньского веб-разработчика Яна Янга (Ian Yang) на превращение данного предложения в полноценный официальный стандарт был отклонён под тем предлогом, что интерес к реализации такого механизма со стороны разработчиков браузеров де-факто отсутствует. Автору этих строк в контексте такой аргументации почему-то вспоминается книга Алана Купера «Психбольница в руках пациентов».
Сдвиг
Остаётся порадоваться, что наконец произошёл сдвиг со своего рода мёртвой точки — хотя бы в HTML и хотя бы в отношении элементов DL/DT/DD.
Теперь появляется надежда на то, что контейнеры общего назначения DIV и SPAN когда-нибудь станут действительно семантически прозрачными и их можно будет помещать в иерархию между любыми элементами, которые связаны между собой семантическими отношениями «родитель — дочерний элемент», в том числе:
FIELDSETиLEGEND;FIGUREиFIGCAPTION;UL/OLиLI.