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: 重復(fù)(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>
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
,或者在相反情況下給出一個(gè)非常大的值,為每個(gè)元素提供一個(gè)big flex-basis
并創(chuàng)建一個(gè)包裝。只需調(diào)整 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
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%]
范圍內(nèi)的值(我考慮的是 15%
)
Pour obtenir 3 colonnes dont nous avons besoin ]25% 33.3%]
范圍內(nèi)的值(我考慮的是 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.