Maison > Questions et réponses > le corps du texte
Certaines questions sont examinées ici, mais elles ne résolvent pas tout à fait le problème que je recherche.
Supposons que j'ai un site Web et que je le veuille. Sur le bureau, je veux ceci :
C'est facile. grid-template-columns: 重复(3, 33%)
(En gros)
Mais sur mobile, je veux ça
Ce que j'ai rencontré s'est produit avant qu'il ne reste une seule colonne :
J'essaie clamp()
、minmax()
et toutes sortes de choses, mais rien ne fonctionne comme je le souhaite. Oui, je pourrais certainement utiliser des requêtes multimédias, mais j'aimerais créer une mise en page grille/flex vraiment fluide en utilisant du CSS moderne (comme clamp, grid, minmax, etc.) afin qu'aucune requête multimédia ne soit nécessaire pour apporter des modifications de mise en page de base. < /p>
Je sais que cela ne fonctionne pas, mais comme point de départ pour les requêtes, voici une version simple d'une de mes 100 tentatives :) Dans cette version, j'essaie de passer de répétition(3) à répétition(1) en utilisant clamp) .
.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
Article complet avec des règles plus générales : https://css-tricks.com/responsive-layouts-fewer-media-queries/
Ceci est utilisé en base flexible 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>
En utilisant CSS Grid, cela peut ressembler à ceci :
.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>
Une question similaire où je contrôle le nombre maximum de colonnes sans requêtes multimédias : Grille CSS - Nombre maximum de colonnes sans requêtes multimédias< /a>
Nous pouvons étendre la solution ci-dessus pour considérer des cas plus complexes.
Exemple de passage de 6 colonnes à 3 colonnes à 1 colonne :
.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>
Pour comprendre ces valeurs, considérez les plages suivantes :
100%/7 100%/6 100%/5 100%/4 100%/3 100%/2 100%/1 14.3% 16.7% 20% 25% 33.3% 50% 100%
Pour obtenir 6 colonnes dont nous avons besoin ]14.3% 16.7%]
范围内的值(我考虑的是 15%
)
Pour obtenir 3 colonnes dont nous avons besoin ]25% 33.3%]
范围内的值(我考虑的是 30%
)
Nous évitons simplement les bords pour nous assurer de tenir compte des espaces.
Une solution plus générale utilisant des variables CSS, où j'ajouterais 0.1%
pour m'assurer que la valeur est suffisamment grande pour obtenir le nombre de colonnes souhaité et peut combler les lacunes.