Зачем</div> вместо? - PullRequest
       18

Зачем</div> вместо?

11 голосов
/ 30 октября 2010

Я только что понял, что:

<div class="clear"/>

после серии плавающих div вызывает хаос в макете, а

<div class="clear"></div> 

отлично работает.

Кто-нибудь может это объяснить?

Это CSS:

div.clear {
    clear:both;
}

Ответы [ 3 ]

25 голосов
/ 30 октября 2010
<div class="clear"/>

Если вы обслуживаете страницу XHTML как text/html, браузеры не читают ее, используя настоящий анализатор XML. Они используют обычный старый HTML-парсер, который не знает о самозакрывающихся тегах. Для анализатора HTML4 это просто открытый тег с какой-то странной пунктуацией. (Если бы парсеры браузера действительно использовали правила SGML, это было бы совсем другое нежелательное, но они этого не делают.)

Пока IE9 не станет широко распространенным, мы не сможем обслуживать веб-страницы общего назначения как application/xhtml+xml, что необходимо для того, чтобы браузер использовал настоящие правила синтаксического анализа XML. До этого времени, если вы пишете документы XHTML, вам нужно будет сделать ваши документы также обратно совместимыми с простым HTML, что означает всегда и только с использованием самозакрывающегося синтаксиса для элементов, объявлено, что имеет EMPTY модель контента. (img, br и т. Д.)

Существуют и другие правила относительно того, что вам нужно сделать, чтобы написать HTML-совместимый XHTML, но это самое важное. Приложение C стандарта XHTML 1.0 представляет собой список различий; это выглядит немного сложнее, но многие из точек обращаются к функциям, которые вы не хотите использовать в любом случае, а некоторые теперь не имеют значения, поскольку они говорят о том, чтобы быть древними браузерами, такими как Netscape 4. Практика помещения пробела перед /> больше не требуется для чего-либо общего, например.

12 голосов
/ 30 октября 2010

В соответствии со спецификацией HTML 4.01 , , раздел 7.5.4 , для тега <div> требуется закрывающий тег.

2 голосов
/ 01 ноября 2012
<div class="clear"/>  

Этот синтаксис недопустим в формате HTML / XHTML. Любой тег, который может содержать содержимое , не может быть самозакрывающимся (даже если в теге нет содержимого. Поэтому содержимое, содержащее теги типа div, span, p и т. д. никогда не могут быть самозакрывающимися тегами. И наоборот, теги, которые не могут содержать содержимое, например <br />, всегда должны быть самозакрывающимися.

...