Comment puis-je créer une grille 3x3 via CSS?
9 div
s l'un après l'autre, je veux créer une grille de 3X3 via CSS.
Comment dois-je faire?
CSS:
.cell {
height: 50px;
width: 50px;
background-color: #999;
display: inline-block;
}
.cell:nth-child(3n) {
background-color: #F00;
/* what property should I use to get a line break after this element? */
}
/* this doesn't work; at least not in safari */
.cell:nth-child(3n)::after {
display: block;
}
HTML:
<div class="grid">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
Remarque: je ne veux pas float/clear
solution. L'accent est sur le CSS et pas en HTML restructurer.
Si j'ajoute content: '\A'; white-space: pre;
à ::after
de sortie vient d'être laid.
CSS:
.cell {
height: 50px;
width: 50px;
background-color: #999;
display: inline-block;
}
.cell:nth-child(3n) {
background-color: #F00;
/* what property should I use to get a line break after this element? */
}
.cell:nth-child(3n)::after {
display: inline;
content: '\A';
white-space: pre;
}
HTML:
<div class="grid">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
Comment puis-je obtenir tous les div dans un 3X3 ligne-colonne mise en page?
Vous devez vous connecter pour publier un commentaire.
Cette mise en page est simple avec CSS flexbox. Aucun changement de HTML.
CSS:
HTML:
Avantages de flexbox:
Pour en savoir plus sur flexbox visite:
Prise en charge du navigateur:
Flexbox est pris en charge par tous les navigateurs principaux, sauf IE < 10. Certaines des dernières versions de navigateur comme Safari 8 et IE10, exiger fournisseur de préfixes. Un moyen rapide pour ajouter des préfixes utilisation Autoprefixer. Plus de détails dans cette réponse.
width
, je suis réglage de limite supérieure à elle. C. Il a enveloppé sur mon 2000px de large moniteur de l'amende juste. D. Avez-vous même exécuter le code?calc
ne fonctionnera pas avecflex-basis
composant deflex
abréviation de la propriété sur IE11. Vous aurez besoin d'utiliserflex-basis
directement.Maintenant que Grille CSS est
asseztrès bien pris en charge, je pensais compléter la réponse à une solution plus moderne.CSS:
HTML:
En plus de l'Excellente réponse de @Michael_B à utiliser
flexbox
, vous pouvez utiliserCSS tables
ou
float:left
à la fois pour soutenir les anciens navigateurs tels que IE 8/9 , qui
flexbox
ne le supportent pas.Note IE8 ne prend pas en charge
nth-child
mais prend en chargefirst/last-child
Option1 CSS (Tables) : avec les changements de HTML, enveloppant chaque 3 cellules dans une ligne.
CSS:
HTML:
Mise à jour
Option2 (
float:left
): SANS modification du HTML, à l'aideclear:left
à chaque (4e)n élément.CSS:
HTML:
flexbox
. IE 9 n'est, en partie. Accidents surbackground
ou certains liés à la propriété.calc
.Juste pour ajouter un autre vous pouvez également faire une grille 3x3 en utilisant seulement un seul
<div>
. PlunkerHTML:
CSS:
Je sais que la question est de demander un non-float solution claire, mais après avoir essayé la flexbox solution que j'ai trouvé qu'il n'a pas de conserver la largeur de mes éléments (lecture suggère j'ai peut-être nécessaire de définir la largeur de l'élément conteneur). Dans le cas spécifique d'une grille 3x3 cependant (contrairement à une grille avec n lignes de trois) que d'un flotteur de solution claire, plus concise et fonctionne très bien. Ici, il est dans le cas où les autres à trouver cette réponse lors de la recherche d'une solution comme je l'ai fait: