Comment aligner l'élément absolument positionné au centre?


103

J'essaie d'empiler deux toiles ensemble et d'en faire une toile à double couche.

J'ai vu un exemple ici:

<div style="position: relative;">
 <canvas id="layer1" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
 <canvas id="layer2" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
</div>

Mais je voudrais aligner les deux toiles au centre de l'écran. Si je règle la valeur de leftcomme constante, pendant que je change l'orientation de l'écran (comme je le fais sur iPad), la toile ne restera pas au milieu de l'écran comme elle agit dans

<div align="center">

Quelqu'un peut-il aider s'il vous plaît?

Réponses:


222

Si vous définissez à la fois gauche et droite sur zéro et les marges gauche et droite sur auto, vous pouvez centrer un élément positionné de manière absolue.

position:absolute;
left:0;
right:0;
margin-left:auto;
margin-right:auto;

N'avez-vous pas également besoin de donner une largeur à l'élément?
Gabriel Florit

1
Je ne pense pas que ce soit nécessaire dans ce cas.
Andrew

Je viens d'essayer et cela fonctionne, cela devrait être marqué comme réponse correcte
R Reveley

Vous pouvez utiliser modifier les valeurs gauche ou droite pour déplacer l'objet hors du centre, fixe. L'utilisation left: 80px;déplacera l'objet 40px (!) Vers la droite du centre.
SPRBRN

4
Remarque: ne fonctionne que si l'élément stylisé a une largeur donnée. (soit px ou%)
Johnny Wong

94

Si vous souhaitez centrer un élément sans connaître sa largeur et sa hauteur, procédez comme suit:

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

Exemple:

*{
  margin:0;
  padding:0;
}
section{
  background:red;
  height: 100vh;
  width: 100vw;
}
div{  
  width: 80vw;
  height: 80vh;
  background: white;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<section>
  <div>
    <h1>Popup</h1>
  </div>
</section>


16

Avez-vous essayé d'utiliser?:

left:50%;
top:50%;
margin-left:-[half the width] /* As pointed out on the comments by Chetan Sastry */

Je ne sais pas si cela fonctionnera, mais cela vaut la peine d'essayer ...

Modification mineure : Ajout de la partie marge gauche, comme indiqué sur les commentaires de Chetan ...


Ya j'ai essayé cela, mais la toile "démarre" à partir du milieu mais pas "placée" au milieu de l'écran. Est-il possible de définir à gauche: 50% et de déplacer à nouveau le canevas vers la gauche?
PaulLing

2
@PaulLingmargin-left: <negative half the width>
Chetan S

Ce que Chetan a dit ... me battre: P Je vais éditer ma réponse pour les générations futures ...
Deleteman

La largeur de l'écran est différente lorsque l'iPad est placé dans une orientation différente
PaulLing

Il voulait dire la moitié de la largeur de votre élément de canevas ..., ce qui le rendrait margin-left: -50px;
Deleteman


9

essayez cette méthode, fonctionne bien pour moi

position: absolute;
left: 50%;
transform: translateX(-50%); 

7

Tout ce que tu dois faire est,

assurez-vous que votre DIV parent a la position: relative

et l'élément que vous voulez centrer, définissez-lui une hauteur et une largeur. utilisez le CSS suivant

.layer {
    width: 600px; height: 500px;
    display: block;
    position:absolute;
    top:0;
    left: 0;
    right:0;
    bottom: 0;
    margin:auto;
  }
http://jsbin.com/aXEZUgEJ/1/

2
Seule solution qui fonctionne pour moi. Parent est configuré pour flex, flex-grow & overflow. L'enfant était positionné hors du cadre pour les images plus grandes que le parent. Il ne semblait pas être conscient de la largeur du parent. C'est réglé maintenant. Grand merci!
Kai

0

Déplacez le div parent vers le milieu avec

left: 50%;
top: 50%;
margin-left: -50px;

Déplacez le deuxième calque sur l'autre avec

position: relative;
left: -100px;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.