Heim > Fragen und Antworten > Hauptteil
Hier werden einige Fragen behandelt, aber sie lösen das von mir gesuchte Problem nicht ganz.
Angenommen, ich habe eine Website und ich möchte sie. Auf dem Desktop möchte ich Folgendes:
Es ist ganz einfach. grid-template-columns: 重复(3, 33%)
(Grundsätzlich)
Aber auf dem Handy möchte ich das
Was mir begegnete, geschah, bevor es zu einer einzigen Spalte wurde:
Ich versuche clamp()
、minmax()
und alles Mögliche, aber nichts funktioniert so, wie ich es möchte. Ja, ich könnte definitiv Medienabfragen verwenden, aber ich möchte mit modernem CSS (wie Clamp, Grid, Minmax usw.) ein wirklich flüssiges Raster-/Flex-Layout erstellen, sodass keine Medienabfragen erforderlich sind, um grundlegende Layoutänderungen vorzunehmen. < /p>
Ich weiß, dass das nicht funktioniert, aber als Ausgangspunkt für Anfragen hier eine einfache Version eines meiner 100 Versuche :) In dieser Version versuche ich, mit der Klammer von „Wiederholung(3)“ zu „Wiederholung(1)“ zu wechseln. .
.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>
P粉0709187772023-12-24 11:12:44
包含更通用规则的完整文章:https:// css-tricks.com/responsive-layouts-fewer-media-queries/
这是一个在 flex-basis 中使用 max(0px, (400px - 100vw)*1000)
的想法。如果 100vw
(屏幕尺寸)大于 400px
,则此公式将给出 0px
,或者在相反情况下给出一个非常大的值,为每个元素提供一个big flex-basis
并创建一个包装。只需调整 400px
即可扮演 @media (max-width:400px)
.container {
display:flex;
flex-wrap:wrap;
}
.container div {
height:100px;
border:2px solid;
background:red;
flex-basis:max(0px, (400px - 100vw)*1000);
flex-grow:1;
}
<div class="container">
<div></div>
<div></div>
<div></div>
</div>
使用 CSS 网格,它可以如下所示:
.container {
display:grid;
grid-template-columns:repeat(auto-fill,minmax(clamp(30%, (400px - 100vw)*1000, 100%),1fr));
grid-gap:5px;
}
.container div {
height:100px;
border:2px solid;
background:red;
}
<div class="container">
<div></div>
<div></div>
<div></div>
</div>
一个类似的问题,我控制没有媒体查询的最大列数:CSS网格 - 没有媒体查询的最大列数< /a>
我们可以扩展上述解决方案以考虑更复杂的情况。
从 6 列移动到 3 列到 1 列的示例:
.container {
display:grid;
grid-template-columns:
repeat(auto-fill,
minmax(clamp(clamp(15%,(800px - 100vw)*1000, 30%), (400px - 100vw)*1000, 100%)
/* if(screen> 800px) 15% elseif(screen> 400px) 30% else 100% */
,1fr));
grid-gap:5px;
}
.container div {
height:100px;
border:2px solid;
background:red;
}
<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
要了解这些值,请考虑以下范围:
100%/7 100%/6 100%/5 100%/4 100%/3 100%/2 100%/1 14.3% 16.7% 20% 25% 33.3% 50% 100%
要获得 6 列,我们需要 ]14.3% 16.7%]
范围内的值(我考虑的是 15%
)
要获得 3 列,我们需要 ]25% 33.3%]
范围内的值(我考虑的是 30%
)
我们只是避开边缘以确保我们考虑到间隙。
使用 CSS 变量的更通用的解决方案,其中我将添加 0.1%
以确保该值足够大以获得所需的列数并且可以容纳间隙。