109

我有一个清单,李有一个float:left;. 后面的内容<ul>应该正确对齐。因此我可以构建以下内容:

http://jsfiddle.net/8unU8/

我想,我可以<div class="clear">通过使用 :after 之类的伪选择器来删除 。

但是这个例子不起作用:

http://jsfiddle.net/EyNnk/

我是否总是必须创建一个单独的 div 来清除浮动元素?

4

5 回答 5

267

像这样写:

.wrapper:after {
    content: '';
    display: block;
    clear: both;
}

检查这个http://jsfiddle.net/EyNnk/1/

于 2012-05-22T09:33:29.637 回答
6

不,你做这样的事情还不够:

<ul class="clearfix">
  <li>one</li>
  <li>two></li>
</ul>

以及以下 CSS:

ul li {float: left;}


.clearfix:after {
  content: ".";
  display: block;
  clear: both;
  visibility: hidden;
  line-height: 0;
  height: 0;
}

.clearfix {
  display: inline-block;
}

html[xmlns] .clearfix {
   display: block;
}

* html .clearfix {
   height: 1%;
}
于 2012-05-22T09:36:07.577 回答
5

这也将起作用:

.clearfix:before,
.clearfix:after {
    content: "";
    display: table;
} 

.clearfix:after {
    clear: both;
}

/* IE 6 & 7 */
.clearfix {
    zoom: 1;
}

将类clearfix赋予元素,例如您的ul元素。

来源herehere

于 2014-01-20T07:27:52.847 回答
0

文本“dasda”永远不会不在标签内,对吧?从语义上讲,要成为有效的 HTML,只需将 clear 类添加到其中:

http://jsfiddle.net/EyNnk/2/

于 2012-05-22T09:35:16.627 回答
0

采用

.wrapper:after {
    content : '\n';
}

很像 Roko 提供的解决方案。它允许使用 :after 和 :before psuedo 插入/更改内容。有关详细信息,请查看 http://www.quirksmode.org/css/content.html

于 2012-05-22T09:49:24.917 回答