html - 将 "clear: both;"应用于 .clearfix::before 是否安全?

标签 html css layout clearfix

.clearfix::before,
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}

我认为上面的clearfix方法既简洁又安全。但是,我意识到,如果这种方法真的像我想象的那么好,它应该是最流行的clearfix方法,而实际上它并没有被广泛使用。

我的问题是:这个 clearfix 会带来什么潜在问题?

这是一个展示它如何工作的例子:

.container {
  background: silver;
}
.float {
  float: left;
}
/* Is this safe? */

.clearfix::before,
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}
<div class="container">
  <div class="float">
    outer-float
  </div>
  <div class="clearfix">
    <div class="float">
      inner-float
    </div>
    content
  </div>
</div>

最佳答案

::before 伪元素中使用 clearance 有点奇怪,因为尽管由于 clearance 元素的内容将放置在 float 下方,但 float 仍会覆盖元素。

看看添加背景后会发生什么:

.container {
  background: silver;
}
.float {
  float: left;
}
.clearfix {
  background: green;
}
.clearfix::before,
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}
<div class="container">
  <div class="float">
    outer-float
  </div>
  <div class="clearfix">
    <div class="float">
      inner-float
    </div>
    content
  </div>
</div>

通常人们想要的是元素本身的间隙,或者没有间隙。

.container {
  background: silver;
}
.float {
  float: left;
}
.clearfix {
  background: green;
  clear: both;
}
.clearfix::after {
  content: "";
  display: block;
  clear: both;
}
<div class="container">
  <div class="float">
    outer-float
  </div>
  <div class="clearfix">
    <div class="float">
      inner-float
    </div>
    content
  </div>
</div>

无论如何,请注意,向 ::before 伪元素添加间隙不是 clearfix。 Clearfixes 是一种黑客技术,用于强制 block 垂直增长以包含其所有 float 内容。也就是说,clearfixes 是一种模拟 block 格式化上下文根的方法。这就是为什么在 ::after 伪元素中的内容之后应该使用间隙。

关于html - 将 "clear: both;"应用于 .clearfix::before 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223841/

相关文章:

javascript - 当我在 php 中从数据库中检索数据并显示它时如何隐藏显示表中的密码字段

html - 在 IE6 中进行布局是否值得?

android - 在抽屉导航下方添加按钮

Android:动态获取Body Layout的大小

javascript - 如何在jquery循环中单击时一一获取值?

html - 为什么我的边距在 Chrome 中看起来与在所有其他浏览器中不同

php - 包含一个 html 页面,并在页面呈现后丢弃 css 样式

jquery - 从右到左输入字段 - Tag-it jquery UI 插件

javascript - jquery 在没有硬编码的情况下显示/隐藏 div 中的内容

html - 鼠标悬停时div闪烁