Являются ли самозакрывающиеся входные теги действительными в HTML 4?

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

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

Ответы

Ответ 1

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

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

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

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

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

и означает:

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

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

<title/The quick brown fox/

вместо более подробного:

<title>The quick brown fox</title>

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

Ответ 2

Решено на самом деле... согласно 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.

Ответ 3

В Правила совместимости HTML:

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