Это немного сложнее, чем просто проверка DTD, заданная Yi Jiang и mu слишком короткая .
Это правда, что DTD XHTML 1.0 явноЗапретите <a>
элементы как дочерние элементы <button>
элементов, как указано в вашем вопросе.Однако он не запрещает <a>
элементам как потомкам из <button>
элементов.
То есть
<button>
normal text
<b>bold text</b>
<span><a href="http://www.example.com/">linked text</a></span>
</button>
соответствует XHTML 1.0 Strict DTD.Но он имеет такое же поведенческое различие между Firefox и Chrome, что и фрагмент кнопки в вопросе.
Теперь известно, что DTD имеют проблемы с описанием ограничений на отношения потомков, поэтому, возможно, не удивительно, что приведенный выше примерDTD соответствует.
Однако. Приложение B спецификации XHTML 1.0 нормативно описывает ограничения потомков в дополнение к DTD.В нем говорится:
Следующие элементы имеют запреты на то, какие элементы они могут содержать (см. Исключения SGML).Этот запрет распространяется на все глубины вложения, т. Е. Содержит все элементы-потомки.
кнопка
не должна содержать ввод, выбор, текстовое поле, метку, кнопку, форму, набор полейэлементы iframe или isindex.
Обратите внимание, что не содержит исключение для элемента <a>
.Таким образом, кажется, что XHTML 1.0 не запрещает элементу <a>
быть не дочерним потомком <button>
, и поведение в этом случае действительно не определено.
Это упущение почти наверняка является ошибкой.Элемент <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>
.