2008-10-31 5 views
85
div#thing { 
    position: absolute; 
    top: 0px; 
    z-index: 2; 
    margin: 0 auto; 
} 

<div id="thing"> 
    <p>text text text with no fixed size, variable font</p> 
</div> 

Absolument Positionné Le div est en haut, mais je ne peux pas le centrer avec <center> ou margin: 0 auto;Centrer sur une Div

Répondre

142

Votre problème peut être résolu si vous donnez votre div une largeur fixe, comme suit:

div#thing { 
    position: absolute; 
    top: 0px; 
    z-index: 2; 
    width:400px; 
    margin-left:-200px; 
    left:50%; 
} 
+0

Je ne sais pas pourquoi Je n'ai pas pensé à ça, même si on utilise toujours la même technique de centrage vertical ... Merci quand même, tu m'as sauvé beaucoup de temps. – Aayush

+1

et si l'utilisateur a fait défiler verticalement le div apparaît en haut de la page alors qu'il devrait apparaître sur la zone visible – PUG

+0

J'affiche des vignettes d'images dynamiquement reszied dans mon div overlay, donc je ne connais pas la largeur. – PUG

-23

Oui:

div#thing { text-align:center; } 
+4

Ceci alignera le contenu dans un div. Il n'alignera pas la div au centre de la page. Il n'alignera pas non plus un div positionné de manière absolue autre que le contenu qui en fait partie. – CarterMan

88
div#thing 
{ 
    position: absolute; 
    width:400px; 
    right: 0; 
    left: 0; 
    margin: auto; 
} 
+3

Comment cela fonctionne-t-il? Pouvez-vous s'il vous plaît fournir pourquoi votre réponse est valide? – afuzzyllama

+0

non, parce que ce n'est pas valide – vladkras

+1

J'aime vraiment cette méthode par rapport aux autres 99% du temps, vous n'avez pas à faire avec le rembourrage, les bordures, etc. Je n'ai jamais vu ça échouer, la prochaine fois fournissez un exemple échoue pour vous. – Dan

0

S'il est nécessaire pour vous d'avoir un parent largeur (en pourcentage), vous pouvez envelopper votre div dans un position absolue:

div#wrapper { 
    position: absolute; 
    width: 100%; 
    text-align: center; 
} 

Rappelez-vous que pour positionner un élément absolument, l'élément parent doit être positionné de manière relative.

0

J'avais le même problème, et ma limite était que je ne peux pas avoir une largeur prédéfinie. Si votre élément ne dispose pas d'une largeur fixe, essayez cette

div#thing 
{ 
    position: absolute; 
    top: 0px; 
    z-index: 2; 
    left:0; 
    right:0; 
} 

div#thing-body 
{ 
    text-align:center; 
} 

puis modifiez votre code html pour ressembler à ce

<div id="thing"> 
<div id="thing-child"> 
    <p>text text text with no fixed size, variable font</p> 
</div> 
</div> 
21

Je sais que je suis en retard à la fête, mais je pensais fournir une réponse ici pour les personnes qui ont besoin de positionner horizontalement un objet absolu, lorsque vous ne connaissez pas sa largeur exacte.

Essayez ceci:

// Horizontal example. 
div#thing { 
    position: absolute; 
    left: 50%; 
    transform: translateX(-50%); 
} 

La même technique peut également être appliquée, quand vous pourriez avoir besoin alignement vertical, simplement en ajustant les propriétés comme ceci:

// Vertical example. 
div#thing { 
    position: absolute; 
    top: 50%; 
    transform: translateY(-50%); 
} 
+0

Whaaat. C'est génial! Pourriez-vous expliquer comment cela fonctionne? Edit: A fait un peu de chasse et on dirait que c'est la gauche: 50% déplace la position gauche de la div au centre, ce qui n'est pas vraiment le centre. Mais translateX repousse 50% de la largeur ** du contenu ** –

+1

Le positionnement absolu sera positionné en haut à gauche d'un article. Utiliser translate le déplacera à la quantité par rapport à sa taille. –

+2

Michael, je voulais juste que vous sachiez, vous n'étiez pas en retard à la fête bourgeoise ... et pour ceux qui ne savent pas: transformer: traduire (-50%, -50%); fait à la fois le centrage vertical et horizontal avec 1 ligne –

Questions connexes