Проблема отображения CSS, когда граница, примененная к div, растягивается вокруг других элементов - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть проблема, когда граница CSS, примененная к элементу div, растягивается вокруг промежутка. тег прямо над ним (тег span, который НЕ находится внутри тега div). Теперь у меня уже есть обходной путь для этого, который можно найти в следующем примере, но я все еще хотел бы знать, почему это происходит:

<html>
<head></head>

<body>
<span style="float: left;">(Floated Span)</span>
<div style="border: 1px solid black;">
    This is the only text which should have a border around it.
</div>
<span style="float: left;">(Floated Span)</span>
<br />

<br />
I do NOT expect the border from the div tag to stretch around the floated span, but it does.
<br />
Therefore, I would expect the floated span below the div tag to do the same, but it doesn't.
<br />
Happens in FF and IE.
<br />
<br />

<span style="float: left;">(Floated Span)</span>
<br />

<div style="border: 1px solid black;">
    This is the only text which should have a border around it.
</div>

<span style="float: left;">(Floated Span)</span>
<br />

<br />
Apparently BR tags are magical and solve the problem for whatever reason.
<br />
Works in FF and IE.
<br />

<br />
<span>(Span)</span>
<span style="float: left;">(Floated Span)</span>

<div style="border: 1px solid black;">
    This is the only text which should have a border around it.
</div>

<span style="float: left;">(Floated Span)</span>
<br />

<br />
If an unstyled span is added before the floated span, Firefox displays the content the way I expect.
<br />
However, IE still decides to stretch the border from the div tag around the floated span.
<br />

<br />
<span style="float: left;">(Floated Span)</span>    
<span>(Span)</span>

<div style="border: 1px solid black;">
    This is the only text which should have a border around it.
</div>

<span style="float: left;">(Floated Span)</span>

<br />

<br />
Switching the order of the floated span and unstyled span in the code 'fixes' the previous issue with IE.
</p>
</body>
</html>

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

См. контексты форматирования блока на w3.org.

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

0 голосов
/ 23 сентября 2011

Если вы добавите 'clear: left' к div ниже span, это решит эту проблему.

Эта проблема из-за того, что промежуток плавает, и div ничего не очищает перед рендерингом, поэтому промежуток плавает над div ниже.

0 голосов
/ 23 сентября 2011

Похоже, что это происходит, потому что span с плавающей точкой.

Это означает, что они изъяты из потока документов.

div под ними затем поднимается, и, если он прозрачный, будет выглядеть так, будто он "включает" span.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...