Je me demande comment je procéderais pour créer une mise en page avec des carrés réactifs . Chaque carré aurait un contenu aligné verticalement et horizontalement . L'exemple spécifique est affiché ci-dessous ...
html
css
responsive-design
grid-layout
aspect-ratio
garethdn
la source
la source
Réponses:
Vous pouvez créer une grille réactive de carrés avec un contenu centré verticalement et horizontalement uniquement avec CSS . Je vais vous expliquer comment dans un processus étape par étape, mais voici d'abord 2 démos de ce que vous pouvez réaliser:
Voyons maintenant comment créer ces carrés réactifs fantaisie!
1. Créer les carrés réactifs:
L'astuce pour garder les éléments carrés (ou tout autre rapport hauteur / largeur) est d'utiliser le pourcentage
padding-bottom
.Note latérale: vous pouvez également utiliser un rembourrage supérieur ou une marge supérieure / inférieure mais l'arrière-plan de l'élément ne s'affichera pas.
Comme le remplissage supérieur est calculé en fonction de la largeur de l' élément parent ( voir MDN pour référence ), la hauteur de l'élément changera en fonction de sa largeur. Vous pouvez maintenant conserver ses proportions en fonction de sa largeur.
À ce stade, vous pouvez coder:
HTML :
CSS
Voici un exemple de mise en page simple d' une grille de 3 * 3 carrés en utilisant le code ci-dessus.
Avec cette technique, vous pouvez faire n'importe quel autre rapport hauteur / largeur, voici un tableau donnant les valeurs de remplissage du bas en fonction du rapport hauteur / largeur et d'une largeur de 30%.
2. Ajout de contenu à l'intérieur des carrés
Comme vous ne pouvez pas ajouter de contenu directement à l'intérieur des carrés (cela augmenterait leur hauteur et les carrés ne seraient plus des carrés), vous devez créer des éléments enfants (pour cet exemple, j'utilise des divs) à l'intérieur d'eux
position: absolute;
et y mettre le contenu. . Cela retirera le contenu du flux et conservera la taille du carré.N'oubliez pas d'ajouter
position:relative;
les div parent afin que les enfants absolus soient positionnés / dimensionnés par rapport à leur parent.Ajoutons du contenu à notre grille de carrés 3x3:
HTML :
CSS :
RESULT <- avec un peu de mise en forme pour le rendre joli!
3. centrer le contenu
Horizontalement:
Ceci est assez facile, il vous suffit d'ajouter
text-align:center
à.content
.RÉSULTAT
Alignement vertical
Cela devient sérieux! L'astuce est d'utiliser
mais nous ne pouvons pas utiliser
display:table;
on.square
ou.content
divs car il entre en conflit avecposition:absolute;
donc nous devons créer deux enfants à l'intérieur des.content
divs. Notre code sera mis à jour comme suit:HTML :
CSS:
Nous avons maintenant terminé et nous pouvons jeter un œil au résultat ici:
RÉSULTAT EN PLEIN ÉCRAN EN DIRECT
violon modifiable ici
la source
* { box-sizing: border-box; }
avertissement pour les autres: si vous utilisez, vous devrez ajuster la hauteur et la largeur dans le div .content à 100%. :)justify-content: center; align-items: center; flex-flow: column nowrap;
Vous pouvez utiliser des unités vw (largeur de vue), ce qui rendrait les carrés réactifs en fonction de la largeur de l'écran.
Une maquette rapide de ceci serait:
la source
margin-left: -4px;
utilisationmargin-right:-4px
. Ne jouez pas plutôt avec l'incohérence dans mincharspace mais définissez la taille de la police parent de wrapper sur 0 et que pour les éléments enfants réinitialisés à1rem
(relative-em)La réponse acceptée est excellente, mais cela peut être fait avec
flexbox
.Voici un système de grille écrit avec la syntaxe BEM qui permet d'afficher 1 à 10 colonnes par ligne.
Si la dernière ligne est incomplète (par exemple, vous choisissez d'afficher 5 cellules par ligne et il y a 7 éléments), les éléments de fin seront centrés horizontalement. Pour contrôler l'alignement horizontal des éléments de fin, modifiez simplement la
justify-content
propriété sous la.square-grid
classe.Afficher l'extrait de code
Violon: https://jsfiddle.net/patrickberkeley/noLm1r45/3/
Ceci est testé dans FF et Chrome.
la source
J'utilise cette solution pour des boîtes réactives de différentes rations:
HTML:
CSS:
Voir la démo sur JSfiddle.net
la source