多个漂浮清晰,但右边的漂浮物被左边的漂浮物压低
multiple floats with clear, yet right ones are pushed down by left ones
所以我有这个代码:
html:
<div class="left">left</div>
<div class="left">left</div>
<div class="left">left</div>
<div class="right">right</div>
<div class="right">right</div>
<div class="right">right</div>
css:
.left{
float: left;
clear: left;
border: 1px solid blue;
}
.right{
float: right;
clear: right;
border: 1px solid red;
}
jsfiddle: https://jsfiddle.net/839okvsb/4/
左边的 div 是我期望的位置,但是右边的是在 div 2 之后开始而不是从顶部开始。
为什么会这样,我该如何解决?我完全不明白为什么会这样。
PS:我无法将左 div 包含在一个巨大的 div 中,我需要将那些 div 分开(因为有时 div1将是全角,有时不是)。
编辑:我不能把它们混在一起,正如你在这里看到的:https://jsfiddle.net/839okvsb/5//混合仍然不能解决问题。
edit2:我不能把它们打包成一个大的 div,因为我需要它们能够做到这一点:https://jsfiddle.net/839okvsb/8/ 当我需要的时候.
因为你不能像这样使用 float left/right 创建一个 2 "column" 布局(即使你清除它们),你需要这样的标记,否则你会得到结果显示在您的问题中,因为这就是浮点数的工作方式。
.left{
float: left;
clear: left;
border: 1px solid blue;
width: 48%;
}
.right{
float: right;
clear: right;
width: 48%;
border: 1px solid red;
}
<div class="left">left 1</div>
<div class="right">right 1</div>
<div class="left">left 2</div>
<div class="right">right 2</div>
<div class="left">left 3</div>
<div class="right">right 3</div>
或者包裹你的花车
.left{
float: left;
clear: left;
width: 48%;
}
.right{
float: right;
clear: right;
width: 48%;
}
.left .left{
border: 1px solid blue;
width: 100%;
}
.right .right{
width: 100%;
border: 1px solid red;
}
<div class="left">
<div class="left">left 1</div>
<div class="left">left 2</div>
<div class="left">left 3</div>
</div>
<div class="right">
<div class="right">right 1</div>
<div class="right">right 2</div>
<div class="right">right 3</div>
</div>
更新基于edit/comment
如果左右不总是左右,例如当其中一个是100%宽时,这里是另一种选择,其中所有都向左浮动
.left,
.right {
float: left;
border: 1px solid blue;
box-sizing: border-box;
width: 48%;
margin-left: 4%;
}
.left:nth-child(1) {
width: 100%;
margin-left: 0;
}
.right {
margin-left: 0;
}
.right{
border: 1px solid red;
}
<div class="left">left 1</div>
<div class="right">right 1</div>
<div class="left">left 2</div>
<div class="right">right 2</div>
<div class="left">left 3</div>
<div class="right">right 3</div>
所以我有这个代码:
html:
<div class="left">left</div>
<div class="left">left</div>
<div class="left">left</div>
<div class="right">right</div>
<div class="right">right</div>
<div class="right">right</div>
css:
.left{
float: left;
clear: left;
border: 1px solid blue;
}
.right{
float: right;
clear: right;
border: 1px solid red;
}
jsfiddle: https://jsfiddle.net/839okvsb/4/
左边的 div 是我期望的位置,但是右边的是在 div 2 之后开始而不是从顶部开始。
为什么会这样,我该如何解决?我完全不明白为什么会这样。
PS:我无法将左 div 包含在一个巨大的 div 中,我需要将那些 div 分开(因为有时 div1将是全角,有时不是)。
编辑:我不能把它们混在一起,正如你在这里看到的:https://jsfiddle.net/839okvsb/5//混合仍然不能解决问题。
edit2:我不能把它们打包成一个大的 div,因为我需要它们能够做到这一点:https://jsfiddle.net/839okvsb/8/ 当我需要的时候.
因为你不能像这样使用 float left/right 创建一个 2 "column" 布局(即使你清除它们),你需要这样的标记,否则你会得到结果显示在您的问题中,因为这就是浮点数的工作方式。
.left{
float: left;
clear: left;
border: 1px solid blue;
width: 48%;
}
.right{
float: right;
clear: right;
width: 48%;
border: 1px solid red;
}
<div class="left">left 1</div>
<div class="right">right 1</div>
<div class="left">left 2</div>
<div class="right">right 2</div>
<div class="left">left 3</div>
<div class="right">right 3</div>
或者包裹你的花车
.left{
float: left;
clear: left;
width: 48%;
}
.right{
float: right;
clear: right;
width: 48%;
}
.left .left{
border: 1px solid blue;
width: 100%;
}
.right .right{
width: 100%;
border: 1px solid red;
}
<div class="left">
<div class="left">left 1</div>
<div class="left">left 2</div>
<div class="left">left 3</div>
</div>
<div class="right">
<div class="right">right 1</div>
<div class="right">right 2</div>
<div class="right">right 3</div>
</div>
更新基于edit/comment
如果左右不总是左右,例如当其中一个是100%宽时,这里是另一种选择,其中所有都向左浮动
.left,
.right {
float: left;
border: 1px solid blue;
box-sizing: border-box;
width: 48%;
margin-left: 4%;
}
.left:nth-child(1) {
width: 100%;
margin-left: 0;
}
.right {
margin-left: 0;
}
.right{
border: 1px solid red;
}
<div class="left">left 1</div>
<div class="right">right 1</div>
<div class="left">left 2</div>
<div class="right">right 2</div>
<div class="left">left 3</div>
<div class="right">right 3</div>