2014-09-23 5 views
0

JSBIN

HTML

<p> 
    <div>123</div> 
</p> 

CSS

p div{ 
    background:#f00; 
} 

У меня странный вопрос. Когда я кодирую структуру как следующий HTML. На самом деле, агент пользователя (браузер) разобрать код на:Почему метка P всплывает в DIV, когда содержит DIV?

<p></p><div>123</div> 

Таким образом, код КСС ineffective.you может проверить его в JSBIN .I хотят знать, что причина этого поведения, и есть ли другой похожие теги имеют такое поведение? Благодарю.

ответ

1

Это комбинация двух особенностей HTML.

Во-первых, элемент p не может содержать элемент div. Модель spec дает свою модель контента как «Фраза-контент», которая не включает в себя элементы div.

Во-вторых, конечный тег для элемента p не является обязательным. (См тег упущение по ссылке выше к спецификации)

<p> <!-- Start P element --> 
<div> <!-- Start DIV element. Implicitly end P element --> 
123 <!-- Add text node --> 
</div> <!-- End DIV element --> 
</p> <!-- No open P element so this is discarded by the parser --> 
+0

Но если 'a' содержит' div'. Все нормально. Я хочу знать, есть ли естественная причина для определения поведения тега или нет. Это о проекте W3C? –

+0

Две функции, описанные в ответе, верны до тех пор, пока HTML имеет абзацы и divs, это не имеет никакого отношения к статусу проекта. Якорям, разрешенным содержать элементы div, является новым для HTML 5, но конечный тег для якорей никогда не был дополнительным, поэтому браузеры выполняли восстановление ошибок таким образом, который соответствует спецификации HTML 5. – Quentin

+0

Проблема в том, что вы строите «суп-тег». Поскольку вы помещаете недопустимый элемент внутри '

', браузер угадывает, что вы не используете его как элемент блока, а вместо него - разделитель абзацев, поскольку он никогда не сталкивался с тегом'

'перед новым элемент уровня блока. Напишите действительный HTML, и все будет хорошо. Поскольку @Quentin правильно отмечает, что ваш исходный код был недействительным с того дня, как 'div' были введены в конце прошлого века. –

Смежные вопросы