J'utilise Twitter Bootstrap 3, et j'ai des problèmes lorsque je veux aligner verticalement deux div
, par exemple - Lien JSFiddle :
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-xs-5">
<div style="height:5em;border:1px solid #000">Big</div>
</div>
<div class="col-xs-5">
<div style="height:3em;border:1px solid #F00">Small</div>
</div>
</div>
Le système de grille de Bootstrap utilise float: left
, non display:inline-block
, donc la propriété vertical-align
ne fonctionne pas. J'ai essayé margin-top
de le réparer, mais je pense que ce n'est pas une bonne solution pour la conception réactive.
div
, pas le texte à l'intérieur, quelque chose comme ça jsfiddle.net/corinem/Aj9H9 mais dans cet exemple je n'utilise pas bootstrapRéponses:
Vous pouvez toujours utiliser une classe personnalisée lorsque vous en avez besoin:
Bootply
L'utilisation
inline-block
ajoute de l'espace supplémentaire entre les blocs si vous laissez un espace réel dans votre code (comme...</div> </div>...
). Cet espace supplémentaire brise notre grille si la taille des colonnes s'élève à 12:Ici, nous avons des espaces supplémentaires entre
<div class="[...] col-lg-2">
et<div class="[...] col-lg-10">
(un retour chariot et 2 tabulations / 8 espaces). Et donc...Lançons cet espace supplémentaire !!
Remarquez les commentaires apparemment inutiles
<!-- ... -->
? Ils sont importants - sans eux, les espaces entre les<div>
éléments prendront de la place dans la disposition, brisant le système de grille.Remarque: le Bootply a été mis à jour
la source
col-lg-2
etcol-lg-10
). Fait intéressant, si vous ajoutez le code JS suivant (en supposant jQuery), il parvient à se réparer:$('.row').html($('.vcenter'));
inline-block
espace supplémentaire (bien connu) . Je donne une solution dans mon montage.Disposition flexible des boîtes
Avec l'avènement de la CSS Flexible Box , de nombreux cauchemars de concepteurs Web 1 ont été résolus. L'un des plus hackeux, l'alignement vertical. Maintenant, c'est possible même dans des hauteurs inconnues .
Flexible Box (ou en bref, Flexbox), est un nouveau système de mise en page spécialement conçu à des fins de mise en page. La spécification stipule :
Comment cela peut-il aider dans ce cas? Voyons voir.
Colonnes alignées verticalement
En utilisant Twitter Bootstrap, nous avons
.row
des.col-*
s. Tout ce que nous devons faire est d'afficher le.row
2 souhaité comme une boîte de conteneur flexible , puis d'aligner verticalement tous ses éléments flexibles (les colonnes) paralign-items
propriété.EXEMPLE ICI (Veuillez lire attentivement les commentaires)
Le résultat
La zone colorée affiche la zone de remplissage des colonnes.
Clarification sur
align-items: center
Grande alerte
Remarque importante # 1: Twitter Bootstrap ne spécifie pas le nombre
width
de colonnes dans les très petits appareils, sauf si vous donnez une des.col-xs-#
classes aux colonnes.Par conséquent, dans cette démo particulière, j'ai utilisé des
.col-xs-*
classes pour que les colonnes soient affichées correctement en mode mobile, car cela spécifiewidth
explicitement la colonne.Mais encore , vous pouvez désactiver l'Flexbox layout en changeant simplement
display: flex;
àdisplay: block;
des tailles d'écran spécifiques. Par exemple:Ou vous pouvez spécifier
.vertical-align
uniquement sur des tailles d'écran spécifiques comme ceci:Dans ce cas, je partirais avec @KevinNelson de l' approche .
Remarque importante n ° 2: les préfixes du fournisseur ont été omis en raison de la brièveté. La syntaxe de 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 aussi anciennes qu'Internet Explorer 9! Flexbox est pris en charge sur Internet Explorer 10 et versions ultérieures).
Cela signifie que vous devez é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 "Basculer la vue compilée" dans la démo , vous verrez la version préfixée des déclarations CSS (grâce à Autoprefixer ).
Colonnes pleine hauteur avec contenu aligné verticalement
Comme vous le voyez dans la démo précédente , les colonnes (les éléments flexibles) ne sont plus aussi hautes que leur conteneur (la boîte du conteneur flexible, c'est-à-dire l'
.row
élément).Cela est dû à l'utilisation de la
center
valeur pour laalign-items
propriété. La valeur par défaut est destretch
sorte que les éléments puissent remplir toute la hauteur de l'élément parent.Pour résoudre ce problème, vous pouvez également ajouter
display: flex;
aux colonnes:EXEMPLE ICI (Encore une fois, faites attention aux commentaires)
Le résultat
La zone colorée affiche la zone de remplissage des colonnes.
Enfin, notez que les démos et les extraits de code ici sont destinés à vous donner une idée différente, à fournir une approche moderne pour atteindre l'objectif. Veuillez noter la section " Big Alert " si vous comptez utiliser cette approche dans des sites Web ou des applications du monde réel.
Pour une lecture plus approfondie, y compris la prise en charge du navigateur, ces ressources seraient utiles:
1. Alignez 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 valeur par défaut de Twitter Bootstrap
.row
.la source
col-*
, vos violons / codepens n'utilisent pas le bootstrap, donc ils sont trompeurs. Vos exemples ne fonctionnent pas avec bootstrap; son système de grille n'est pas baséflex
, ils sont donc incompatibles. Essayez simplement l'un de vos exemples dans une page propulsée par le bootstrap et vous vous rendrez compte qu'ils ne fonctionnent pas.Le code ci-dessous a fonctionné pour moi:
la source
Mise à jour 2020
Je sais que la question d'origine était pour Bootstrap 3, mais maintenant que Bootstrap 4 est sorti, voici quelques conseils mis à jour sur le centre vertical.
Important! Le centre vertical est relatif à la hauteur du parent
Bootstrap 4
Maintenant que Bootstrap 4 est flexbox par défaut, il existe de nombreuses approches différentes de l'alignement vertical utilisant: les marges automatiques , les utilitaires flexbox ou les utilitaires d' affichage avec les utilitaires d'alignement vertical . Au premier abord, les «utilitaires d'alignement vertical» semblent évidents, mais ils ne fonctionnent qu'avec des éléments d'affichage en ligne et de table. Voici quelques options de centrage vertical Bootstrap 4.
1 - Centre vertical à l'aide des marges automatiques:
Une autre façon de centrer verticalement est d'utiliser
my-auto
. Cela centrera l'élément dans son conteneur. Par exemple,h-100
rend la ligne pleine hauteur etmy-auto
centre verticalement lacol-sm-12
colonne.Bootstrap 4 - Centre vertical utilisant la démonstration des marges automatiques
my-auto
représente les marges sur l'axe vertical des y et équivaut à:2 - Centre vertical avec Flexbox:
Puisque Bootstrap 4
.row
est maintenant,display:flex
vous pouvez simplement l'utiliseralign-self-center
sur n'importe quelle colonne pour le centrer verticalement ...ou, utilisez
align-items-center
sur l'ensemble.row
pour aligner verticalement au centre toutcol-*
dans la rangée ...Bootstrap 4 - Demo colonnes verticales de différentes hauteurs
3 - Centre vertical utilisant des outils d'affichage:
Bootstrap 4 a utils d'affichage qui peuvent être utilisés pour
display:table
,display:table-cell
,display:inline
, etc .. Ils peuvent être utilisés avec les utils d'alignement vertical à roues alignées align, inline-block ou des éléments de cellules de tableau.Bootstrap 4 - Centre vertical à l'aide des utilitaires d'affichage Démo
Voir aussi: Vertical Align Center dans Bootstrap 4
Bootstrap 3
Méthode Flexbox sur le conteneur des articles à centrer:
Transformez la méthode translateY:
Afficher la méthode en ligne:
Démonstration des méthodes de centrage Bootstrap 3
la source
mx-auto
(centrage horizontal), il est donc logique de centrermy-auto
verticalement (axe y).Essayez ceci dans le CSS de la div:
la source
J'ai pensé partager ma "solution" au cas où cela aiderait quelqu'un d'autre qui ne connaît pas les requêtes @media elles-mêmes.
Grâce à la réponse de @ HashemQolami, j'ai construit des requêtes multimédias qui fonctionneraient mobile-up comme les classes col- * afin que je puisse empiler le col- * pour mobile mais les afficher verticalement au centre pour des écrans plus grands, par exemple
.
Des mises en page plus compliquées qui nécessitent un nombre différent de colonnes par résolution d'écran (par exemple 2 lignes pour -xs, 3 pour -sm et 4 pour -md, etc.) nécessiteraient un finagling plus avancé, mais pour une page simple avec -xs empilés et -sm et plus en rangées, cela fonctionne bien.
la source
clear: both;
aux classes dans les requêtes multimédias pour que cela fonctionne..row
modificateur ... donc ça devrait ressemblerclass="row row-sm-flex-center"
. La.row
définition BS3 gère leclear:both;
clear: both;
nouveau.Suite à la réponse acceptée, si vous ne souhaitez pas personnaliser le balisage, pour la séparation des préoccupations ou simplement parce que vous utilisez un CMS, la solution suivante fonctionne très bien:
La limitation ici est que vous ne pouvez pas hériter de la taille de police de l'élément parent car la ligne définit la taille de police à 0 afin de supprimer les espaces blancs.
la source
Je préfère cette méthode selon le centre vertical CSS de David Walsh :
Le
transform
n'est pas essentiel; il trouve juste le centre un peu plus précisément. Internet Explorer 8 peut être légèrement moins centré en conséquence, mais ce n'est toujours pas mauvais - Puis-je utiliser - Transforme 2d .la source
C'est ma solution. Ajoutez simplement cette classe à votre contenu CSS.
Ensuite, votre code HTML ressemblerait à ceci:
la source
Je viens de le faire et il fait ce que je veux qu'il fasse.
Et maintenant ma page ressemble
la source
Je trouve vraiment que le code suivant fonctionne avec Chrome et non avec d'autres navigateurs que la réponse actuellement sélectionnée:
Lien Bootply
Vous devrez peut-être modifier les hauteurs (en particulier sur
.v-center
) et supprimer / changer la division selondiv[class*='col-']
vos besoins.la source
J'ai rencontré ce même problème. Dans mon cas, je ne connaissais pas la hauteur du conteneur extérieur, mais voici comment je l'ai fixé:
Réglez d'abord la hauteur de vos éléments
html
etbody
afin qu'ils soient à 100%. C'est important! Sans cela, les élémentshtml
etbody
hériteront simplement de la taille de leurs enfants.Ensuite, j'ai eu une classe de conteneur externe avec:
Et enfin le conteneur intérieur avec classe:
Le HTML est aussi simple que:
C'est tout ce dont vous avez besoin pour aligner verticalement le contenu. Découvrez-le au violon:
Jsfiddle
la source
Il n'y a aucun besoin de tableau et de cellules de tableau. Cela peut être réalisé facilement en utilisant transform.
Exemple: http://codepen.io/arvind/pen/QNbwyM
Code:
la source
Si vous utilisez la version Less de Bootstrap et compilez vous-même en CSS, vous pouvez utiliser certaines classes d'utilitaires à utiliser avec les classes Bootstrap.
J'ai trouvé que cela fonctionnait parfaitement bien là où je voulais préserver la réactivité et la configurabilité du système de grille Bootstrap (comme avec
-md
ou-sm
), mais je veux que toutes les colonnes d'une ligne donnée aient toutes la même hauteur verticale (afin que je puisse puis aligner verticalement leur contenu et faire en sorte que toutes les colonnes de la ligne partagent un milieu commun).CSS / Moins:
HTML:
la source
J'ai développé un peu la réponse de zessx , afin de la rendre plus facile à utiliser lors du mélange de différentes tailles de colonnes sur différentes tailles d'écran.
Si vous utilisez Sass , vous pouvez l'ajouter à votre fichier scss:
Ce qui génère le CSS suivant (que vous pouvez utiliser directement dans vos feuilles de style, si vous n'utilisez pas Sass):
Vous pouvez maintenant l'utiliser sur vos colonnes réactives comme ceci:
la source
Les comportements Flex sont pris en charge nativement depuis Bootstrap 4. Ajoutez
d-flex align-items-center
lerow
div. Vous n'avez plus besoin de modifier votre contenu CSS.Exemple simple: http://jsfiddle.net/vgks6L74/
Avec votre exemple: http://jsfiddle.net/7zwtL702/
Source: Flex · Bootstrap
la source
OK, accidentellement, j'ai mélangé quelques solutions, et cela fonctionne finalement maintenant pour ma mise en page où j'ai essayé de créer un tableau 3x3 avec des colonnes Bootstrap sur la plus petite résolution.
la source
la source
Essaye ça,
la source
Vous pouvez le faire de plusieurs manières:
Utilisation
et le CSS du conteneur à
Utilisez le remplissage avec media-screen pour modifier le remplissage par rapport à la taille de l'écran. Écran Google @media pour en savoir plus.
Utiliser un rembourrage relatif
C'est-à-dire, spécifiez le rembourrage en termes de%
la source
Avec Bootstrap 4 (qui est actuellement en alpha), vous pouvez utiliser la
.align-items-center
classe. Vous pouvez donc conserver le caractère réactif de Bootstrap. Fonctionne tout de suite très bien pour moi. Voir la documentation de Bootstrap 4 .la source
HTML
CSS
la source
Je suis tombé sur la même situation où je voulais aligner quelques éléments div verticalement dans une rangée et j'ai trouvé que les classes Bootstrap col-xx-xx appliquent le style à la div comme float: left.
J'ai dû appliquer le style sur les éléments div comme style = "Float: none" et tous mes éléments div ont commencé alignés verticalement. Voici l'exemple de travail:
Lien JsFiddle
Juste au cas où quelqu'un voudrait en savoir plus sur la propriété float:
W3Schools - Float
la source