J'essaye de centrer verticalement deux <p>
éléments.
J'ai suivi le tutoriel à phrogz.net mais les éléments sont toujours placés au-dessus du div, en dessous du div, alignés en haut dans le div.
J'essaierais autre chose, mais la plupart des questions ici renvoient simplement à ce tutoriel.
Cet extrait concerne une bannière située en haut d'une page Web.
.banner {
width: 980px;
height: 69px;
background-image: url(../images/nav-bg.jpg);
background-repeat: no-repeat;
/* color: #ffffff; */
}
.bannerleft {
float: left;
width: 420px;
text-align: right;
height: 652px;
line-height: 52px;
font-size: 28px;
padding-right: 5px;
}
.bannerright {
float: right;
width: 555px;
text-align: left;
position: relative;
}
.bannerrightinner {
position: absolute;
top: 50%;
height: 52px;
margin-top: -26px;
}
<div class="banner">
<div class="bannerleft">
I am vertically centered
</div>
<div class="bannerright">
<div class="bannerrightinner">
<p>I should be</p>
<p>vertically centered</p>
</div>
</div>
<div class="clear">
</div>
</div>
Ajoutez ce qui suit: display: table; à bannerRight
affichage: table-cellule; et vertical-align: milieu; à bannerrightinner
Je n'ai pas essayé cela, merci de me faire part de vos commentaires si cela ne fonctionne pas. ;)
EDIT: oublié de mentionner: retirer les propriétés 'float' et 'position'
Voici deux façons de centrer les divs dans les divs.
Une façon utilise CSS Flexbox et l'autre utilise CSS table et positionnement propriétés.
Dans les deux cas, la hauteur des div centrés peut être variable, indéfinie, inconnue, peu importe. La hauteur des div centrés n'a pas d'importance.
Voici le HTML pour les deux:
<div id="container">
<div class="box" id="bluebox">
<p>DIV #1</p>
</div>
<div class="box" id="redbox">
<p>DIV #2</p>
</div>
</div>
#container {
display: flex; /* establish flex container */
flex-direction: column; /* stack flex items vertically */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
border: 1px solid black;
}
.box {
width: 300px;
margin: 5px;
text-align: center;
}
Les deux éléments enfants (.box
) sont alignés verticalement avec flex-direction: column
. Pour un alignement horizontal, changez le flex-direction
à row
(ou supprimez simplement la règle comme flex-direction: row
est le paramètre par défaut). Les éléments resteront centrés verticalement et horizontalement ( DEMO ).
body {
display: table;
position: absolute;
height: 100%;
width: 100%;
}
#container {
display: table-cell;
vertical-align: middle;
}
.box {
width: 300px;
padding: 5px;
margin: 7px auto;
text-align: center;
}
Quelle méthode utiliser ...
Si vous n'êtes pas sûr de la méthode à utiliser, je vous recommande flexbox pour ces raisons:
Prise en charge du navigateur
Flexbox est pris en charge par tous les principaux navigateurs, sauf IE <1 . Certaines versions récentes de navigateurs, telles que Safari 8 et IE10, nécessitent préfixes du fournisseur =. Pour un moyen rapide d'ajouter des préfixes, utilisez Autoprefixer . Plus de détails dans cette réponse .