【问题标题】:CSS alternate floating of DIVsDIV 的 CSS 交替浮动
【发布时间】:2014-12-09 23:40:37
【问题描述】:

我有以下html代码:

<div class="messages">
    <div class="message">1</div>
    <div class="message">2</div>
    <div class="message">3</div>
    <div class="message">4</div>
    <div class="message">5</div>
    <div class="message">6</div>
    <div class="message">7</div>
    <div class="message">8</div>
</div>

我想做的是使用奇数/偶数 nth-child 选择器对它们进行一些备用浮点数。但是我想要一些更复杂的东西。我不希望每个消息节点都执行“清除”,而是希望它们能够贴近它们顶部的节点。这只能通过 CSS 实现吗?

编辑: 无需为盒子随机分配高度。每个盒子里面都有正文(人们的 cmets),这将使每个盒子的高度可变。如果我没有在这里说明,我很抱歉。

【问题讨论】:

  • 我相信你需要各种 Javascript 来制作随机交替的高度,但让我看看我能做什么。
  • 你需要 JS 来做这件事——比如 Masonry 或 Isotope。顺便说一句,不要在每个元素上使用相同的类。您可以使用.messages &gt; div 定位所有message div。
  • 我认为仅使用 CSS 是不可能的。但是有很好的 jQuery 插件,比如 jQuery wookmark 和 jQuery Masonry,它们可以很好地做到这一点。当然,如果这是您的选择。
  • @SteveSanders 该布局在将任何内容放入其他列之前填充第一列。这不是 OP 想要的。注意他示例中的 LTR 方向。
  • 我认为像 Masonry 这样的东西正在我所追求的道路上。谢谢你的建议。

标签: css multiple-columns


【解决方案1】:

我绝不是 CSS 大师,但在搞乱一些填充文本时,我能够做到这一点。

clear: 声明是因为没有它们,您有时会在“奇数”一侧出现“偶数”。

有可能更好的人会给你一个更好的答案。

所以要回答您最初的问题,您想要的是“某种”可能的 CSS。我不明白为什么 7 div 从它开始的地方开始。

.alt,
body,
html {
  height: 100%;
}
.alt div:nth-child(even) {
  float: right;
  clear: right;
}
.alt div:nth-child(odd) {
  float: left;
  clear: left;
}
.alt div {
  box-sizing: border-box;
  width: calc(50% - 5px);
  margin-bottom: 5px;
  border: 1px dotted grey;
}
<div class="alt">
  <div>1 lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>2 lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>3 lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>4 lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.
    lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem
    ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>5lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>6lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>7lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem
    ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum
    dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
  <div>8 lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor. lorem ipsum dolor.</div>
</div>

【讨论】:

  • 你有没有找到解决第 7 个 div 令人讨厌的位置的方法?
  • 不能说我做到了。它要么从示例中的位置开始,要么聚集到错误的一侧。我假设这与交替清除有关,但没有它们就行不通。
  • 我找到了原因! w3.org/TR/CSS21/visuren.html#float-position - 第 5 点:“浮动框的外部顶部不得高于源文档中较早元素生成的任何块或浮动框的外部顶部。”所以顶部框 7 的顶部不能高于框 6 的顶部。
  • 啊,那我们就需要js来完成了。
【解决方案2】:

这是一个使用浮点数的示例:

JSFiddle


我刚才注意到你想让高度依赖于内容。我知道没有其他方法可以做到这一点,然后使用 jQuery/JS 根据最大​​的框来设置框的高度。

浮动结构依赖于盒子的高度非常精确,所以盒子#1和#4、#2和#3、#5和#8、#6和#7都必须具有相同的高度或它根本行不通。


否则,使用静态高度:

HTML:

<div class="container">
    <div class="message"></div>
    <div class="message"></div>
    <div class="message"></div>
    <div class="message"></div>
    <div class="message short"></div>
    <div class="message short"></div>
    <div class="message short"></div>
    <div class="message short"></div>
</div>

CSS:

div.container
{
    width: 600px;
    font-size: 0;
}

div.message {
    display: inline-block;
    height: 300px;
    width: calc(50% - 10px);
    background: #ccc;
    
    margin: 5px;
}

div.message.short
{
    height: 200px;
}

div.message:nth-child(4n-3),
div.message:nth-child(4n)
{
    float: left;
}

div.message:nth-child(4n-1)
{
    float: right;
}

div.message:nth-child(4n-2),
div.message:nth-child(4n)
{
    height: 100px;
}

【讨论】:

    【解决方案3】:

    可以结合使用 CSS 和 Javascript,例如 Masonry 或 Isotope;但很可能无法使用 CSS3 完成。也许当 CSS4 出来的时候就有可能,但那还有很长的路要走。

    或者,我要做的是预先设计我想要的,然后为 div 定义单独的类。例如,图中2和3是同一个类,4、6、7是同一个类;然后使用 CSS 定位、浮动、边距和填充来适当地定义。

    如果你想要一些动态的东西,你不能单独使用 CSS;但是如果你知道你想要它的样子,你可以通过为不同的 div 定义单独的类来使用 CSS。

    附言您可以使用 css child 来定义类集,但它仍然在做同样的事情,它不是完全动态的,因为您首先需要知道您希望它看起来像什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 2013-08-15
      相关资源
      最近更新 更多