【问题标题】:CSS grid layout without predetermining number of columns for each cellCSS网格布局,没有预先确定每个单元格的列数
【发布时间】:2018-04-17 00:04:55
【问题描述】:

有 6 列的网格。网格的每一列是50px

Content 1: <section><p>hello</p></section>
Content 2: <section><img width="110"></section>
Content 3: <section><p>goodbye</p></section>
Content 4: <section><img width="250"></section>
Content 5: <section><img width="65"></section>

我希望此内容以某种方式知道按如下布局,而不会被“告知”每条内容占用多少列:

|----------|----------|----------|----------|----------|----------|
|          |                                |          |
| hello    | 110px-wide image               | goodbye  |
|          |                                |          |
|----------|----------|----------|----------|----------|----------|
|                                                      |
| 200px-wide image
|                                                      |
|----------|----------|----------|----------|----------|----------|
|                     |
| 65px-wide image     |
|                     |
|----------|----------|----------|----------|----------|----------|

在任何得到相当广泛支持的 CSS 中是否有任何方法可以设置一个网格,无需将任何 col-x 类型类或显式宽度附加到每个部分元素?

我尝试使用 flexbox 的示例,但我不确定如何告诉它“网格列是 50 像素宽,其中有 6 个”:

.container {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: left;
    align-items: space-between;
    align-content: center;
}
section {
    border: 1px black solid;
    flex-basis: auto;
    flex-grow: 6;
    flex-shrink: 1;
}
<div class="grid">
  <section><p>hello</p></section>
  <section><img src="http://comefillyourcup.com/wp-content/uploads/2015/12/2880x1800-bright-ube-solid-color-background-128x128.jpg" width="110"></section>
  <section><p>goodbye</p></section>
  <section><img src="https://i.imgur.com/WgbsUUv.png" width="250"></section>
  <section><img src="https://i.imgur.com/SUl31R3.png" width="65"></section>
</div>

【问题讨论】:

  • flex 在这里看起来比网格更高效......你应该分享你的 html 和 css 来显示你的问题
  • 好点。最小的例子来了...
  • 添加了我想要按照 ASCII 图表布局的 HTML。不确定要添加什么 CSS——这就是问题所在! :)
  • 你可以使用 grid、class 和 grid-auto-flow:dense 来尽可能地填补空白codepen.io/gc-nomade/pen/MOyEqv
  • 您可以在运行时根据类的宽度分派类。 (例如,绝对位置并首先隐藏以检索所需的宽度..然后给出类名并删除位置/隐藏可见性;)

标签: css flexbox grid-layout css-grid


【解决方案1】:

您可以像这样简单地制作section inline-block:

.grid {
  display: flex;
  flex-wrap: wrap;
}

img {
  max-width: 100%;
}

section {
  display: inline-block;
  vertical-align:top;
  border: 1px solid #000;
  min-height: 100px;
}
<div class="grid">
  <section>
    <p>hello</p>
  </section>
  <section><img src="http://coschedule.com/blog/wp-content/uploads/linkedin-recommended-image-sizes-770x884.png" width="410"></section>
  <section>
    <p>goodbye</p>
  </section>
  <section><img src="http://3.bp.blogspot.com/_w0r3cYUSD7A/Sob415afOVI/AAAAAAAABa4/-J_vkiTkITE/s1600/sunflare.jpg" width="1000"></section>
  <section><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Wide%2C_Samuel_1892.jpg/200px-Wide%2C_Samuel_1892.jpg" width="250"></section>
</div>

【讨论】:

  • 谢谢!我是否认为如果我改变盒子的顺序这根本不起作用?我试图避免预定义任何给定内容框占用的列数/%,只是让它“对齐网格”。我希望它完全像无网格页面一样工作,只是每个框都应该以某种方式被告知“你最终必须是 100px 宽的倍数”以及“如果你越过行尾,请包裹在下面”。这很可能是不可能的:)
  • @ThomasDavidBaker 在这种情况下我们可以使用固定宽度,我使用 % 来保持响应,但我们可以切换到固定值
  • 谢谢!我们在这里说网格中的第四个项目是 500px 宽。这就是我想要避免的。此内容将是动态的,并且可以是 1px 到 1200px 宽的任何内容。这有意义吗?
  • 啊,好吧,就像你想将宽度四舍五入到最接近的值,即 Column width 的倍数?是一个 JS 解决方案可以满足您的需要,我可以为您提供一个
  • @ThomasDavidBaker 动态调整内容大小我认为您将无法找到纯 CSS 解决方案
猜你喜欢
  • 2021-05-19
  • 1970-01-01
  • 2010-10-08
  • 2020-06-30
  • 2017-12-14
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 2019-10-04
相关资源
最近更新 更多