我使用以下媒体查询自己想出了一个解决方案:
@media (min-width:730px) { .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 2 - 1em); } }
@media (min-width:1066px) { .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 3 - 1em); } }
@media (min-width:1402px) { .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 4 - 1em); } }
@media (min-width:1696px) { .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 5 - 1em); } }
在这个解决方案中,我的图块是在<section>
标签中定义的。如果 CSS calc() 函数支持整数下限算法,则可以避免媒体查询。显示的列数 = floor((100vw - 1em) / 22em)。这些数字在上面的媒体查询中表示为常量 2、3、4 和 5。
更新
我不得不根据媒体查询对网格模板列进行硬编码,以完全摆脱布局转换。对于 5 列或更多列,我只是默认为 grid-template-columns 的原始声明,该声明适用于任意数量的列,并且会受到布局偏移的影响。
.columns-grid-maxcolumns { display:grid; grid-auto-flow:row; grid-template-columns:1fr; align-content:start; margin:1em; gap:1em; }
.columns-grid-maxcolumns section { border-radius:1ex; max-width:calc(100vw - 2em); }
@media (min-width:730px) { .columns-grid-maxcolumns { grid-template-columns:1fr 1fr; } .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 2 - 1em); } }
@media (min-width:1066px) { .columns-grid-maxcolumns { grid-template-columns:1fr 1fr 1fr; } .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 3 - 1em); } }
@media (min-width:1402px) { .columns-grid-maxcolumns { grid-template-columns:1fr 1fr 1fr 1fr; } .columns-grid-maxcolumns section { max-width:calc((100vw - 1em) / 4 - 1em); } }
@media (min-width:1696px) { .columns-grid-maxcolumns { grid-template-columns:repeat(auto-fit,minmax(20em,1fr)); } }