web-dev-qa-db-fra.com

Comment centrer un élément horizontalement et verticalement?

J'essaie de centrer le contenu de mes onglets verticalement, mais lorsque j'ajoute le style CSS display:inline-flex, l'alignement de texte horizontal disparaît.

Comment puis-je créer les alignements de texte x et y pour chacun de mes onglets?

* { box-sizing:border-box; }
#leftFrame {
  background-color:green;
  position:absolute;
  left:0;
  right:60%;
  top:0;
  bottom:0;
}
#leftFrame #tabs {
  background-color:red;
  position:absolute;
  top:0;
  left:0;
  right:0;
  height:25%;
}
#leftFrame #tabs div {
  border:2px solid black;
  position:static;
  float:left;
  width:50%;
  height:100%;
  text-align:center;
  display: inline-flex;
  align-items: center;
}
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>        
  </div>
</div>

282
shuji

.container {
    position: absolute;
    top: 50%;
    left: 50%;
    -moz-transform: translateX(-50%) translateY(-50%);
    -webkit-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}
<div class="container">
    <span>I'm vertically/horizontally centered!</span>
</div>


  • Approche 2 - Méthode Flexbox:

    _/Exemple ici_/Exemple d'écran complet

    Dans navigateurs pris en charge , définissez la display de l'élément ciblé sur flex et utilisez align-items: center pour le centrage vertical et justify-content: center pour le centrage horizontal. N'oubliez pas d'ajouter des préfixes de fournisseur pour une prise en charge supplémentaire du navigateur ( voir l'exemple ).

html, body, .container {
    height: 100%;
}

.container {
    display: -webkit-flexbox;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
    justify-content: center;
}
<div class="container"> 
  <span>I'm vertically/horizontally centered!</span>
</div>


  • Approche 3 - table-cellvertical-align: middle:

    _/Exemple ici_/Exemple d'écran complet

    Dans certains cas, vous devrez vous assurer que la hauteur de l'élément htmlbody est définie sur 100%.

    Pour un alignement vertical, définissez la variable width/height de l'élément parent sur 100% et ajoutez display: table. Ensuite, pour l'élément enfant, remplacez display par table-cell et ajoutez vertical-align: middle.

    Pour le centrage horizontal, vous pouvez soit ajouter text-align: center pour centrer le texte, soit tout autre élément enfant inline. Vous pouvez également utiliser margin: 0 auto, en supposant que l'élément est de niveau block.

html, body {
    height: 100%;
}
.parent {
    width: 100%;
    height: 100%;
    display: table;
    text-align: center;
}
.parent > .child {
    display: table-cell;
    vertical-align: middle;
}
<section class="parent">
    <div class="child">I'm vertically/horizontally centered!</div>
</section>


  • Approche 4 - 50% absolument positionné à partir du haut avec déplacement:

    _/Exemple ici_/Exemple d'écran complet

    Cette approche suppose que le texte a une hauteur connue - dans ce cas, 18px. Positionnez simplement l'élément 50% à partir du haut, par rapport à l'élément parent. Utilisez une valeur négative margin-top qui correspond à la moitié de la hauteur connue de l'élément, dans ce cas, -9px.

html, body, .container {
    height: 100%;
}

.container {
    position: relative;
    text-align: center;
}

.container > p {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    margin-top: -9px;
}
<div class="container">
    <p>I'm vertically/horizontally centered!</p>
</div>


  • Approche 5 - La méthode line-height (la moins flexible possible - non suggérée):

    Exemple ici

    Dans certains cas, l'élément parent aura une hauteur fixe. Pour le centrage vertical, il vous suffit de définir une valeur line-height sur l'élément enfant égale à la hauteur fixe de l'élément parent.

    Bien que cette solution fonctionne dans certains cas, il convient de noter qu'elle ne fonctionnera pas s'il y a plusieurs lignes de texte - comme ceci .

.parent {
    height: 200px;
    width: 400px;
    background: lightgray;
    text-align: center;
}

.parent > .child {
    line-height: 200px;
}
<div class="parent">
    <span class="child">I'm vertically/horizontally centered!</span>
</div>

519
Josh Crozier

Si CSS3 est une option (ou si vous avez un repli), vous pouvez utiliser transform:

.center {
    right: 50%;
    bottom: 50%;
    transform: translate(50%,50%);
    position: absolute;
}

Contrairement à la première approche ci-dessus, vous ne voulez pas utiliser left: 50% avec la traduction négative car il y a un bogue de débordement dans IE9 +. Utilisez une valeur de droite positive et vous ne verrez pas les barres de défilement horizontales.

16
Mr Bullets

La meilleure façon de centrer une boîte verticalement et horizontalement consiste à utiliser deux conteneurs:

Le conteneur extérieur:

  • devrait avoir display: table;

Le conteneur intérieur:

  • devrait avoir display: table-cell;
  • devrait avoir vertical-align: middle;
  • devrait avoir text-align: center;

La zone de contenu:

  • devrait avoir display: inline-block;
  • devrait ajuster l'alignement horizontal du texte, sauf si vous voulez que le texte soit centré

Démo:

body {
    margin : 0;
}

.outer-container {
    display: table;
    width: 80%;
    height: 120px;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

Voir aussi this Fiddle !

Centré au milieu de la page:

Pour centrer votre contenu au milieu de votre page, ajoutez ce qui suit à votre conteneur externe:

  • position : absolute;
  • width: 100%;
  • height: 100%;

Voici une démo pour ça:

body {
    margin : 0;
}

.outer-container {
    position : absolute;
    display: table;
    width: 100%;
    height: 100%;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

Voir aussi this Fiddle !

6
John Slegers

La solution la plus simple et la plus propre pour moi utilise la propriété CSS3 "transform":

.container {
  position: relative;
}

.container a {
  position: absolute;
  top: 50%;
  transform: translate(0,-50%);
}
<div class="container">
  <a href="#">Hello world!</a>
</div>

3
tocqueville

    .align {
        display: flex;
        width: 400px;
        height: 400px;
        border: solid 1px black;
        align-items: center;
        justify-content: space-around;
    }
    .align div:first-child {
        width: 20px;
        height: 20px;
        background-color: red;
        position: absolute; 
    }
    .align div {
        width: 20px;
        height: 20px;
        background-color: blue;
    }
    <div class='align'>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>

Le premier enfant sera aligné verticalement et horizontalement au centre

2
Krishna

Voici comment utiliser 2 propriétés de flex simples pour centrer n divs sur les 2 axes:

  • Définissez la hauteur de votre conteneur: le corps est défini sur au moins 100vh.
  • align-items: center centre verticalement les blocs
  • justify-content: space-around distribuera l'espace horizontal libre autour des divs
body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: space-around;
}
<div>foo</div>
<div>bar</div>
1
Creaforge

Afin de centrer verticalement et horizontalement un élément, nous pouvons également utiliser les propriétés mentionnées ci-dessous.

Cette propriété CSS aligns-items verticalement accepte les valeurs suivantes:

flex-start : Les éléments sont alignés sur le haut du conteneur.

flex-end : Les éléments s'alignent au bas du conteneur.

center : Les articles sont alignés au centre vertical du conteneur.

baseline : Les éléments sont affichés sur la ligne de base du conteneur.

stretch : Les articles sont étirés pour s'adapter au conteneur.

Cette propriété CSS justification-contenu , qui aligne les éléments horizontalement et accepte les valeurs suivantes:

flex-start : Les éléments sont alignés sur le côté gauche du conteneur.

flex-end : Les articles sont alignés sur le côté droit du conteneur.

center : Les articles sont alignés au centre du conteneur.

space-between : Les éléments sont affichés avec un espacement égal entre eux.

space-around : Les éléments sont affichés avec un espacement égal autour d'eux.

1
Divyanshu Rawat

Exécutez cet extrait de code et voyez un div aligné verticalement et horizontalement.

html,
body,
.container {
  height: 100%;
  width: 100%;
}
.container {
  display: flex;
  align-items: center;
  justify-content: center;
}
.mydiv {
  width: 80px;
}
<div class="container">
  <div class="mydiv">h & v aligned</div>
</div>

1
JFathi

centrer la div dans une page check the fiddle link

#vh {
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 200px;
    height: 200px;
    background: white;
    text-align: center;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
<div id="vh">Div to be aligned vertically</div>

Mise à jour Une autre option consiste à utiliser la boîte flexible. check the fiddle link

.vh {
    background-color: #ddd;
    height: 200px;
    align-items: center;
    display: flex;
}
.vh > div {
    width: 100%;
    text-align: center;
    vertical-align: middle;
}
<div class="vh">
    <div>Div to be aligned vertically</div>
</div>
1
Moes

Une autre approche consiste à utiliser la table:

<div style="border:2px solid #8AC007; height:200px; width:200px;">
  <table style="width:100%; height:100%">
    <tr style="height:100%">
      <td style="height:100%; text-align:center">hello, multiple lines here, this is super long, and that is awesome, dude</td>
    </tr>
  </table>
</div>

1
iamcoming

Ci-dessous, l'approche Flex-box pour obtenir le résultat souhaité

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Flex-box approach</title>
<style>
  .tabs{
    display: -webkit-flex;
    display: flex;
    width: 500px;
    height: 250px;
    background-color: grey;
    margin: 0 auto;
    
  }
  .f{
    width: 200px;
    height: 200px;
    margin: 20px;
    background-color: yellow;
    margin: 0 auto;
    display: inline; /*for vertically aligning */
    top: 9%;         /*for vertically aligning */
    position: relative; /*for vertically aligning */
  }
</style>
</head>
<body>

    <div class="tabs">
        <div class="f">first</div>
        <div class="f">second</div>        
    </div>

</body>
</html>

1
Manish62

Approche css grille

#wrapper {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
}
.main {
    background-color: #444;
}
<div id="wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box main"></div>
</div>

0
Tomasz Zieliński

Le moyen le plus simple de centrer une div verticalement et horizontalement est le suivant:

<div style="display: table; width: 200px; height: 200px; border: 1px solid black;">
    <div style="display: table-cell; vertical-align: middle; text-align: center;">
        Text Here
    </div>
</div>

Un autre exemple :

.parent {
    display: table; 
    width: 100%; 
    height: 100%;
}

.child {
    display: table-cell; 
    vertical-align: middle;
    text-align: center;
}


<div class="parent">
    <div class="child">
        <h4><u>SERVICE IN BANGLADESH FLEET RESERVE <br> AND <br> RE-ENGAGEMENT ORDER FOR DEFENCE SERVICE</u></h4>
    </div>
</div>
0
Bablu Ahmed
  • Approche 6

/*Change units to "%", "px" or whatever*/

#wrapper{
  width: 50%;
  height: 70vh;
  background: rgba(0,0,0,.5);
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
}
#left{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  background: red;
}
#right{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  background: green;
}
.txt{
  text-align: center;
  line-height: 50vh;
}
<div id="wrapper">
   <div id="left" class="txt">Left</div>
   <div id="right" class="txt">Right</div>
</div>

    .container{ 
               width: 50%;  //Your container width here
               height: 50%; //Your container height here
               position: absolute; 
               top: 0; 
               right: 0;  
               bottom: 0; 
               left: 0; 
               margin: auto;
    }
0
derp

Simple! Utilisez display flex sur conteneur et marge auto sur texte !!!!

#hood{

 width : 300px;
 height: 100px;
 border: solid 1px #333333;
 display: flex; 
}

#hood span{

  margin: auto
}



<html>
<head></head>
    <body>
        <div id="hood">
            <span> I Am Centered</span>
        </div>
    </body>
</html>

Démo: https://jsfiddle.net/ay95f08g/

Testé: Safari, Chrome, Firefox et Opera sur MacOs Mojave. (toute dernière mise à jour le 25 février 2019) 

0
Diego Favero

Pour ce faire, utilisez CSS (votre élément display:inline-grid + grid-auto-flow: row;) Grid et Flex Box (élément parent display:flex;

Voir l'extrait ci-dessous 

#leftFrame {
  display: flex;
  height: 100vh;
  width: 100%;
}

#tabs {
  display: inline-grid;
  grid-auto-flow: row;
  grid-gap: 24px;
  justify-items: center;
  margin: auto;
}

html,body {
  margin:0;
  padding:0;
}
<div>
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>        
  </div>
</div>
</div>

0
Springer F

Il suffit de faire en haut, en bas, à gauche et à droite à 0. 

<html>
<head>
<style>
<div> 
{
position: absolute;
margin: auto;
background-color: lightblue;
width: 100px;
height :100px;
padding: 25px;
top :0;
right :0;
bottom:0;
left:0;
}


</style>
</head>
<body>

<div> I am in the middle</div>

</body>
</html>
0
yoginder bagga