css - 为什么固定宽度元素不占用 float 元素旁边的空间?

标签 css css-float fixed-width

在此CodePen<aside>元素包裹 <article>元素。

但是如果您将宽度应用于 <aside>元素(即取消注释 width: 50px; ), <aside>跳到新行,即使有足够的空间可以坐在 <article> 旁边元素。

为什么该元素不位于 float <article> 旁边什么时候有可用空间?

section {
  width: 800px;
}

article {
  float: left;
  width: 500px;
  background: #ffffcc;
}

aside {
/*   width: 50px; */
  background: #ccffcc;
}
<body>
  <section>
    <article>[[Text]]</article>
    <aside>[[Text]]</aside>
  </section>
</body>

最佳答案

制作 <article>半透明揭示了当 <aside> 的宽度时实际发生的情况。是自动的:

section {
  width: 800px;
}

article {
  float: left;
  width: 500px;
  background: #ffffcc;
  opacity: 0.5;
}

aside {
/*   width: 50px; */
  background: #ccffcc;
}
<body>
  <section>
    <article>[[Text]]</article>
    <aside>[[Text]]</aside>
  </section>
</body>

没错:<aside>元素的框水平拉伸(stretch)以填充 <section> ,忽略 float <article>共。这是 <aside> 中的文本环绕 <article> ,而不是盒子。

因此,通过给出 <aside>宽度远小于 float <article> ,实际上没有空间可以让文本位于 <article> 旁边。 !这会导致文本向下移动,因为文本总是更喜欢向下流动而不是水平溢出。这实际上导致 <aside>元素框的高度增加,当您再次创建 <article> 时可以看到这一点。半透明:

section {
  width: 800px;
}

article {
  float: left;
  width: 500px;
  background: #ffffcc;
  opacity: 0.5;
}

aside {
  width: 50px;
  background: #ccffcc;
}
<body>
  <section>
    <article>[[Text]]</article>
    <aside>[[Text]]</aside>
  </section>
</body>

那么为什么没有流入 <aside>盒子本身会因 float 而变窄或向下移动?这只是因为 float 从流中取出了一个元素。这就是 <aside> 的初始布局的原因忽略<article>总共。

那么为什么文本会环绕 float 呢?因为the entire point of floats is to have text wrap around a floating object ,就像拥有文本的意义在于人们阅读它一样。

我上面描述的所有内容都包含在section 9.5 of the spec中.

请注意,这仅适用于 <aside> 时是一个流入 block 框,不建立 block 格式化上下文。如果 float <aside>同样,显然它会位于<article>旁边。 ,这样你就有了两个花车,两个花车自然会排成一排。

如果您申请 overflow: hidden ,导致<aside>建立 block 格式化上下文,那么它确实位于 <article> 旁边,即使它不是 float 的(事实上,这可以防止文本完全围绕 float ):

section {
  width: 800px;
}

article {
  float: left;
  width: 500px;
  background: #ffffcc;
}

aside {
  width: 50px;
  background: #ccffcc;
  overflow: hidden;
}
<body>
  <section>
    <article>[[Text]]</article>
    <aside>[[Text]]</aside>
  </section>
</body>

虽然 float 本质上不会侵入其他 block 格式化上下文,但事实上overflow: hidden导致这是一个不直观的副作用,有一点 history就在它后面。

关于css - 为什么固定宽度元素不占用 float 元素旁边的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211208/

相关文章:

file - 在压缩的排序固定宽度文件中搜索

Chrome 中的 CSS 下拉菜单问题

html - 无法摆脱 Wordpress 的 css 列表样式

javascript - 如何使用 jquery 设置当前窗口大小和位置(因为 body onload 不适用于 asp.net)

jquery 可排序、 float 和清除

HTML/CSS 使表格全宽,同时使图像 float 在右侧

html - 两个表本应显示为一个用于固定标题滚动——固定列宽问题

css - 如何在 div 上应用背景透明度(对于 AJAX 加载动画)?

jquery - 复杂的CSS布局

css - 有没有一种方法可以防止在缩放页面时调整背景图像的大小?