gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 11:27:55 25 4
gpt4 key购买 nike

在此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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com