J'ai un conteneur <div id="wrapper">
dans lequel tout le contenu du site sera présent. J'ai essayé de faire le centre div verticalement et horizontalement en utilisant la propriété css comme margin:0 auto; on #wrapper
.
#wrapper
{
width:500px;
height:500px;
margin:0 auto;
background:#f7f7f7;
}
En utilisant ci-dessus css, je peux faire en sorte que la division se trouve en haut au centre de l'écran, mais comment la centrer (verticalement). quand je fais un zoom arrière dans firefox, ma div va effectuer un zoom arrière en haut au centre, mais ce que je veux, il devrait toujours être présent au centre de l'écran, à la fois verticalement et horizontalement.
Quelqu'un peut-il me suggérer comment puis-je obtenir la mise en page comme ça.
Merci d'avance.
#wrapper
{
width:500px;
height:500px;
margin:0 auto;
background:#f7f7f7;
position:absolute;
left:50%;
top:50%;
margin-left:-250px;
margin-top:-250px;
}
Démo: http://jsfiddle.net/fJtNQ/
Pourquoi ça marche?
Eh bien, fondamentalement, vous avez un élément de positionnement absolu à l’intérieur du dom. Cela signifie que vous pouvez le positionner où vous voulez et si vous n'avez pas d'élément positionné comme parent, les valeurs left et top correspondront à la distance entre l'origine gauche et supérieure du document.
L'affectation de left:50%
et top:50%
permet à cet élément de toujours être positionné au centre de l'écran, mais vous trouverez en son centre le coin supérieur gauche de l'élément.
Si vous avez une largeur/hauteur fixe, vous pouvez facilement "traduire" le point situé au centre en faisant le centre de la division wrapper en donnant des valeurs négatives pour margin-left
et margin-top
(ainsi, à l'aide de calculs de base extrêmement simples, leurs valeurs seront -(width/2)
et -(height/2)
)
MODIFIER
Vous pouvez aussi facilement centrer en utilisant flexbox
, plus (un gros), vous n'avez pas besoin de spécifier w/h, c'est-à-dire:
body { /* can also be whatever container */
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
}
#wrapper {
/* whatever style u want */
}
La réponse de @ stecb fonctionne bien si vous travaillez avec une largeur/hauteur fixe.
Pour positionner une div ou une image verticalement au centre de toutes les fenêtres et la rendre sensible, utilisez ceci:
#elem-to-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Je viens de remplacer margin-left et margin-top par transform.
Si vous voulez une marge entourant l'élément, utilisez ceci:
#outer-elem {
width: 100%;
height: 100%;
padding: 30px;
background: #fafafa;
position: relative;
}
#elem-to-center {
width: calc(100% - 60px);
max-height: calc(100% - 60px);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
J'ai trouvé cela utile même dans les vues réactives.
Voici une solution pour ceux qui ont besoin de centrer une div enfant par rapport à viewport et non "par rapport à parent div". Les autres solutions mentionnées ici ne fonctionnent pas dans ce cas car elles ont tendance à rendre le centre de la division enfant par rapport à la division parent.
<div id="container">
<div id="wrapper">Always center, No matter the parent div's position</div>
</div>
#wrapper {
width:300px;
height:300px;
margin:0 auto;
background:green;
position:fixed;
left:50%;
top:50%;
margin-left:-150px;
margin-top:-150px;
}
#container {
display: block;
position: absolute;
width: 400px;
height: 400px;
border: 1px solid red;
bottom: 0;
left: 0;
}
J'utilise jQuery
$(window).resize(function(){
$('.className').css({
position:'absolute',
left: ($(window).width() - $('.className').outerWidth())/2,
top: ($(window).height() - $('.className').outerHeight())/2
});
});
// To initially run the function:
$(window).resize();
Le moyen le plus simple et le plus simple de procéder consiste à définir la hauteur, la marge (et la largeur, si vous le souhaitez) à l'aide de la taille de la fenêtre d'affichage.
Supposons que vous souhaitiez que la height
de votre conteneur occupe 60% (60vh) de l’écran, vous pouvez diviser le reste (40vh, puisque la hauteur totale de la fenêtre = 100vh) équitablement entre les marges supérieure et inférieure de sorte que L'élément s'aligne automatiquement au centre.
Régler le margin-left
et le margin-right
sur auto
s'assurera que le conteneur est centré horizontalement.
.container {
width: 60vw; /*optional*/
height: 60vh;
margin: 20vh auto;
background: #333;
}
<div class="container">
</div>
Envisagez d'utiliser display: table
associé à display: table-cell; vertical-align: middle
sur un élément séparé. Parce que CSS n'a pas de signification sémantique, c'est une solution acceptable.
J'ai préparé un exemple pour vous: http://dabblet.com/Gist/2002681
Le seul inconvénient est que cela nécessite un peu plus de balisage que d'autres solutions, mais cela se contracte et se développe avec le contenu.