La manière de boîte flexible
L'alignement vertical est désormais très simple grâce à l'utilisation de la disposition de boîte flexible . De nos jours, cette méthode est prise en charge dans un large éventail de navigateurs Web, à l'exception d'Internet Explorer 8 et 9. Par conséquent, nous aurions besoin d'utiliser des hacks / polyfills ou différentes approches pour IE8 / 9.
Dans ce qui suit, je vais vous montrer comment faire cela en seulement 3 lignes de texte (quelle que soit l'ancienne syntaxe flexbox) .
Remarque: il est préférable d'utiliser une classe supplémentaire au lieu de la modifier .jumbotron
pour obtenir l'alignement vertical. J'utiliserais le vertical-center
nom de classe par exemple.
Exemple ici (un miroir sur jsbin) .
<div class="jumbotron vertical-center"> <!--
^--- Added class -->
<div class="container">
...
</div>
</div>
.vertical-center {
min-height: 100%; /* Fallback for browsers do NOT support vh unit */
min-height: 100vh; /* These two lines are counted as one :-) */
display: flex;
align-items: center;
}
Important notes (Considéré comme dans la démo) :
Un pourcentage des valeurs height
ou des min-height
propriétés est relatif à l' height
élément parent, vous devez donc spécifier height
explicitement le parent.
La syntaxe Flexbox préfixée / ancienne du fournisseur a été omise dans l'extrait publié en raison de la brièveté, mais existe dans l'exemple en ligne.
Dans certains des anciens navigateurs tels que Firefox 9 (dans lequel je l' ai testé) , le conteneur flexible - .vertical-center
dans ce cas - ne prendra pas l'espace disponible à l' intérieur du parent, il faut donc préciser la width
propriété comme: width: 100%
.
Dans certains navigateurs Web, comme mentionné ci-dessus, l'élément flexible - .container
dans ce cas - peut ne pas apparaître horizontalement au centre. Il semble que le APPLIED gauche / droite margin
de auto
ne pas d'effet sur l'élément flexible.
Par conséquent, nous devons l'aligner sur box-pack / justify-content
.
Pour plus de détails et / ou l'alignement vertical des colonnes, vous pouvez vous référer au sujet ci-dessous:
La manière traditionnelle pour les navigateurs Web hérités
C'est l'ancienne réponse que j'ai écrite au moment où j'ai répondu à cette question. Cette méthode a été discutée ici et elle est censée fonctionner également dans Internet Explorer 8 et 9. Je vais l'expliquer en bref:
Dans le flux en ligne, un élément de niveau en ligne peut être aligné verticalement au milieu par vertical-align: middle
déclaration. Spécifications du W3C :
milieu
Aligne le milieu vertical de la boîte avec la ligne de base de la boîte parent plus la moitié de la hauteur x du parent.
Dans les cas où le parent - l' .vertical-center
élément dans ce cas - a un explicite height
, par hasard si nous pouvions avoir un élément enfant ayant exactement la même chose que height
le parent, nous serions en mesure de déplacer la ligne de base du parent au milieu du plein -hauteur enfant et étonnamment faire de notre enfant entrant souhaité - le.container
- aligné verticalement au centre.
Se rassembler
Cela étant dit, nous pourrions créer un élément pleine hauteur dans les éléments .vertical-center
by ::before
ou ::after
pseudo et également changer le display
type par défaut de celui-ci et de l'autre enfant, le .container
toinline-block
.
Utilisez ensuite vertical-align: middle;
pour aligner les éléments en ligne verticalement.
Voici:
<div class="jumbotron vertical-center">
<div class="container">
...
</div>
</div>
.vertical-center {
height:100%;
width:100%;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.vertical-center:before { /* create a full-height inline block pseudo=element */
content: " ";
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
.vertical-center > .container {
max-width: 100%;
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
/* reset the font property */
font: 16px/1 "Helvetica Neue", Helvetica, Arial, sans-serif;
}
DÉMO DE TRAVAIL .
De plus, pour éviter des problèmes inattendus dans de très petits écrans, vous pouvez réinitialiser la hauteur du pseudo-élément sur auto
ou 0
ou changer son display
type en none
si nécessaire afin:
@media (max-width: 768px) {
.vertical-center:before {
height: auto;
/* Or */
display: none;
}
}
DÉMO À JOUR
Et encore une chose:
S'il y a des footer
/ header
sections autour du conteneur, il est préférable de positionner ces éléments correctement ( relative
, absolute
? À vous.) Et d'ajouter une z-index
valeur plus élevée (pour l'assurance) pour les garder toujours au-dessus des autres.