我希望 div 元素的布局如下所示:
如果屏幕足够大,那么单行中有很多块。
例如,我想将每个块的最小宽度设置为 250px。
所以在大屏幕上,我可以为这些元素提供以下内容。右边是地图(可关闭),如果用户隐藏它,则行中将有 6 个块。
接下来,当我水平缩小浏览器窗口时,所有块都不适合该行,因此它们移动到下一行。好的,现在可以这样工作了,他们去第二行,但是他们在 div 块和地图之间留下了空间。如下图所示。
我想有这样的布局,如果 4 个块不适合空间,那么可以有 3 个块,但它们同样填充剩余空间(没有剩余的黄色空间)。请参阅下面的图片。
然后当浏览器窗口缩小更多时,它应该如下所示
在移动设备和非常狭窄的浏览器窗口上:
好的,我可以使用这样的 CSS 样式来实现这样的效果:
#parent {
display: flex;
flex-wrap: wrap;
}
.child {
width: calc(33% - 15px);
margin-left: 10px;
margin-top: 10px;
margin-bottom: 20px;
min-width: 250px;
}
那么我应该使用媒体查询手动更改它:
calc(25% - 15px) //lg
calc(33% - 15px) //md
calc(50% - 15px) //sm
calc(100% - 15px) //xs
当地图消失时,甚至可能是这样
calc(16.667% - 15px) //lg+no map
Ok FLEX 不是那么向后兼容,所以我可以玩得更多,做这样的事情:
#parent {
}
.child {
width: calc(33% - 15px);
margin-left: 10px;
margin-top: 10px;
margin-bottom: 20px;
min-width: 250px;
float: left;
}
然后还根据屏幕尺寸手动更改此宽度并添加clear: left after last element using
.block-offer:nth-last-child(1):after {
clear: left;
}
或在其他元素进行其他清除修复之前
甚至(是必要的吗?)添加 clear: left 在每一行之后使用:
.block-offer:nth-child(4n+1) {
clear:left;
}
.block-offer:nth-child(3n+1) {
clear:left;
}
.block-offer:nth-child(2n+1) {
clear:left;
}
.block-offer:nth-child(1n+1) {
clear:left;
}
像这样的宽度: calc() 取决于屏幕大小和 divs witdh
但是后来我需要使用许多媒体查询,我想将这个 CSS 包装在一些有角度的 2+ 组件中,并且只有这样的东西:
<blocks-container max-cols="6">
<block min-width="250px"></block>
<block min-width="250px"></block>
...
</blocks-container>
我认为使用@media 查询会稍微改善这种行为,但我的组件将与屏幕大小紧密结合,我认为没有像我希望的那样通用,可以灵活地指定最大列和最小宽度。