Ответ 1
<h1><a>Header</a></h1>
<h1>
- это элемент уровня блока, а <a>
- нет, это синтаксически недействительный HTML, чтобы иметь элементы уровня блока внутри встроенных элементов (по крайней мере до HTML5), каким будет другой способ.
Мне интересно, какой из следующих двух порядков семантически корректен в HTML:
1. <h1><a>Header</a></h1>
2. <a><h1>Header</h1></a>
<h1><a>Header</a></h1>
<h1>
- это элемент уровня блока, а <a>
- нет, это синтаксически недействительный HTML, чтобы иметь элементы уровня блока внутри встроенных элементов (по крайней мере до HTML5), каким будет другой способ.
Этот ответ по дублированному вопросу лучше моего: fooobar.com/questions/12048/...
Но для потомков:
Семантически, нет никакой разницы. Помните, что "семантический" просто означает "связанный со смыслом", а смысл - это что-то, что согласуется между людьми (поскольку компьютеры не имеют смысла, то есть человеческий мозг). Ни у кого нет времени, чтобы согласиться, что один из этих практически идентичных вариантов означает нечто иное, чем другое:)
Удивительно, что theyre на самом деле оба действительны, как и в текущей спецификации HTML, поскольку модель контента <a>
определяется как " transparent", то есть то же, что и его родитель.
См:
и
(Предполагается, что родитель <a>
s может иметь <h1>
в качестве своего дочернего элемента)
Однако его недействительно в предыдущих версиях HTML:
С семантической точки зрения: оба (или ни один).
(С структурной точки зрения, OTOH, перед HTML 5 якорь не может содержать заголовок, а поскольку браузеры не все поддерживают HTML 5, вы должны избегать новой формы конструкции, где это возможно )
Если вы создаете целевую ссылку, тогда <h1 id="target_name">
предпочитается <h1><a name="target_name">
.
Если вы создаете гиперссылку, то наличие наиболее важного заголовка в ссылке на страницу в другом месте несколько сомнительно с семантической точки зрения.
Я бы сказал <h1><a>
, потому что <h*>
являются блочными элементами, а <a>
является встроенным элементом, поэтому представляется более естественным поддерживать встроенный элемент внутри блока div, а не наоборот.
Заголовок должен быть первым, на мой взгляд, но я сомневаюсь, что поисковые системы действительно будут думать о том, как они вокруг, внутри H1 просто кажется мне более чистым...
Поскольку h1 напрямую не соответствует видимому объекту, оба они верны.