Jump to content
  • 0

Странное поведение тега P


Evkaky
 Share

Question

Простейший пример:

<p id="one">
ololo
<span>SSSS</span>
<div id="ib">IB</div>
</p>

#one {
padding: 30px;
background: #deb887;
}

#ib {
display: inline-block;
border: 1px solid red;
}

http://jsfiddle.net/tQ9DM/

О ужас. Элемент <div id="ib">IB</div> почему-то "выпадает" из своего родителя <p id="one">. Если родительский тег Р заменить на div - то всё нормально будет.

Это уже ни в какие рамки. Или мир вёрстки начал сходить с ума.

Как так? Почему?

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
почему-то "выпадает" из своего родителя <p id="one">

...родителя ли? ;) Что показывает инспектор?

Как так? Почему?

Content model: Phrasing content. Внутри абзаца допустим только текст (то, что по-старому называлось «строчные элементы»). Плюс

A p element's end tag may be omitted if the p element is immediately followed by an address, article, aside, blockquote, dir, div, dl, fieldset, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, menu, nav, ol, p, pre, section, table, or ul, element...

Никогда не думайте о <p> как о контейнере — он на это не рассчитан!

  • Like 1
Link to comment
Share on other sites

  • 0

Нежданчик.

Получается, внутри тега <p> могут быть только текст и элементы, которые строчные (display: inline) по своей природе.

Т.е. нельзя сделать, допустим h1 строчным, через display: inline и засунуть его внутрь <p>.

Даже строчно-блочне элементы внутрь <p> нельзя пихать.

А есть еще такие теги-сюрпризы, которые по своей природе блочные (как и <p>) но внутри них тоже не будут отображаться другие блочные, строчно-блочные эелементы, даже если им прописать display: inline

?

Link to comment
Share on other sites

  • 0
Т.е. нельзя сделать, допустим h1 строчным, через display: inline и засунуть его внутрь <p>.

«Природа» (в смысле, Content model) элементов в общем случае никак не связана с их display. «Природа» проявляется при парсинге в DOM, а display и прочий CSS применяется к уже готовой DOM и задним числом ничего в ней изменить не может. Вообще пора отучаться оперировать «блочными» и «строчными» элементами (тем более «тегами») — в актуальной спецификации их нет. Есть структурные, текстовые, интерактивные и т.п. элементы. А блочное, строчное, строчно-блочное, табличное и т.п. — это типы отображения любых из них в CSS.

Только что проверил - могут.

Но не должны. Как и в dt с address (в каких-то старых браузерах неподобающее содержимое из них тоже вываливалось, сейчас этого не происходит, т.к. у них нет такого условия неявного закрытия, но полагаться на противоестественную DOM-структуру всё равно не стоит).

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy