应用“clear: Both;”是否安全到.clearfix::之前?

问题描述 投票:0回答:1
.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>

html css pseudo-element clearfix
1个回答
3
投票

::before
伪元素中使用间隙有点奇怪,因为虽然元素的内容会由于间隙而放置在浮动元素下方,但浮动元素仍会与元素重叠。

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

.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
伪元素添加间隙并不是一个明确的解决方案。 Clearfixes 是一种黑客技术,用于强制块垂直增长以包含其所有浮动内容。也就是说,clearfixes 是一种模拟块格式化上下文根的方法。这就是为什么在
::after
伪元素中应在内容之后使用间隙。

© www.soinside.com 2019 - 2024. All rights reserved.