html - 使用伪元素在特定类之后添加 clear both

标签 html css

我想通过使用 ::afterclear: both 添加到特定元素,我希望它是这样的。

.name {
  width: 120px;
  float: left;
}
.value {
  width: 200px;
  float: left;
}
.clear {
  clear: both;
}
<div>
  <div class="name">Name</div>
  <div class="value">Value</div>
  <div class="clear"></div>
  <div class="name">Name</div>
  <div class="value">Value</div>
  <div class="clear"></div>
</div>

但是当我删除空的 div 并将伪元素 :after 添加到 .value 时,它并没有像我预期的那样工作。

.name {
  width: 120px;
  float: left;
}
.value {
  width: 200px;
  float: left;
}
.value:after {
  content: '';
  display: block;
  clear: both;
}
<div>
  <div class="name">Name</div>
  <div class="value">Value</div>
  <div class="name">Name</div>
  <div class="value">Value</div>
</div>

那么为什么它不起作用呢?

最佳答案

问题出在用于清除 float 的元素上。尽管 .value:after 听起来好像伪元素添加在 具有 class='value' 的元素之后,但事实并非如此实际上恰好添加在该元素之后。伪元素实际上是 .value 元素的子元素,并被添加到该元素的内容之后。因此,被它清除的 float 在元素内。

当我们使用 Dev Tools 或 Inspector 时,下面是实际看到的结构。

<div>
  <div class="name">Name</div>
  <div class="value">Value
      ::after <!-- This is where the pseudo-element is actually inserted -->
  </div>
  <div class="name">Name</div>
  <div class="value">Value</div>
</div>

.name {
  width: 120px;
  float: left;
}
.value {
  width: 200px;
  float: left;
}
.value:after {
  content: 'Some content';
  display: block;
  clear: both;
}
<div>
  <div class="name">Name</div>
  <div class="value">Value</div>
  <div class="name">Name</div>
  <div class="value">Value</div>
</div>


这种情况的解决方案是在每个 .name 元素选择器中添加 clear: both。这将使元素 float 并清除之前的 float 。

.name {
  width: 120px;
  float: left;
  clear: both;
}
.value {
  width: 200px;
  float: left;
}
<div>
  <div class="name">Name</div>
  <div class="value">Value</div>
  <div class="name">Name</div>
  <div class="value">Value</div>
</div>

关于html - 使用伪元素在特定类之后添加 clear both,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573780/

相关文章:

javascript - 在普通 javascript 中移动类为 ".something"的所有元素

html - 使用 css 创建无限循环

javascript - 想用mysql以轮播格式显示图像

html - "body * { cursor: auto; }"之后的 "body { cursor: pointer; }"不要在 Opera 中重置继承

javascript - 文本内带有 HTML 标签的打字机效果

javascript - 如何使用 jquery 模拟平滑滚动?

javascript - 动态添加的日期选择器仅将日期添加到第一个字段

html - css 方形边框,边框底部有间隙

html - 在图像上设置叠加图像

html - 如何让父 div 包裹(并收缩)它的 float 子元素?