103 votes

La position absolue de CSS ne fonctionne pas avec margin-left:auto margin-right : auto

Supposons que le CSS suivant soit appliqué à une balise div.

.divtagABS {
    position: absolute;
    margin-left: auto;  
    margin-right: auto;
}

le site margin-left y margin-right ne prend pas effet

mais si vous avez du relatif, cela fonctionne bien c'est-à-dire

.divtagREL {
    position: relative;
    margin-left: auto;  
    margin-right: auto;
}

Pourquoi ça ? Je veux juste centrer un élément.

Quelqu'un peut-il expliquer pourquoi le réglage des marges sur auto en position absolue ne fonctionne pas ?

0 votes

Utilisez simplement margin: auto; . avec une position absolue, tous les autres éléments de style (concernant la position/etc) sont ignorés.

0 votes

Enveloppez-le dans une balise <center> et définissez la largeur de .divtagABS à 100 %.

0 votes

Je confirme : même si certains disent que cette affirmation est dépassée, j'ai constaté une défaillance du non centrage pour position: absolute; sur IE Edge.

196voto

Kevin Bowersox Points 48223

EDIT : cette réponse prétendait qu'il n'est pas possible de centrer un élément positionné de manière absolue avec margin: auto; mais ce n'est tout simplement pas vrai. Comme c'est la réponse la plus votée et la plus acceptée, je me suis dit que j'allais la modifier pour qu'elle soit correcte.

Lorsque vous appliquez le CSS suivant à un élément

position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;

Ensuite, donnez à l'élément une largeur et une hauteur fixes, comme 200px ou 40%, l'élément sera le centre lui-même.

Voici un violon qui démontre l'effet.

3 votes

Url : vision.to/articles/margins-and-absolute-positioning.php ne fonctionne pas, veuillez remplacer

0 votes

2 votes

"Un élément avec une position absolue ne peut pas être centré..." En fait, il s'agit de no vrai : La clé est de mettre tous les top/bottom/left/right les propriétés à 0 et déclarer width y height entonces margin: auto va automatiquement centrer l'élément positionné de manière absolue. Voir : Technique de centrage absolu ; c'est aussi sur Magazine Smashing .

71voto

chipcullen Points 3644

J'ai a utilisé cette astuce pour centrer un élément positionné de manière absolue . Cependant, vous devez connaître le nom de l'élément. width .

.divtagABS {
    width: 100px;
    position: absolute;
    left: 50%;
    margin-left: -50px;
  }

En gros, vous utilisez left: 50% puis la faire reculer de la moitié de son width avec un négatif margin .

0 votes

Oui, c'est ce que vous devez utiliser si l'élément a une largeur fixe.

1 votes

Vous pouvez utiliser margin-left:-25% ; pour le centrer au lieu de coder un nombre en dur.

5 votes

@AaronHarun - Malheureusement, cela ne fonctionnera pas comme vous le pensez. Je pense que les 25% seront basés sur la largeur du parent. J'ai mis en place un stylo code pour le tester : codepen.io/chippper/pen/xwKIl - vous pouvez basculer la dernière ligne de CSS pour voir ce que je veux dire.

39voto

GilbertSun Points 161

Si l'élément absolu a une largeur, vous pouvez utiliser le code ci-dessous

.divtagABS{
    width:300px;
    positon:absolute;
    left:0;
    right:0;
    margin:0 auto;
}

1 votes

Brillant ! Mais pourquoi cela ne fonctionne-t-il pas si la gauche et la droite ne sont pas réglées ?

1 votes

Très bonne solution. Fonctionne également avec width:100% sous Bootstrap ;)

0 votes

Si vous voulez le centrer verticalement et horizontalement, il suffit de l'étendre en haut : 0 ; bottom : 0 ; combinez cela avec une transition CSS 3 pour la largeur et la hauteur et vous obtiendrez un effet plutôt agréable.

1voto

Rafael Camargo Points 11

J'ai déjà eu ce même problème et j'ai trouvé la solution en écrivant un conteneur (.divtagABS-container, dans votre cas) positionné de manière absolue et en positionnant ensuite de manière relative le contenu à l'intérieur (.divtagABS, dans votre cas).

C'est fait ! Les paramètres margin-left et margin-right AUTO de votre .divtagABS fonctionnent désormais.

-1voto

Codecraft Points 2599

Si l'élément est positionné de manière absolue, alors il n'est pas relatif, ou en référence à un objet quelconque - y compris la page elle-même. Ainsi, margin: auto; ne peut pas décider où est le milieu.

Il attend d'être dit explicitement, en utilisant left y top où se positionner.

Vous pouvez toujours le centrer par programme, en utilisant javascript ou autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X