【发布时间】:2017-10-22 06:24:33
【问题描述】:
需要:仅 CSS 的解决方案,可以在每行的基础上启用等高网格“部分”,这也是响应式的。
此图有望比本文中的文字更好地解释需求:
“项目网格”应该是响应式的 - 因为它可以根据视口宽度在每行显示不同数量的卡片。并且在给定的行内,等效部分应该在“每行”的基础上具有相同的高度。
在下面的 HTML 和 CSS 中 - 项目卡被分成我们需要的行(在桌面和移动的两个示例断点处),但内容部分的高度是可变的(糟糕):
.items {
max-width: 1200px;
}
.item {
width: 25%;
box-sizing: border-box;
display: inline-block;
vertical-align: top;
padding: 0 12px;
margin: 24px -4px 24px 0;
}
@media (max-width: 600px) {
.item {
width: 50%;
}
}
.item__heading {
background-color: #d4d0f5;
padding: 10px;
text-align: center;
border: 1px solid #bbbbbb;
}
.item__content {
padding: 10px;
border-left: 1px solid #bbbbbb;
border-right: 1px solid #bbbbbb;
}
.item__price {
background-color: #e0f6d9;
padding: 10px;
text-align: center;
border: 1px solid #bbbbbb;
}
<div class="items">
<div class="item">
<div class="item__heading">
Item 1
</div>
<div class="item__content">
Some content that is not that long
</div>
<div class="item__price">
£99.99
</div>
</div>
<div class="item">
<div class="item__heading">
Item 2
</div>
<div class="item__content">
Some content that is longer than other items on the same row and sets the height of this section
</div>
<div class="item__price">
£69.99
</div>
</div>
<div class="item">
<div class="item__heading">
Item 3
</div>
<div class="item__content">
Some content that is not that long
</div>
<div class="item__price">
£69.99
</div>
</div>
<div class="item">
<div class="item__heading">
Item 4
</div>
<div class="item__content">
Some content that is not that long
</div>
<div class="item__price">
£109.99
</div>
</div>
<div class="item">
<div class="item__heading">
Item 5
</div>
<div class="item__content">
Some content that is a medium kind of length blah blah
</div>
<div class="item__price">
£29.99
</div>
</div>
<div class="item">
<div class="item__heading">
Item 6
</div>
<div class="item__content">
Some content that is not that long
</div>
<div class="item__price">
£99.99
</div>
</div>
</div>
以下 codepen 是基于 JavaScript 的解决方案,可实现预期结果 - 但这是我试图避免的: https://codepen.io/rusta/pen/KmbVKd
限制
- 要在网格列表中显示的项目数可以是 1-150 之间的任意数字
- 要显示的项目内容的大小确实是可变的(因此不能选择“合理的”最小高度)
我希望新的 CSS Grid 系统能够帮助我实现上述目标,但使用它一段时间后,它似乎需要比我希望的更多的结构,而且响应方面似乎相当具有挑战性。但也许某处有一个基于 CSS Grid 的答案
进一步说明:我说的是纯 CSS 解决方案,我的意思是非 JS 解决方案。如果 HTML 块需要更改(订单/嵌套/类名)以支持非 JS 解决方案,这绝对没问题
在这个简单的示例中 - 我们只关注具有“匹配高度”的“内容”部分 - 因为我们可以假设标题和价格部分自然是相同的高度。在任何匹配的网格部分(标题/内容/价格/其他)中启用“等效性”会很好,但这可能是另一天......
【问题讨论】:
-
你试过搜索这个吗?对 CSS 等高网格的简单搜索会为您提供大量选项供您使用
-
你是看我的全文还是只看标题?
-
当它发生时,我花了多少时间试图解决这个问题,这简直令人尴尬!因此把它放在这里 - 并尽可能详细。不久前我在使用 flexbox 时遇到了死胡同
-
注意:内部项目部分需要具有相同的高度,而不仅仅是项目卡本身——我认为这超出了 flex-box 功能(或者至少是我的 flex-box 功能无论如何!)
-
很高兴补充一点,我已经尝试过使用 flexbox 并失败了。我确实补充说我尝试过使用 CSS Grid 并失败了。如果你不介意我想保持这个问题开放,因为它不是你建议的项目的重复 - 我很想知道是否有其他人可以提供解决方案(可能基于 CSS 网格?)