Я даю этот ответ, потому что даже если есть хорошие, которые предлагают решение (с использованием масонства), все еще не Совершенно непонятно, почему этого нельзя добиться с помощью поплавков.
(это важно - №1).
Плавающий элемент переместится как можно дальше влево или вправо в том положении, в котором он был изначально
Так что скажите это так:
У нас есть 2 див
<div class="div5">div5</div>
<div class="div6">div6</div>
.div-blue{
width:100px;
height:100px;
background: blue;
}
.div-red{
width:50px;
height:50px;
background: red;
}
без float
они будут один под другим
Если мы float: right
div5
, div6
расположится на линии, где был div5
,
/*the lines are just for illustrate*/
Итак, если теперь мы float: left
div6
, он переместится как можно дальше влево, «в этой строке» (см. №1 выше), поэтому, если div5
изменит свою строку, div6
последует за ней.
Теперь добавим еще один div в уравнение
<div class="div4">div4</div>
<div class="div5">div5</div>
<div class="div6">div6</div>
.div-gree{
width:150px;
height:150px;
background: green;
float:right;
}
У нас есть это
Если мы установим clear: right
в div5
, мы заставим его принять строку ниже div4
и div6
будет плавать в этой новой строке вправо или влево.
Теперь давайте используем в качестве примера вопрос, который привел меня сюда из-за повторяющегося принуждения стек слева направо
Вот фрагмент для проверки:
div{
width:24%;
margin-right: 1%;
float: left;
margin-top:5px;
color: #fff;
font-size: 24px;
text-align: center;
}
.one{
background-color:red;
height: 50px;
}
.two{
background-color:green;
height:40px;
}
.three{
background-color:orange;
height:55px;
}
.four{
background-color:magenta;
height:25px;
}
.five{
background-color:black;
height:55px;
}
<div class="one">1</div>
<div class="two">2</div>
<div class="three">3</div>
<div class="four">4</div>
<div class="five">5</div>
<div class="one">1*</div>
<div class="three">2*</div>
<div class="four">3*</div>
<div class="two">4*</div>
<div class="five">5*</div>
На изображении выше вы можете увидеть, как div.5
хранится рядом с div.3
, потому что в его строке (определяемой полем строки div.4
), которая находится максимально далеко, div.1*
, div.2*
и т. Д. Также плавают слева от div.5
, но поскольку они не помещаются в эту строку, они переходят к строке ниже (определяется рамкой строки div.5
)
Теперь обратите внимание, что когда мы уменьшаем высоту div.2*
настолько, чтобы она была меньше div.4*
, как она передается до div.5*
:
Надеюсь, это поможет прояснить, почему этого нельзя достичь с помощью поплавков. Я поясняю использование float (а не inline-block) только из-за заголовка «CSS Floating Divs At Variable Heights» и потому, что сейчас ответ довольно длинный.
person
Yandy_Viera
schedule
20.08.2015