442 votes

Alignement vertical du centre dans Bootstrap

J'essaie de centrer mon conteneur au milieu de la page en utilisant Bootstrap 4. Je n'y suis pas parvenu jusqu'à présent. Toute aide serait la bienvenue.

Je l'ai construit à Codepen.io pour que vous puissiez jouer avec et me dire ce qui fonctionne, car je suis à court d'idées...

var currentAuthor = "";
var currentQuote  = "";
function randomQuote() {
  $.ajax({
      url: "https://api.forismatic.com/api/1.0/?",
      dataType: "jsonp",
      data: "method=getQuote&format=jsonp&lang=en&jsonp=?",
      success: function( response ) {
        $("#quote-content").html('<h2 id="quote-content" class="display-5"><i class="fa fa-quote-left" aria-hidden="true"> ' + response.quoteText + ' <i class="fa fa-quote-right" aria-hidden="true"></i></h2>');
        $("#quote-author").html('<p id="quote-author" class="lead"><em>' + response.quoteAuthor + '</em></p>');

        currentAuthor = response.quoteAuthor;
        currentQuote  = response.quoteText
      }
  });
}

function openURL(url){
  window.open(url,'Share', 'width=550, height=400, toolbar=0, scrollbars=1 ,location=0 ,statusbar=0,menubar=0, resizable=0');
}

function tweetQuote(){
      openURL('https://twitter.com/intent/tweet?hashtags=quotes,freecodecamp&related=freecodecamp&text=' + encodeURIComponent('"' + currentQuote + '" - ' + currentAuthor));
}

$(document).ready(function () {
    randomQuote();

    $("#get-another-quote-button").click(function(){
        randomQuote();
    });

   $('#tweet').on('click', function() {
       tweetQuote();
   });
});

html, body {
  background-image: url("https://www.mylinea.com/wp-content/uploads/beautiful-trees-stock-photo-055.jpg");
    background-color: #17234E;
    margin-bottom: 0;
    min-height: 30%;
    background-repeat: no-repeat;
    background-position: center;
    -webkit-background-size: cover;
    background-size: cover;
}

.btn-new-quote {
    color: #0C0C0D;
    background-color: transparent;
    border-color: #414147;
}

.btn-new-quote:hover {
    color: #0C0C0D;
    background-color: #9A989E;
    border-color: #0C0C0D;
}

#tweet {
    color: RGB(100, 100, 100);
}

#tweet:hover {
    color: RGB(50, 50, 50);
}

.jumbotron {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
    opacity: .85;
    border-color:  RGB(50, 50, 50);
    padding-bottom: 8px;
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
<div class="container">
    <div class="row justify-content-center align-self-center">
        <div class="col-sm-6">
            <div class="jumbotron vertical-center text-center">
                <h2 id="quote-content" class="display-5"><i class="fa fa-quote-left" aria-hidden="true"></i><i class="fa fa-quote-right" aria-hidden="true"></i></h2>
                <p id="quote-author" class="lead"><em></em></p>
                <hr class="my-2">
                <div class="row align-items-center justify-content-between">
                    <div class="col-sm-1-4 text-left">
                        <a id="tweet" href="#">
                            <h2 class="display-4"><i class="fa fa-twitter" aria-hidden="true"></i></h2>
                        </a>
                    </div>
                    <div class="col-sm-1-4 text-right">
                        <button id="get-another-quote-button" type="button" class="btn btn-outline-secondary  btn-new-quote">Don't Quote Me on This...</button>
                    </div>

                </div>
            </div>
        </div>
    </div>
</div>

916voto

Skelly Points 27772

Important ! Le centre vertical est relatif à la hauteur du parent

Si le parent de l'élément que vous essayez de centrer n'a pas d'élément défini hauteur , aucun des solutions de centrage vertical fonctionneront !

Maintenant, le centrage vertical...

Bootstrap 5 (Mise à jour 2021)

Bootstrap 5 est toujours flexbox de sorte que le centrage vertical fonctionne de la même manière que Bootstrap 4. Par exemple, align-items-center , justify-content-center ou les marges automatiques peuvent être utilisées sur le parent de la flexbox ( row o d-flex ).

  • utiliser align-items-center sur un parent de ligne flexbox ( row o d-flex )
  • utiliser justify-content-center sur un parent de colonne flexbox ( d-flex flex-column )
  • utiliser my-auto sur un parent flexbox

Centre vertical dans Bootstrap 5


Bootstrap 4

Vous pouvez utiliser le nouveau utilitaires flexbox et taille pour faire le container pleine hauteur et display: flex . Ces options ne nécessitent pas de CSS supplémentaire (sauf que le la hauteur du conteneur (ie:html,body) doit être de 100%. ).

Option 1 align-self-center sur l'enfant flexbox

<div class="container d-flex h-100">
    <div class="row justify-content-center align-self-center">
     I'm vertically centered
    </div>
</div>

https://codeply.com/go/fFqaDe5Oey

Option 2 align-items-center sur le parent flexbox ( .row es display:flex; flex-direction:row )

<div class="container h-100">
    <div class="row align-items-center h-100">
        <div class="col-6 mx-auto">
            <div class="jumbotron">
                I'm vertically centered
            </div>
        </div>
    </div>
</div>

enter image description here

https://codeply.com/go/BumdFnmLuk

Option 3 justify-content-center sur le parent flexbox ( .card es display:flex;flex-direction:column )

<div class="container h-100">
    <div class="row align-items-center h-100">
        <div class="col-6 mx-auto">
            <div class="card h-100 border-primary justify-content-center">
                <div>
                    ...card content...
                </div>
            </div>
        </div>
    </div>
</div>

https://codeply.com/go/3gySSEe7nd


En savoir plus sur le centrage vertical de Bootstrap 4

Maintenant que Bootstrap 4 offre le flexbox et le autres services publics Il existe de nombreuses approches de l'alignement vertical verticale. http://www.codeply.com/go/WG15ZWC4lf

1 - Centre vertical avec marges automatiques :

Une autre façon de centrer verticalement est d'utiliser my-auto . Cela permet de centrer l'élément dans son conteneur. Par exemple, h-100 rend la rangée pleine hauteur, et my-auto va centrer verticalement le col-sm-12 colonne.

<div class="row h-100">
    <div class="col-sm-12 my-auto">
        <div class="card card-block w-25">Card</div>
    </div>
</div>

Centrage vertical avec marges automatiques Démo

my-auto représente les marges sur l'axe vertical des y et est équivalent à :

margin-top: auto;
margin-bottom: auto;

2 - Centre vertical avec Flexbox :

vertical center grid columns

Depuis Bootstrap 4 .row est maintenant display:flex vous pouvez simplement utiliser align-self-center sur n'importe quelle colonne pour la centrer verticalement...

       <div class="row">
           <div class="col-6 align-self-center">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

ou, utiliser align-items-center sur l'ensemble du .row pour centrer verticalement toutes les col-* dans la rangée...

       <div class="row align-items-center">
           <div class="col-6">
                <div class="card card-block">
                 Center
                </div>
           </div>
           <div class="col-6">
                <div class="card card-inverse card-danger">
                    Taller
                </div>
          </div>
    </div>

Centre vertical Colonnes de hauteur différente Démo

Voir cette Q/A pour centrer, mais maintenir une hauteur égale.


3 - Centre vertical utilisant les outils d'affichage :

Bootstrap 4 a outils d'affichage qui peut être utilisé pour display:table , display:table-cell , display:inline etc. Ceux-ci peuvent être utilisés avec le utilitaires d'alignement vertical pour aligner des éléments de cellules de type inline, inline-block ou table.

<div class="row h-50">
    <div class="col-sm-12 h-100 d-table">
        <div class="card card-block d-table-cell align-middle">
            I am centered vertically
        </div>
    </div>
</div>

Centre vertical à l'aide de Display Utils Démo

Autres exemples
Image centrale verticale en <div>
Centrer verticalement .row dans .container
Centre vertical et bas dans <div>
Centrer verticalement l'enfant dans le parent
Jumbotron plein écran du centre vertical


Important ! Ai-je mentionné la taille ?

Rappelez-vous que le centrage vertical est relatif à la hauteur du parent élément. Si vous voulez centrer sur la page entière, dans la plupart des cas, cela devrait être votre CSS...

body,html {
  height: 100%;
}

Ou utilisez min-height: 100vh ( min-vh-100 dans Bootstrap 4.1+) sur le parent/conteneur. Si vous voulez centrer un élément enfant à l'intérieur du parent. Le parent doit avoir un hauteur .

Voir aussi :
Alignement vertical dans bootstrap 4
Alignement vertical et horizontal du centre Bootstrap

1 votes

Lorsque j'utilise l'option ci-dessus sur une page avec une barre de navigation, j'obtiens une barre de défilement. Je pense qu'il ajoute 100% de la hauteur sous la barre de navigation et qu'il la centre. Comment puis-je résoudre ce problème ?

0 votes

J'essaie d'aligner plusieurs rangées au centre avec une boîte flexible. Je veux aligner tous les boutons au centre. codeply.com/go/5abdqC33cU

1 votes

J'ai préparé un codepen montrant actuellement 3 manières de centrer basées sur les manières montrées ici : codepen.io/yigith/pen/oNjmGEL

37voto

Manoj Points 214

Les classes bootstrap 4 suivantes m'ont aidé à résoudre ce problème

<div class="col text-center justify-content-center align-self-center">
    <img width=3rem src=".." alt="...">
</div>

3 votes

Mais cela n'a pas centré mon div verticalement.

0 votes

Pouvez-vous s'il vous plaît élaborer sur votre code css. Partagez un extrait de celui-ci, je vais examiner le problème que vous rencontrez.

35voto

Pete Points 12054

Vous pouvez aligner verticalement votre conteneur en faisant fléchir le conteneur parent et en ajoutant align-items:center :

body {
  display:flex;
  align-items:center;
}

Stylo mis à jour

1 votes

Ohhh lol, j'ai manqué le lien dans la description... tu as aussi ajouté html, body {height:100%} ... l'ajout qui a fait que ça marche ! Merci !

3 votes

Votre réponse ne résout pas le problème de la manière demandée (en utilisant le bootstrap)

1 votes

Je ne suis pas du tout d'accord avec vous, vous proposez une solution de contournement alors que la question était de savoir comment faire avec les classes Bootstrap.

18voto

Greg Gum Points 1441

Comme aucune des réponses ci-dessus n'a fonctionné pour moi, j'ajoute une autre réponse.

Objectif : aligner verticalement et horizontalement un div sur une page en utilisant les classes flexbox de Bootstrap 4.

Étape 1 : Définissez votre div la plus extérieure à une hauteur de 100vh . La hauteur est ainsi fixée à 100 % de la hauteur de la fenêtre. Si vous ne faites pas cela, rien d'autre ne fonctionnera. En fixant la hauteur à 100% est uniquement relative au parent, donc si le parent n'a pas la hauteur totale du viewport, rien ne fonctionnera. Dans l'exemple ci-dessous, j'ai défini le corps à 100vh.

Étape 2 : Définissez le conteneur div pour qu'il soit le conteneur flexbox avec la balise d-flex classe.

Étape 3 : Centrez le div horizontalement avec le justify-content-center classe.

Étape 4 : Centrez la div verticalement avec le align-items-center

Étape 5 : Exécutez la page, visualisez votre div centré verticalement et horizontalement.

Notez qu'il n'y a pas de classe spéciale à définir sur la div centrée elle-même (la div enfant).

<body style="background-color:#f2f2f2; height:100vh;">

<div class="h-100 d-flex justify-content-center align-items-center">
    <div style="height:600px; background-color:white; width:600px;">
</div>

</div>

</body>

0 votes

@AjayKumar, Voulez-vous partager vos modifications ?

0 votes

Merci, surtout le 100vh L'astuce m'a beaucoup aidé. Bootstrap fournit également le vh-100 pour cela.

12voto

Nate Beers Points 50
.jumbotron {
    position: relative;
    top: 50%;
    transform: translateY(-50%);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X