这里研究了一些问题,但它们并不能完全解决我正在寻找的问题。
假设我有一个网站并且我想要。在桌面上我想要这个:
这很容易。 grid-template-columns: 重复(3, 33%)
(基本上)
但是,在移动设备上,我想要这个
我遇到的情况发生在它翻转到单个列之前:
我正在尝试 clamp()
、minmax()
以及各种各样的东西,但没有任何东西能按我想要的方式工作。是的,我完全可以使用媒体查询,但我希望使用现代CSS(如clamp、grid、minmax等)创建真正流畅的网格/柔性布局,这样就不需要媒体查询来进行基本布局更改。< /p>
我知道这不起作用,但作为请求的起点,这是我 100 次尝试之一的简单版本:) 在这个版本中,我尝试使用钳位从重复(3)切换到重复(1) )。
.wrapper { display: grid; gap: 15px; grid-template-columns: repeat(clamp(1, calc(100% - 500px), 3), 33%); } .one { background: red; } .two { background: green; } .three { background: blue; }
<div class="wrapper"> <div class="item one"><h3>Example A</h3></div> <div class="item two"><h3>Example Two</h3></div> <div class="item three"><h3>Third Example</h3></div> </div>
包含更通用规则的完整文章:https:// css-tricks.com/responsive-layouts-fewer-media-queries/
这是一个在 flex-basis 中使用
max(0px, (400px - 100vw)*1000)
的想法。如果100vw
(屏幕尺寸)大于400px
,则此公式将给出0px
,或者在相反情况下给出一个非常大的值,为每个元素提供一个bigflex-basis
并创建一个包装。只需调整400px
即可扮演@media (max-width:400px)
使用 CSS 网格,它可以如下所示:
一个类似的问题,我控制没有媒体查询的最大列数:CSS网格 - 没有媒体查询的最大列数
我们可以扩展上述解决方案以考虑更复杂的情况。
从 6 列移动到 3 列到 1 列的示例:
要了解这些值,请考虑以下范围:
要获得 6 列,我们需要
]14.3% 16.7%]
范围内的值(我考虑的是15%
) 要获得 3 列,我们需要]25% 33.3%]
范围内的值(我考虑的是30%
)我们只是避开边缘以确保我们考虑到间隙。
使用 CSS 变量的更通用的解决方案,其中我将添加
0.1%
以确保该值足够大以获得所需的列数并且可以容纳间隙。我们还添加一些动态着色(相关:如何根据 元素的高度或宽度更改其颜色?)
使用 flexbox,我们可以有不同的(可能是想要的)行为,其中一行的最后一项将占用所有可用空间: