html - 仅使用 CSS 的等高多列/多元素布局

标签 html css flexbox grid-layout css-grid

我想看看是否有人知道解决这个问题的技巧,只使用 CSS:

假设我有一个两列、三列或四列的布局(数字是动态的),这些列中的每一列都将包含 5 个不同的部分,并且这些部分中的每一个都将包含可变数量的内容。

是否可以仅使用 CSS(而不是 JS 均衡器解决方案)将每个部分与同级列的部分垂直对齐,即使它们的内容高度不同?

我知道使用表格会很容易,但如果元素超过四个,我必须将布局完全切换为行。

我尝试使用 Flexbox 但没有达到预期的结果,而且我不确定我是否可以使用具有可变数量列的网格。

我尝试使用 Codepen 中所示的 Flexbox 来做到这一点 https://codepen.io/ramonlapenta/full/gowLqw/

由于能够使每个部分在可用空间中均匀增长(拉伸(stretch)),因为 .item-compare div 已经拉伸(stretch)到与其 sibling 相同的高度,但是这不起作用,因为增长/收缩属性指的是可用空间,而不是元素的内容。

最佳答案

这可以使用 CSS Grid,但您必须有一个容器,因此 HTML 结构必须完全不同。

类似于:

enter image description here

这确实有一些逻辑...

这是自动运行的,因为只有 3 组元素,所以 repeat(3, 1fr) 是一个 magic 数字。

对于更动态的方法,有自动调整选项。

此外,您还可以定义每个类(class)位于哪个grid-row...例如:

.item-compare-title {
 grid-row:2;
}

等等

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-column-gap: 1em;
  width: 95%;
  margin: auto;
}

.container>div {
  border: 1px solid grey;
}

.item-compare-img img {
  max-width: 100%;
  height: auto;
}

.item-compare-title {
  display: flex;
  flex-direction: column;
  text-align: center;
}

.item-compare-model {
  margin-top: auto;
}
<div class="container">
  <div class="item-compare-img">
    <img src="http://www.cagpurification.com/images/sce/product_images/Chiller%20Picture%201.jpg" alt="Chiller">
  </div>
  <div class="item-compare-img">
    <img src="http://www.cagpurification.com/images/sce/product_images/Chiller%20Picture%201.jpg" alt="Chiller">
  </div>
  <div class="item-compare-img">
    <img src="http://www.cagpurification.com/images/sce/product_images/Chiller%20Picture%201.jpg" alt="Chiller">
  </div>
  <div class="item-compare-title">
    <h4>Ecodan Heatpump that pumps heat out to the world</h4>
    <div class="item-compare-model">
      <p>PUHZ-W682387H / 5KW</p>
    </div>
  </div>
  <div class="item-compare-title">
    <h4>Ecodan Heatpump</h4>
    <div class="item-compare-model">
      <p>PUHZ-W682387H / 5KW</p>
    </div>
  </div>
  <div class="item-compare-title">
    <h4>Ecodan Heatpump</h4>
    <div class="item-compare-model">
      <p>PUHZ-W682387H / 5KW</p>
    </div>
  </div>
  <div class="item-compare-feat">
    <ul class="list-compare-feat">
      <li class="compare-feat-item">USP / Feature goes here</li>
      <li class="compare-feat-item">USP / Feature goes here</li>
    </ul>
  </div>
  <div class="item-compare-feat">
    <ul class="list-compare-feat">
      <li class="compare-feat-item">USP / Feature goes here</li>
      <li class="compare-feat-item">USP / Feature goes here with a longer title for testing</li>
      <li class="compare-feat-item">USP / Feature goes here another long title</li>
      <li class="compare-feat-item">USP / Feature goes here</li>
    </ul>
  </div>
  <div class="item-compare-feat">
    <ul class="list-compare-feat">
      <li class="compare-feat-item">USP / Feature goes here</li>
      <li class="compare-feat-item">USP / Feature goes here</li>
      <li class="compare-feat-item">USP / Feature goes here</li>
    </ul>
  </div>
  <div class="item-compare-attr">
    <ul class="list-compare-attr">
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Net dimensions</span>
        <span class="compare-attr-value">154 x 558 x 557 mm</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Cooling capacity</span>
        <span class="compare-attr-value">3.4 kW</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">ErP Rating</span>
        <span class="compare-attr-value">A+++ / A+++</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Noise Level</span>
        <span class="compare-attr-value">23 dB</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Something</span>
        <span class="compare-attr-value">655</span>
      </li>
    </ul>
  </div>
  <div class="item-compare-attr">
    <ul class="list-compare-attr">
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Net dimensions</span>
        <span class="compare-attr-value">154 x 558 x 557 mm</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Cooling capacity</span>
        <span class="compare-attr-value">3.4 kW</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Noise Level</span>
        <span class="compare-attr-value">23 dB</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Something</span>
        <span class="compare-attr-value">655</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Noise Level</span>
        <span class="compare-attr-value">23 dB</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Something</span>
        <span class="compare-attr-value">655</span>
      </li>
    </ul>
  </div>
  <div class="item-compare-attr">
    <ul class="list-compare-attr">
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Net dimensions</span>
        <span class="compare-attr-value">154 x 558 x 557 mm</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Cooling capacity</span>
        <span class="compare-attr-value">3.4 kW</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">ErP Rating</span>
        <span class="compare-attr-value">A+++ / A+++</span>
      </li>
      <li class="compare-attr-item even">
        <span class="compare-attr-title">Noise Level</span>
        <span class="compare-attr-value">23 dB</span>
      </li>
      <li class="compare-attr-item odd">
        <span class="compare-attr-title">Something</span>
        <span class="compare-attr-value">655</span>
      </li>
    </ul>
  </div>
</div>

Codepen.io demo

关于html - 仅使用 CSS 的等高多列/多元素布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932768/

上一篇:javascript - 如果同级的父级包含类,则为父级的子级设置样式

下一篇:css - 如何居中我的 iFrame 视频(HTML、CSS)

相关文章:

javascript - 在更改屏幕分辨率时使用不支持的javascript动态创建div元素

javascript - 找出元素的有效宽度并调整其中的文本大小

html - Adobe XD Export 不转换 HTML 和 CSS

css - Flexbox:2 列网格,第一列为空

html - 具有可扩展页眉和页脚以及滚动主体的 Flexbox

html - Safari 和 Firefox 中的定位不同

html - 如何集中左侧导航

css - PHP生成半透明背景颜色使用不透明度影响文本

jquery - 嵌套引导折叠( Accordion )

html - 在 React 中使用 Flex 创建侧边栏但将内容居中