【问题标题】:Vertical alignment of float:left div'sfloat:left div 的垂直对齐方式
【发布时间】:2012-06-06 03:53:22
【问题描述】:

我有大约 10 个宽度相同但高度不同的 div,我希望它们尽可能紧密地组合在一起。

当设置为向左浮动时,它们不会垂直排列,而是与上方“行”的底部对齐。

我在下面模拟了一个小示例,并希望摆脱空白。你有什么建议吗。我仅限于使用这种格式,因为内容是外部传递的。

干杯

<div style="width:500px;">
<div style="display:block; width:250px; height:100px; background-color:#333; float:left;"></div>
<div style="display:block; width:250px; height:180px; background-color:#888; float:left;"></div>
<div style="display:block; width:250px; height:130px; background-color:#354689; float:left;"></div>
<div style="display:block; width:250px; height:90px; background-color:#181; float:left;"></div>
</div>

【问题讨论】:

    标签: css html css-float vertical-alignment


    【解决方案1】:

    尝试向左浮动第一个,然后向右浮动下一个,向左浮动下一个,向右浮动下一个 ....

    编辑 - 响应 cmets。

    如果您知道您将获取的span 的最大数量(并假设它不超过您所说的 10 个(因为这种方法很快就会变得非常混乱),并假设 CSS3 不是选项你可以尝试这样的事情,

    <style>
        span, /* all spans get display and width, odd spans get float:left */
        span+span+span, 
        span+span+span+span+span, 
        span+span+span+span+span+span+span {
            display:block;
            width:250px;
            float:left;
        }
    
        span+span, /* even spans get float:right */
        span+span+span+span, 
        span+span+span+span+span+span, 
        span+span+span+span+span+span+span+span {
            float:right;
        }
    </style>
    

    您需要继续添加span+span+...,直到达到您将拥有的最大连续数量。以上仅匹配八个。所以这不是最漂亮的方法!

    【讨论】:

    • 感谢您的回答。有没有办法仅使用 css 来替代它?不幸的是,一旦交付,我无法更改内容、ID 或类别。
    • 当您检索它时,是否与您的示例中应用的样式一样?并且,每个 div 上有哪些 id 和类?
    • 当数据被检索到时,它实际上是这样到达的:CONTENT - 不完全是一种方便的格式:(
    • 好的。当您说您有“大约 10 个”时,您是否事先知道确切的数量?另外,CSS是唯一的选择吗,还有javascript的空间吗?最后,解决方案的可移植性如何,我只是在阅读有关 CSS3 :nth-child 伪类的信息,想知道这是否有帮助,但我不知道它的支持程度。
    • 谢谢 tjm。我已经看过了,css 是唯一的选择 - 没有 javascript。 :nth-child 看起来是我们唯一的选择,但我担心兼容性。不敢相信这么简单的事情这么难 - 我以为我错过了一些基本的东西
    【解决方案2】:

    您的方案可以使用更多说明。

    如果它们的高度始终相同,您可以对它们的排列进行硬编码。修复您的模型:

    <div style="width:500px;">
    <div style="display:block; width:250px; height:100px; background-color:#333; float:left;"></div>
    <div style="display:block; width:250px; height:180px; background-color:#888; float:left;"></div>
    <div style="display:block; width:250px; height:130px; background-color:#354689; float:left; margin-top: -80px;"></div>
    <div style="display:block; width:250px; height:90px; background-color:#181; float:left;"></div>
    </div>
    

    但这很明显,可能对您没有帮助,因为它们可能具有不确定的随机高度。在这种情况下,由于它们始终具有相同的宽度并且您总是有 10 个,因此您可以将它们分成 3 或 4 个垂直堆叠,然后使每个堆叠彼此齐平。

    <div style="width:250px; float:left;">
    <div style="display:block; width:250px; height:100px; background-color:#333; float:left;"></div>
    <div style="display:block; width:250px; height:180px; background-color:#888; float:left;"></div>
    <div style="display:block; width:250px; height:130px; background-color:#354689; float:left;"></div>
    </div>
    <div style="width:250px; float:left;">
    <div style="display:block; width:250px; height:90px; background-color:#181; float:left;"></div>
    <div style="display:block; width:250px; height:180px; background-color:red; float:left;"></div>
    <div style="display:block; width:250px; height:100px; background-color:#333; float:left;"></div>
    </div>
    <div style="width:250px; float:left;">
    <div style="display:block; width:250px; height:80px; background-color:#333; float:left;"></div>
    <div style="display:block; width:250px; height:140px; background-color:#888; float:left;"></div>
    <div style="display:block; width:250px; height:160px; background-color:#354689; float:left;"></div>
    </div>
    

    【讨论】:

    • 最好采用多列方法。有针对不支持所需 css3 的浏览器的 javascript 修复。 alistapart.com/articles/css3multicolumn 这完全取决于 OP 希望 div 从左到右或从上到下填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多