可变高度的CSS浮动分区

ste*_*nmc 82 html css css-float

我有无限数量的100px宽度的div,可以放入250px宽度的父级.无论高度如何,我都需要将div显示在行中,如图所示.我已经尝试过解决这个问题,但div高度似乎搞砸了.

在此输入图像描述

我非常感谢你的帮助.谢谢 :)

        <style>
            #holder{
            width:250px;
            border:1px dotted blue;
            display:inline-block;
        }
        .box{
            width:100px;
            height:150px;
            background-color:#CCC;
            float:left;
            text-align:center;
            font-size:45px;
            display:inline-block;
        }
        .one{
            background-color:#0F0;
            height:200px;
        }

        .two{
            background-color:#0FF;
        }

        .three{
            background-color:#00F;
        }

        .four{
            background-color:#FF0;
        }
    </style>

    <div id="holder">
        <div class="box one">1</div>
        <div class="box two">2</div>
        <div class="box three">3</div>
        <div class="box four">4</div>
    </div>
Run Code Online (Sandbox Code Playgroud)

这是jsfiddle

这是我用javascript https://jsfiddle.net/8o0nwft9/所做和所取得的成就

thi*_*dot 67

据我所知,没有办法用纯CSS解决这个问题(适用于所有常见的浏览器):

  • 浮点不起作用.
  • display: inline-block 不起作用.
  • position: relativeposition: absolute需要手动调谐像素.如果您使用的是服务器端语言,并且正在处理图像(或具有可预测高度的内容),则可以使用服务器端代码"自动"处理像素调整.

相反,使用jQuery Masonry.

  • @stevenmc:没问题,但你肯定没有找到*你问的问题的解决方案*:`"我有无限数量的宽度为100px的div,可以放入250px宽度的父级.无论高度如何,我都需要要以行显示的div,如图所示."` (3认同)
  • 如果对齐应该如上面编号那样发生,那么CSS列将无法完全解决问题.CSS列将导致布局,其中列1将包含项目1,2,3,列2包含项目4,5,6. (2认同)

Fat*_*orm 37

假设您的需求更像是您的彩色示例代码:

.box:nth-child(odd){
    clear:both;
}
Run Code Online (Sandbox Code Playgroud)

如果它将是3行然​​后 nth-child(3n+1)

  • 这是最好的工作css解决方案. (3认同)

Yan*_*era 36

我提供这个答案是因为即使有很好的解决方案(使用Masonry)仍然不清楚为什么不能通过使用浮动来实现这一点.

(这很重要 - #1).

浮动元素将在原始位置尽可能向左或向右移动

所以这样说吧:

我们有2个div

<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;
}
Run Code Online (Sandbox Code Playgroud)

没有float他们将是一个低于另一个

在此输入图像描述

如果我们float: rightdiv5,在div6定位上线的地方div5是,

/*the lines are just for illustrate*/

在此输入图像描述

所以,如果现在我们float: leftdiv6会尽量移到"左,因为它可以,在这条线 "(见#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;
}
Run Code Online (Sandbox Code Playgroud)

我们有这个

在此输入图像描述

如果我们设置clear: rightdiv5,我们强迫它采取下面的线div4

在此输入图像描述

并将div6向右或向左漂浮在这条新线上.

现在让我们使用由于从左到右重复强制div堆栈而带我到这里的问题

这里是测试它的片段:

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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在上面的图片你可以看到div.5被摆放就在旁边div.3,这是因为在它的线(由线中定义div.4),这是因为到目前为止,它可以走了,div.1*,div.2*,等,也左浮动的div.5,但因为他们不适合在那条线上他们去了下面的线(由线框定义div.5)

现在请注意,当我们将高度减少到div.2*足以小于div.4*传递给它的高度时div.5*:

在此输入图像描述

我希望这有助于澄清为什么使用浮点数无法实现这一点.我只澄清使用浮点数(不是内联块),因为标题为" CSS浮动Div在可变高度 ",因为现在答案很长.


ste*_*nmc 8

正如已经正确指出的那样,单独使用CSS是不可能的......幸运的是,我现在已经在http://isotope.metafizzy.co/找到了解决方案.

它似乎完全解决了这个问题.

  • 我真的认为你应该给@thirtydot这个答案 - 他/她建议使用Masonry,这是实现这一目标的唯一方法.同位素是由同一个人建造的砌体版本(自愿)支付的. (23认同)