为什么
会清除浮动?

2023-12-20

考虑以下测试用例,其中浮动元素和内联元素放置在<fieldset>与一个<div>:

.float {
  float: right;
  background-color: red;
  height: 200px;
}
<h1>With fielset</h1>
<fieldset>
  <span>Inline!</span>
  <div class="float">Float!</div>
</fieldset>
<fieldset>
  <span>Inline!</span>
  <div class="float">Float!</div>
</fieldset>

<h1>With div</h1>
<div>
  <span>Inline!</span>
  <div class="float">Float!</div>
</div>
<div>
  <span>Inline!</span>
  <div class="float">Float!</div>
</div>

渲染时,fieldset容器高 200 像素(它们清除浮动?)div容器的高度仅与内联元素一样高。造成这种行为的原因是什么?是否有解决方法可以让fieldset容器的行为就像div容器呢?


显然<fieldset>元素应该为其内容生成块格式化上下文 http://www.w3.org/TR/html5/rendering.html#the-fieldset-and-legend-elements:

The fieldset元素预计会建立一个新的块格式化上下文。

这就是浮动元素不会从其中浮动的原因。 http://www.w3.org/TR/CSS21/visuren.html#block-formatting我猜想这与字段集作为视觉形式控制组的性质有关。可能还有其他原因,但从我的角度来看,这听起来是最合理的。

似乎没有办法撤销这一点,但我不会感到惊讶;创建块格式化上下文后无法销毁它。


顺便一提,<fieldset>s don't clear浮动(除非你给他们一个clear风格以外的东西none)。当一个元素清除浮动(或者说有清除)时,它只清除在相同的格式化上下文中接触它的浮动。父元素也不会清除其子元素的浮动,但它可以为它们建立浮动的格式化上下文。这是使用<fieldset>,这也是当你设置时会发生的情况overflow除了visible在父元素上。

来自spec http://www.w3.org/TR/CSS21/visuren.html#flow-control(强调我的):

该属性指示元素框的哪一侧可以not与较早的浮动框相邻。“clear”属性不考虑元素本身或其他元素内部的浮动块格式化上下文 http://www.w3.org/TR/CSS21/visuren.html#block-formatting.

此外,正如评论中提到的,浏览器没有为该元素定义清除样式,因此默认清除样式已经是默认值none。此演示中显示了这一点,其中只有一个<fieldset>s 在浮动框被定义为具有清除属性之后出现,并且确实是清除浮动的那个。

.float {
  float: right;
  background-color: red;
  height: 200px;
}

.clear {
  clear: right;
}
<div class="float">Float!</div>
<fieldset>
  <legend>Fieldset!</legend>
</fieldset>
<fieldset class="clear">
  <legend>Clearing fieldset!</legend>
</fieldset>

演示的外部链接 http://jsfiddle.net/BoltClock/uD2C8

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么
会清除浮动? 的相关文章

  • 如何在 PHPStorm 中禁用 html 标签完成

    当我在 HTML 其他上下文中并输入时foobar然后按Tab键它会自动变成
  • 如何将表格中的td高度设置为0px?

    我有一个包含几行的 HTML 表 这是动态构建的 全部 tr 有一个 td inside If one td 里面没有 HTML 内容 我希望它是不可见的 如何才能做到这一点 并不是说里面的 HTML 是动态渲染的 我不想使用display
  • 根据复选框和数据元素隐藏/显示表格行

    我想隐藏表中的行 因为我选中了复选框并且该数据元素在表中不正确 另一个实验 我还可以使用数据元素进行排序并按下拉列表排序 查看 tr 标签 价格 名称 评级 吗 div class filter list div
  • 如何防止 CFDocument 中的内容中间发生分页?

    我使用 cfdocument 标签从 html css 动态生成 PDF 文件 有些内容块我不想跨越多个页面 经过一番搜索后 我发现根据文档支持 page break inside 样式 然而 在我的测试中 声明 page break in
  • 如何向我的网站添加 Google 搜索框?

    我正在尝试将 Google 搜索框添加到我自己的网站 我希望它搜索谷歌本身 而不是我的网站 我曾经有一些代码可以工作 但现在不再工作
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • 如何使用 Angular JS 单击时将 html 模板附加到 div/指令?

    我有这种情况
  • Chromium 嵌入式框架支持 HTML5 音频吗?

    我一直在玩 CefSharp 但似乎无法播放任何音频 我可以让音频控件出现 但它们保持冻结状态 这些是我使用的版本 Chromium 21 0 1180 0 CEF r728 CefSharp 0 12 4596 50 我先尝试了 mp3
  • 如何适应特定子元素的宽度?

    problem 我正在尝试创建一个技能表 我无法问下一个问题为什么 所以我创建了一个新帐户并询问 当前状态 我想将元素的宽度与 meter 也就是说 如何设定区块的标准 meter 子元素 在上面的 gif 中 img meter 我想要保
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 扩展位置绝对div超出溢出隐藏div

    我已经好几个月没有做过CSS了 所以我可能会错过一些简单的东西 但无论解决方案是什么 我都无法弄清楚 所以问题就在这里 这是我的代码的简化版本 div style height 100 width 200px div style margi
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 如何在php中使用preg添加html属性

    我正在寻找在 php 中编写一个脚本来扫描 html 文档并根据它找到的内容向元素添加新标记 更具体地说 我是扫描文档并为每个元素搜索CSS标记 float right left 如果找到它 它会添加align right left 基于它
  • 引导行之间的垂直间距

    所以我正在研究布局 为了 响应能力 我决定使用 Bootstrap 现在我猜网格系统有问题 我想要的结果如下 1 4 2
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐