Mise en page flexible des boîtes
Avec l'avènement de la Boîte flexible CSS la plupart des cauchemars des concepteurs de sites web 1 ont été résolus. L'un des problèmes les plus épineux est l'alignement vertical. Maintenant, il est possible même en hauteurs inconnues .
"Deux décennies de pirates de la mise en page touchent à leur fin. Peut-être pas demain, mais bientôt, et pour le reste de nos vies."
- CSS légendaire Eric Meyer à l'adresse W3Conf 2013
Flexible Box (ou en abrégé, Flexbox), est un nouveau système de mise en page spécifiquement conçu pour la mise en page. Le site états des spécifications :
La disposition Flex est superficiellement similaire à la disposition en blocs. Il lui manque de nombreuses propriétés plus complexes centrées sur le texte ou le document qui peuvent être utilisées dans la mise en page par blocs, telles que les flottants et les colonnes. En contrepartie, il bénéficie d'outils simples des outils simples et puissants pour distribuer l'espace et aligner le contenu de manière dont les applications Web et les pages Web complexes ont souvent besoin.
Comment cela peut-il aider dans ce cas ? Eh bien, voyons voir.
Colonnes alignées verticalement
En utilisant Twitter Bootstrap, nous avons .row
a un peu de .col-*
s. Tout ce que nous devons faire est d'afficher les .row
2 en tant que conteneur souple et ensuite aligner tous ses élément flexible (les colonnes) verticalement par align-items
propriété.
EXEMPLE ICI (Veuillez lire les commentaires avec attention)
<div class="container">
<div class="row vertical-align"> <!--
^-- Additional class -->
<div class="col-xs-6"> ... </div>
<div class="col-xs-6"> ... </div>
</div>
</div>
.vertical-align {
display: flex;
align-items: center;
}
La sortie
La zone colorée affiche le padding-box des colonnes.
Clarification sur align-items: center
8.3 Alignement sur l'axe transversal : le align-items
propriété
Articles flexibles peuvent être alignés dans le axe transversal de la ligne courante du conteneur flex, similaire à justify-content
mais dans la direction perpendiculaire. align-items
définit l'alignement par défaut de tous les éléments du conteneur flexible, y compris les éléments anonymes. articles flexibles .
align-items: center;
Par valeur centrale, le élément flexible La zone de marge de l'utilisateur est centrée dans la zone axe transversal à l'intérieur de la ligne.
Alerte générale
Note importante n°1 : Twitter Bootstrap ne spécifie pas le width
de colonnes dans des appareils très petits, à moins que vous ne donniez à l'une des .col-xs-#
aux colonnes.
Par conséquent, dans cette démo particulière, j'ai utilisé .col-xs-*
afin que les colonnes s'affichent correctement en mode mobile, car elle spécifie la classe width
de la colonne de manière explicite.
Mais vous pouvez aussi éteindre la mise en page Flexbox en changeant simplement display: flex;
à display: block;
dans des tailles d'écran spécifiques. Par exemple :
/* Extra small devices (767px and down) */
@media (max-width: 767px) {
.row.vertical-align {
display: block; /* Turn off the flexible box layout */
}
}
Ou vous pourriez spécifier .vertical-align
uniquement sur des tailles d'écran spécifiques comme ça :
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.row.vertical-align {
display: flex;
align-items: center;
}
}
Dans ce cas, je choisirais @KevinNelson 's approche .
Note importante n°2 : Les préfixes des fournisseurs ont été omis pour des raisons de brièveté. La syntaxe Flexbox a été modifiée au cours du temps. La nouvelle syntaxe écrite ne fonctionnera pas sur les anciennes versions des navigateurs web (mais pas si anciennes qu'Internet Explorer 9 ! Flexbox est supporté sur Internet Explorer 10 et plus).
Cela signifie que vous devriez également utiliser des propriétés préfixées par le fournisseur comme display: -webkit-box
et ainsi de suite en mode production.
Si vous cliquez sur "Toggle Compiled View" dans le Démo vous verrez la version préfixée des déclarations CSS (grâce à Préfixe automatique ).
Colonnes pleine hauteur avec contenu aligné verticalement
Comme vous le voyez dans le Démonstration précédente les colonnes (les éléments flexibles) ne sont plus aussi hautes que leur conteneur (la boîte du conteneur flexible). .row
élément).
Cela est dû à l'utilisation de center
valeur pour align-items
propriété. La valeur par défaut est stretch
afin que les éléments puissent remplir toute la hauteur de l'élément parent.
Afin de corriger cela, vous pouvez ajouter display: flex;
aux colonnes également :
EXEMPLE ICI (Encore une fois, attention aux commentaires)
.vertical-align {
display: flex;
flex-direction: row;
}
.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
display: flex;
align-items: center; /* Align the flex-items vertically */
justify-content: center; /* Optional, to align inner flex-items
horizontally within the column */
}
La sortie
La zone colorée affiche le padding-box des colonnes.
Dernier point, mais non le moindre Notez que les démonstrations et les extraits de code présentés ici sont destinés à vous donner une idée différente, à fournir une approche moderne pour atteindre l'objectif. Veuillez tenir compte de la mention " Alerte générale Si vous comptez utiliser cette approche dans des sites Web ou des applications réelles, vous devez vous référer à la section "Autres".
Pour une lecture plus approfondie, y compris le support du navigateur, ces ressources seraient utiles :
1. Aligner verticalement une image à l'intérieur d'un div avec une hauteur réactive 2. Il est préférable d'utiliser une classe supplémentaire afin de ne pas modifier la classe par défaut de Twitter Bootstrap. .row
.
1 votes
Non non, je veux aligner verticalement les 2
div
pas le texte à l'intérieur, quelque chose comme ceci jsfiddle.net/corinem/Aj9H9 mais dans cet exemple je n'utilise pas de bootstrap3 votes
Duplicata possible de Comment utiliser l'alignement vertical dans bootstrap
7 votes
IMPORTANT : Les deux colonnes doivent avoir la classe "vcenter". Sinon, cela ne fonctionnera pas. J'ai passé une heure et demie à résoudre ce problème.
0 votes
Aucune des réponses ne fonctionne parfaitement sur chrome IE8 et mobile pour moi avec une ligne contenant 5 col- ( et 3 col- sur mobile )
0 votes
Dans Bootstrap 4, l'alignement vertical central est très différent : stackoverflow.com/a/41464397/171456
0 votes
.row{display : flex ; align-items : center;}
0 votes
Vous voulez donc qu'ils soient alignés verticalement au milieu, les uns par rapport aux autres ou, en d'autres termes, à avoir la même axe horizontal ?
0 votes
stackoverflow.com/a/56359139/1359764