Я столкнулся с этой необычной Firefox-only (насколько я знаю - я проверял только на Safari и Chrome и использовал Firefox 3.6) CSS-ошибку сегодня на работе, и мне удалось воспроизвести проблему с гораздо меньшим фрагментом код, здесь:
<!DOCTYPE html>
<head>
<style>
/*
* A small snippet of some CSS resets code from html5doctor and YUI fonts and resets
* added just to make sure it's not from weird browser padding/margin. Still happens
* if this is removed though
*/
html, body, div, span, p, ul, li {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
background: transparent;
}
body {
line-height: 1;
}
li {
list-style: none;
}
body {
color: #333;
font-family: Helvetica, Arial, Verdana, Geneva, sans-serif;
line-height: 1.3;
}
/* Some clearfix code from HTML5 Boilerplate */
.clearfix:before, .clearfix:after {
content: "\0020";
display: block;
height: 0;
visibility: hidden;
}
.clearfix:after {
clear: both;
}
.clearfix {
zoom: 1;
}
</style>
</head>
<body>
<div style="padding: 20px; border: solid thin black;">Hello!</div>
<div>
<ul class="clearfix">
<li style="float: left; padding: 5px; border: solid thin black;">There</li>
<li style="float: left; padding: 5px; border: solid thin black;">should</li>
<li style="float: left; padding: 5px; border: solid thin black;">be no</li>
<li style="float: left; padding: 5px; border: solid thin black;">margin</li>
<li style="float: left; padding: 5px; border: solid thin black;">above</li>
<li style="float: left; padding: 5px; border: solid thin black;">this</li>
<li style="float: left; padding: 5px; border: solid thin black;">list</li>
</ul>
<p style="margin-top: 30px">Yet for some reason the 30px margin-top on this p applies to both this p as well as the above list</p>
</div>
</body>
</html>
Вот скриншот того, как выглядит проблема
Итак, что я обычно ожидаю, это то, что между двумя <div>
с или выше <ul>
нет поля, и, действительно, при наведении курсора на элементы в Firebug не будет отображаться окраска полей / отступов. Но по какой-то причине 30-пиксельная вершина из <p>
применяется как к <p>
, так и к содержащему <div>
. Я предполагаю, что что-то не так с clearfix (и действительно, если вы используете очистку <br/>
, эта проблема исчезнет), но мне любопытно, есть ли у кого-нибудь понимание, в чем именно заключается проблема. Спасибо!