第三次div自动浮动
Third div automatically floating
我不明白 css 是如何工作的,这让我很烦。我试图在它们下面并排做一些基本的两个 div 和一个 div。
起初我了解到我必须为两个并排的 div 提供 float:left。出于好奇,我没有为第二个并排 div 给出 float:left,我遇到了这个布局:
(来源:imge.to)
然后我给了float:left第二个并排div,然后我遇到了这个布局:
(来源:imge.to)
问题:我没有给第三个 float:left div 但它不像第一个屏幕截图那样。为什么?
css代码:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
width: 1000px;
margin-left: auto;
margin-right: auto;
}
.blog-posts {
width: 50%;
background-color: #0000ff;
float: left;
}
.other-posts {
width: 25%;
background-color: #00ff00;
float: left;
}
.author-text {
background-color: #ffff00;
}
html代码:
<div class="container">
<div class="blog-posts">dend endje denjde akdlsd gsjgıdg sadsujrg spsadnajd asdnsajdd</div>
<div class="other-posts">extra dummy text</div>
<div class="author-text">author text</div>
</div>
将您想要的项目并排包装在另一个包装器中,然后将 flexbox 应用于该包装器:
.my-flex-wrap {
display: flex;
}
然后移除所有浮动。完成。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
width: 1000px;
margin-left: auto;
margin-right: auto;
}
.my-flex-wrap {
display: flex;
}
.blog-posts {
width: 50%;
background-color: #0000ff;
}
.other-posts {
width: 25%;
background-color: #00ff00;
}
.author-text {
background-color: #ffff00;
}
<div class="container">
<div class="my-flex-wrap">
<div class="blog-posts">dend endje denjde akdlsd gsjgıdg sadsujrg spsadnajd asdnsajdd</div>
<div class="other-posts">extra dummy text</div>
</div>
<div class="author-text">author text</div>
</div>
当您使用浮动时,您会破坏标记的自然 box-model
行为。
您的第一个浮动元素的宽度为 50%,相对于父元素 (1000px) 它将占用 .container
的一半。第二个(浮动的)元素将占用下一个 250px。好事来了。
第三个元素不是浮动的,也是一个 div
,因此是一个块级元素(因此隐含地它将占用其父级宽度的 100%)。如果将第一个和第二个元素的 background-color
分别设置为透明 #0000ff00
和 #00ff0000
。你会看到你的第三个元素在它们后面生长。
这就是我"breaking the box-model" 的意思。现在,为了更好地理解这一点,您可以开始为第三个元素提供一个明确的 width
。比方说:90%
,您将看到黄色背景如何从右侧自行减少。
如果您将 width
设置为 50%
它会 "jump" 向下,到第二行。它甚至比第一个元素更宽,但高度是它的两倍。换句话说,它将尝试适应第一个可用的 space.
为了避免这种情况,过去我们使用了 clearfix hack... 但是由于广泛支持 flexbox 和 css 网格,我们不必再依赖浮动了并排布局。
Float has their own use cases,不是说浮动很烂,只是不适合布局。
有关此主题的更多信息,您可以查看 CSS-Tricks 上关于浮点数的精彩文章。
我不明白 css 是如何工作的,这让我很烦。我试图在它们下面并排做一些基本的两个 div 和一个 div。 起初我了解到我必须为两个并排的 div 提供 float:left。出于好奇,我没有为第二个并排 div 给出 float:left,我遇到了这个布局:
(来源:imge.to)
然后我给了float:left第二个并排div,然后我遇到了这个布局:
(来源:imge.to)
问题:我没有给第三个 float:left div 但它不像第一个屏幕截图那样。为什么?
css代码:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
width: 1000px;
margin-left: auto;
margin-right: auto;
}
.blog-posts {
width: 50%;
background-color: #0000ff;
float: left;
}
.other-posts {
width: 25%;
background-color: #00ff00;
float: left;
}
.author-text {
background-color: #ffff00;
}
html代码:
<div class="container">
<div class="blog-posts">dend endje denjde akdlsd gsjgıdg sadsujrg spsadnajd asdnsajdd</div>
<div class="other-posts">extra dummy text</div>
<div class="author-text">author text</div>
</div>
将您想要的项目并排包装在另一个包装器中,然后将 flexbox 应用于该包装器:
.my-flex-wrap {
display: flex;
}
然后移除所有浮动。完成。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.container {
width: 1000px;
margin-left: auto;
margin-right: auto;
}
.my-flex-wrap {
display: flex;
}
.blog-posts {
width: 50%;
background-color: #0000ff;
}
.other-posts {
width: 25%;
background-color: #00ff00;
}
.author-text {
background-color: #ffff00;
}
<div class="container">
<div class="my-flex-wrap">
<div class="blog-posts">dend endje denjde akdlsd gsjgıdg sadsujrg spsadnajd asdnsajdd</div>
<div class="other-posts">extra dummy text</div>
</div>
<div class="author-text">author text</div>
</div>
当您使用浮动时,您会破坏标记的自然 box-model
行为。
您的第一个浮动元素的宽度为 50%,相对于父元素 (1000px) 它将占用 .container
的一半。第二个(浮动的)元素将占用下一个 250px。好事来了。
第三个元素不是浮动的,也是一个 div
,因此是一个块级元素(因此隐含地它将占用其父级宽度的 100%)。如果将第一个和第二个元素的 background-color
分别设置为透明 #0000ff00
和 #00ff0000
。你会看到你的第三个元素在它们后面生长。
这就是我"breaking the box-model" 的意思。现在,为了更好地理解这一点,您可以开始为第三个元素提供一个明确的 width
。比方说:90%
,您将看到黄色背景如何从右侧自行减少。
如果您将 width
设置为 50%
它会 "jump" 向下,到第二行。它甚至比第一个元素更宽,但高度是它的两倍。换句话说,它将尝试适应第一个可用的 space.
为了避免这种情况,过去我们使用了 clearfix hack... 但是由于广泛支持 flexbox 和 css 网格,我们不必再依赖浮动了并排布局。
Float has their own use cases,不是说浮动很烂,只是不适合布局。
有关此主题的更多信息,您可以查看 CSS-Tricks 上关于浮点数的精彩文章。