2010-07-12 11 views
15

Je veux un composant qui conserve le centre horizontal de la page (deux colonnes), et j'ai un sous-composant (colonne de droite) dont je veux que sa position soit fixe, donc le sous-composant La position du composant doit être fixée, mais les deux colonnes doivent être centrées.CSS Position fixe avec marge automatique

#content { 
    width: 1200px; 
    height:auto !important; 
    height:100%; 
    min-height:100%; 
    padding-top: 42px; 
    padding-bottom: 100px; 
    margin-auto: 0 auto; 
    position: relative; 
} 

#left { 
    width: 700px; 
    float: left; 
} 

#right { 
     width: 500px; 
     position: fixed; 
     top: 0px; 
} 

Répondre

33

Vous ne pouvez pas le faire avec margin:auto, mais vous pouvez faire quelque chose comme ceci:

#CSS-SELECTOR-YOU-ARE-USING{ 
    background:#FF0000; // Just so you can see whats going on 
    position:fixed; // Position the element 
    right:50%; // Move it to the right for 50% of parent element 
    margin-right:-250px; // You need here to put 1/2 of what you have below in width 
    width:500px; 
} 

De cette façon, vous vous déplacez élément à droite pour 50%, et passer ensuite en arrière pour la moitié de sa largeur. De cette façon, vous obtenez l'élément centré avec position:fixed.

+1

Attendez! Si vous avez d'autres éléments avec 'margin: auto' et' position: relative', lorsque vous essayez de redimensionner la largeur du navigateur, vous découvrirez que les deux couches ne s'alignent pas correctement. Ceci est un bug commun de CSS. – Raptor

+0

Cette réponse est correcte si vous avez une largeur fixe. Pour la largeur du fluide (par exemple, 100%), veuillez prendre en compte la réponse de pwerstrm ci-dessous. "Vous pouvez utiliser margin: 0 auto avec position: fixe si vous réglez à gauche et à droite." –

+0

Pour les personnes qui viennent à ce sujet: utilisez la solution postée ci-dessous –

0

J'aime utiliser un emballage comme Asolution pour ce problème:

.wrapper { 
    position: fixed; 
    width: 100%; 
    top: 0px; 
} 
.wrapper .right { 
    width: 500px; 
    margin: auto; 
} 
42

Vous pouvez utiliser margin: 0 auto avec position: fixed si vous définissez left et right.

.wrapper { 
    position:fixed; 
    top: 0; 
    left: 0; 
    right: 0; 
    width: 500px; 
    margin: 0 auto; 
} 

Cela fonctionne également avec position: absolute; et verticalement.

Démo: http://codepen.io/pstenstrm/pen/myaWVJ

+3

Cette réponse plus récente est beaucoup plus simple et plus fiable que la réponse acceptée (qui, en toute équité, était d'il y a quatre ans.) – BFWebAdmin

+0

c'est juste beau! Merci. – gdaniel