Допустимы ли самозакрывающиеся входные теги в HTML 4?

Согласно http://www.w3.org/TR/html401/interact/forms.html, элемент ввода должен заканчиваться одним > и не />, Хотя большинство браузеров могут обрабатывать элемент ввода, который заканчивается />такой элемент ввода действителен в соответствии с правилами синтаксиса HTML? Другими словами, такие элементы, как <input ... /> а также <br /> действителен в HTML 4?

(Этот вопрос касается HTML, а не XHTML!!!)

3 ответа

Решение

Синтаксис действителен в некоторых местах, но не означает то же самое, что и в XHTML, поэтому не используйте их.

В HTML 4 <foo /> (где foo - имя элемента, определенного как EMPTY) означает то же самое, что и <foo>> что означает так же, как <foo>&gt; (хотя браузер Emacs-W3 почти не поддерживал синтаксис правильно, но нарушал совместимость со стандартом в пользу правильной визуализации так называемых HTML-совместимых документов XHTML 1.0).

Поэтому это действительно в местах, где вы можете иметь &gt; например, везде, где вам разрешено <img> но не в других местах (таких как <hr> это дочерний элемент <body> (в строгом)).

Взаимодействие с правилами для необязательных начальных и конечных тегов добавляет больше сложностей. В переходном документе это действительно:

<link …/>
<h1>Hello, world</h1>

и означает:

<link>
</head>
<body>
&gt;
<h1>Hello, world</h1>

Этот сокращенный синтаксис может быть полезен или, по крайней мере, экономит время для таких вещей, как:

<title/The quick brown fox/

вместо более многословного:

<title>The quick brown fox</title>

… Но синтаксис никогда не был хорошо поддержан, и в спецификации сказано, что его следует избегать.

На самом деле решено... в соответствии с валидатором W3C HTML 4, лучше не использовать этот стиль написания имен элементов в HTML 4:

NET-enabling start-tag requires SHORTTAG YES
<br />
The sequence <FOO /> can be interpreted in at least two different ways, 
depending on the DOCTYPE of the document. For HTML 4.01 Strict, the '/' terminates 
the tag <FOO (with an implied '>'). However, since many browsers don't interpret it 
this way, even in the presence of an HTML 4.01 Strict DOCTYPE, it is best to avoid 
it completely in pure HTML documents and reserve its use solely for those written in XHTML.

Из Руководства по совместимости HTML:

Включить пробел перед трейлингом / а также > пустых элементов, например <br />, <hr /> а также <img src="karen.jpg" alt="Karen" />, Кроме того, используйте минимизированный синтаксис тега для пустых элементов, например <br />в качестве альтернативного синтаксиса <br></br> Разрешенный XML дает неопределенные результаты во многих существующих пользовательских агентах.

Другие вопросы по тегам