我遇到了这个不寻常的Firefox(据我所知 - 我只针对Safari和Chrome进行了检查,并且正在使用Firefox 3.6)今天在工作中使用了CSS bug,并设法用更小的片段重现了这个问题代码,这里:
<!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>
以下是问题所在的截图[{0}}
所以我通常期望在这里发生的事情是两个<div>
之间或<ul>
之上没有边距,并且实际上是悬停在元素之上Firebug将不会显示边距/填充颜色。但由于某些原因,<p>
的30px margin-top正在应用于<p>
以及包含<div>
的{{1}}。我的猜测是,使用clearfix有些问题(事实上,如果你使用空格<br/>
,这个问题就会消失),但我很好奇是否有人能够洞察到究竟是什么问题这是。谢谢!
答案 0 :(得分:6)
这是正确的,你没有使用正确的clearfix; - )
这个应该解决这个问题:
.clearfix:before,
.clearfix:after {
content: ".";
display: block;
height: 0;
overflow: hidden;
}
.clearfix:after {clear: both;}
.clearfix {zoom: 1;}
请参阅: http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified/
答案 1 :(得分:2)
但是 - 未被提及的房间里的大象是一个Firefox浮动bug,至少影响3.6-6(已测试)。一个浮动容器样式为':after {content:“”}'(其中内容为空或任何类型或空格)将复制以下元素的margin-top!这似乎只会影响Firefox,显然是一个错误。
简单的测试用例:
<div class="container cf">
<div class="floater"></div>
</div>
<div class="next">
<p>Some content here!</p>
</div>
<style>
body { padding: 0; margin: 0; }
.cf:after { content:""; display:block; clear:both; *zoom:1; }
.container { background:gray; }
.floater { float:left; width:46%; height:200px; margin:0 10px; background:#ddd; }
.next { background: yellow; margin: 30px 0px; }
</style>
答案 2 :(得分:1)
您没有使用右侧的clearfix。使用positioniseverything's clearfix(a.k.a. pie-clearfix)通常是我对所有明确修正的解决方案:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
您可以在此处查看:http://jsfiddle.net/WVtYd/