【问题标题】:Css column-count should respect only first childCss column-count 应该只尊重第一个孩子
【发布时间】:2017-06-11 02:54:29
【问题描述】:

我正在尝试使用列数为用户任务制作一种周历。

本周的主 div 的 column-count 属性为 7,并且总是有 7 个孩子。本周的第 7 天。 这几天有任务,但任务的数量是可变的,它打破了列数逻辑。

为什么 column-count 不只考虑其中的第一个孩子?

这是我所说的一个例子:https://jsfiddle.net/nby5ctb2/

在第二个列表中,我希望任务 1、1.1 和 1.2 相互叠加,如果没有孩子,就跳过这些日子。

我使用的 css 是这样的:

.week {
    -moz-column-count: 7;
    -webkit-column-count: 7;
    column-count: 7;
}

感谢先进

【问题讨论】:

  • 能否请您展示您正在使用的 (minimal reproducible example) HTML 和 CSS,以便我们了解您正在处理的内容,并希望了解您的问题。
  • 哦,我忘了。我举个例子。对不起^^
  • 您需要重置子元素的显示以避免它们跨越列平均 CSS 规则对此不起作用,display:inline-block 将完成这项工作,您需要添加宽度以填充整个列的宽度也是。 jsfiddle.net/nby5ctb2/2
  • @GCyrillus 这没有给出 7 列(在我的 Chrome 上)
  • @LGSon,我想这就是它仍然处于试验阶段并且即将消失的原因;)

标签: css flexbox column-count


【解决方案1】:

您似乎误解了column-count 的用途,因此误用了它。

它的目的是获取一些内容并将其划分为给定数量的列,其中尽可能接近等量的内容。您拥有的唯一工具是 break-inside:avoid 将“块状”内容保持在一起。

但如果您确实使用它来使一列比其他列高,那么您就是在使所有列的高度相同 ,因为这就是 CSS 列的作用。因此,例如,在.day. 上使用break-inside:avoid 将导致其他较短的.days 堆积在同一列中。只有当你一周中的日子有相同数量的内容时,它才会起作用,显然情况并非如此。

首先想到的问题是:为什么不使用 flex?由于您可能希望一天的宽度相等,因此您需要将width 添加到孩子。默认情况下,display:flex 子级具有flex: 0 1 auto,这使得它们根据内容灵活。

.week {
    display: flex;
}
.week > * {
  width: calc(100% / 7)
}

Fiddle.

【讨论】:

  • 哇。这太不可思议了。我不知道显示器弯曲。非常感谢。这正是我想要的^^
  • 如果内容溢出,你也需要overflow: hidden ...和/或word-break: break-all如果期望长词或只有文本(可以有长词)
  • @LGSon 从我看到的内容溢出是一个完全不同的问题,与这个问题无关。我在flex-width 上的 cmets 提到了 1 天包含 20 个单词而另一天包含 1 个单词的情况。没有对width 的限制,flexbox 使内容更多的.day 比内容更少的.day 更宽。同意?是的,flex-grow:0 也是防止这种情况的一种选择。但是,因为它是默认的1,所以它需要设置:)。
  • @AndreiGheorghiu 你绝对疯了......之前告诉过你:)......开玩笑,默认是0 1 auto,虽然不是所有的浏览器都这样做,所以我想这就是你之前的问题从...上升,这就是为什么我们需要一直设置flex: 1,所以该项目会占用所有剩余空间
  • 你说得对。有时我看着桌上的一堆设备,心想:这不正常。我不必测试我在 3 个版本的 Android 和 3 个版本的 IoS、Linux 和 Win 中所做的一切,所有这些都乘以所需的浏览器堆栈。这就是疯狂。而且我不想去想如果没有 Autoprefixer 会怎样。感谢@LGSon 的叫醒服务。最诚挚的问候。
【解决方案2】:

CSS Column 并不是实现这一目标的最佳解决方案。它力求从左到右明智地流动内容列,而您所要求的就是与之抗争。

我推荐你使用即 Flexbox,它做起来非常简单,并且有更好的浏览器支持。

.week {
  display: flex;
  flex-wrap: wrap;
}
.week .day {
  flex-basis: calc(100% / 7);
  word-break: break-all;
  overflow: hidden;
}
This works
<div class='week'>
    <div class="day">
        <div class="task" >Task 1</div>
    </div>
    <div class="day">
        <div class="task" >Task 2</div>
    </div>
    <div class="day">
        <div class="task" >Task 3</div>
    </div>
    <div class="day">
        <div class="task" >Task 4</div>
    </div>
    <div class="day">
        <div class="task" >Task 5</div>
    </div>
    <div class="day">
        <div class="task" >Task 6</div>
    </div>
    <div class="day">
        <div class="task" >Task 7</div>
    </div>
</div>

<br />
<br />

This <strike>doesn't</strike> work too, now
<div class='week'>
    <div class="day">
        <div class="task" >Task 1</div>
        <div class="task" >Task 1.1</div>
        <div class="task" >Task 1.2</div>
    </div>
    <div class="day">
        <div class="task" >Task 2</div>
    </div>
    <div class="day">
    </div>
    <div class="day">
    </div>
    <div class="day">
        <div class="task" >Task 5</div>
        <div class="task" >Task 5.1</div>
    </div>
    <div class="day">
    </div>
    <div class="day">
    </div>
</div>

【讨论】:

  • GTMA,LGSon。 :)。您可能希望创建孩子flex: 0 0 calc(100% / 7),因为人们希望将一周放在另一个下方,以便在几天内具有相同的宽度。所以我认为width 在这里更简洁。另请注意,IE 在flex-basis 中的calc 存在一些问题。不知道这是否仍然是一个问题,这是几个月前的事了。
  • @AndreiGheorghiu Doing flex: 0 0 calc(100% / 7) 使 IE 折叠列...就像现在一样,工作正常,不过感谢您的注意
  • 所以只有当flex-basis以简写形式指定时,flex-basis上的calc才有问题?我不知道。我实际上记得有一个案例我真的需要在flex-basis 中使用calc,但我从未想过从速记语法切换到单独的属性。很高兴知道我仍然可以使用它。谢谢你。但是,使用flex-basis 仍然会使日期的宽度不相等,具体取决于内容,对吧?这不是必需的,但这是每周展示的合理期望。所以你需要max-width
  • @AndreiGheorghiu 使用widthflex-basis 内容是否会溢出(如非常长的文字或图像)并不重要,当发生这种情况时,使用width 内容将溢出到下一列,使用flex-basis,第 7 个元素将被推送到下一行。解决方法是使用overflow: hidden,因此在这种情况下width 并不好,flex-basis 不会使days 宽度不等......也不需要max-width :)跨度>
  • @AndreiGheorghiu 也可以添加flex-grow: 0 来解决列宽度不等的问题,但如果内容溢出的原因与之前评论中提到的相同,则无论如何都需要overflow: hidden
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多