Ответ 1
Это немного сложнее, чем просто проверка DTD как дано Yi Jiang и mu слишком короткая.
Верно, что DTD XHTML 1.0 явно запрещают элементы <a>
как дочерние элементы <button>
, как указано в вашем вопросе. Однако он не запрещает элементы <a>
как потомки элементов <button>
.
So
<button>
normal text
<b>bold text</b>
<span><a href="http://www.example.com/">linked text</a></span>
</button>
- XHTML 1.0 Строгое DTD-совместимое. Но он имеет ту же поведенческую разницу между Firefox и Chrome как фрагмент кнопки в вопросе.
Теперь известно, что DTD имеют проблемы с описанием ограничений отношений потомков, поэтому, может быть, не удивительно, что приведенный выше пример соответствует DTD.
Следующие элементы имеют запреты на какие элементы они может содержать (см. Исключения SGML). Этот запрет распространяется на все глубины от гнездования, т.е. содержит все потолочных элементов.
кнопка
не должен содержать вход, выбор, текстовое поле, метку, кнопку, форму, fieldset, iframe или isindex.
Обратите внимание, что он не содержит исключения для элемента <a>
. Таким образом, кажется, что XHTML 1.0 не запрещает элементу <a>
быть не-дочерним потомком <button>
, и поведение в этом случае действительно undefined.
Это упущение - почти наверняка ошибка. Элемент <a>
должен был быть в списке элементов, запрещенных в качестве потомков кнопки в Приложении B.
HTML5 (в том числе XHTML5) гораздо более основательно по этому вопросу. В нем говорится:
4.10.8 Элемент кнопки
Модель контента: Фразинг контента, но не должно быть потокового потомка.
где интерактивный контент определяется как
Интерактивный контент - это контент, который специально предназначенный для пользователя взаимодействие.
a
audio
(если присутствует атрибутcontrols
)button
details
embed
iframe
img
(если присутствует атрибутusemap
)input
(если атрибутtype
не находится в состоянииHidden
)keygen
label
menu
(если атрибутtype
находится в состоянииtoolbar
)object
(если присутствует атрибутusemap
)select
textarea
video
(если присутствует атрибутcontrols
)
Итак, в (X) HTML5 элементу <a>
запрещено быть потомком элемента <button>
.