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>
transform
translateX
translateY
:_/Exemple ici_/Exemple d'écran complet
Dans navigateurs pris en charge (la plupart d'entre eux), vous pouvez utiliser top: 50%
left: 50%
en combinaison avec translateX(-50%) translateY(-50%)
pour centrer de manière dynamique verticalement/horizontalement l'élément.
.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>
_/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>
table-cell
vertical-align: middle
:_/Exemple ici_/Exemple d'écran complet
Dans certains cas, vous devrez vous assurer que la hauteur de l'élément html
body
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>
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>
line-height
(la moins flexible possible - non suggérée):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>
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.
La meilleure façon de centrer une boîte verticalement et horizontalement consiste à utiliser deux conteneurs:
display: table;
display: table-cell;
vertical-align: middle;
text-align: center;
display: inline-block;
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 !
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 !
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>
.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
Voici comment utiliser 2 propriétés de flex simples pour centrer n divs sur les 2 axes:
align-items: center
centre verticalement les blocsjustify-content: space-around
distribuera l'espace horizontal libre autour des divsbody {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: space-around;
}
<div>foo</div>
<div>bar</div>
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.
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>
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>
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>
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>
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>
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>
/*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;
}
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)
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>
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>