Есть ли разница между <h2><a>content<a/></h2> и <a><h2>content</h2></a>
При переделывании проекта вдруг возник вопрос - А есть ли разница? Не нарушает ли это семантику?
Есть ли разница между <h2><a>content<a/></h2> и <a><h2>content</h2></a>
При переделывании проекта вдруг возник вопрос - А есть ли разница? Не нарушает ли это семантику?
Спецификация определяет какие элементы может хранить описываемый элемент в секции Content Model
Для элемента A в этой секции указано следующее:
Transparent, but there must be no interactive content or a element descendants.
Transparent, однако не должно быть интерактивных элементов, или вложенных <a>
Под интерактивными в данном случае имеются ввиду следующие:
<a> если атрибут href установлен<audio> если атрибут controls установлен<button><details><embed><iframe><img> если атрибут usemap установлен<input> если атрибут type не равен hidden<label><select><textarea><video> если атрибут controls установленComponent Model: Transparent, означает, что компонентная модель будет применена такая же как и у родительского элемента.
Следовательно если какой-то элемент не может быть в родительском элементе, то он не может быть и в элементе <a> вложенном в родительский.
Если у элемента с Transparent компонентной моделью нет родителя, то считается, что он может хранить flow content (в который входит и h2).
Из этого следует, что если ссылка находится непосредственно в теге body (например), который имеет component model: Flow Content, то запись
<a><h2>content</h2></a>
Вполне допустима, если же ссылка находится, например, внутри <p> элемента, который имеет component model: Phrasing content, то уже недопустима.
"Миллион" лет назад разница была. Сейчас можно вкладывать блочные элементы в строчные. (c) Air