使用:after清除浮动元素


106

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

http://jsfiddle.net/8unU8/

我认为,可以<div class="clear">通过使用:after这样的伪选择器来删除。

但是该示例不起作用:

http://jsfiddle.net/EyNnk/

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

Answers:


261

这样写:

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

检查此http://jsfiddle.net/EyNnk/1/


这是怎么做的。但请注意我回答中有关语义的要点。
亚历克斯

2
仅提供少量信息:::after使用双冒号是针对伪元素的推荐方法。
Dennis98 '16

11
每个支持双冒号(::) CSS3语法的浏览器也仅支持(:)语法,但是IE 8仅支持单冒号,因此,现在建议仅使用单冒号以获得最佳的浏览器支持。::是缩进的新格式,用于区分伪内容和伪选择器。如果不需要IE 8支持,请随时使用双冒号。 css-tricks.com/almanac/selectors/a/after-and-before
Retroriff

我们为什么要这样写:“ content:”; display:block;” ?如果需要嵌入式包装该怎么办?
卢克,

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%;
}

5

这也将起作用:

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

.clearfix:after {
    clear: both;
}

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

将类提供clearfix元素,例如您的ul元素。

来源这里这里


1
显示:桌子可以增加额外的间距;我使用display:block代替
The Cog

0

文字“ dasda”将永远不会出现在标签中,对吗?在语义上并且要使其成为有效的HTML,只需在其中添加clear类:

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


1
这根本不是语义。1)我们总是清除父元素,如果他的孩子在上面浮动,例如,根据您的回答,如果我想为UL提供背景知识,则因为LI不清楚而不能涵盖LI的内容&2)我有一个问题,为什么您要给出清除在P之前在单独的DIV中上课。如果您只给P,它也是可行的
Sandeep,2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.