短い答え:いいえ。(CSS変換で可能になりました。以下の編集を参照してください)
長い答え:「固定」配置を使用する場合の問題は、要素がフローから外れることです。したがって、親がない場合と同じように、親に対して相対的に再配置することはできません。ただし、コンテナが既知の固定幅である場合は、次のようなものを使用できます。
#fixedContainer {
position: fixed;
width: 600px;
height: 200px;
left: 50%;
top: 0%;
margin-left: -300px; /*half the width*/
}
http://jsfiddle.net/HFjU6/1/
編集(2015年3月):
これは古い情報です。CSS3変換の魔法の助けを借りて、動的サイズ(水平および垂直)のコンテンツを中央揃えにすることが可能になりました。同じ原則が適用されますが、コンテナをオフセットするためにマージンを使用する代わりに、を使用できますtranslateX(-50%)
。これは上記のマージントリックでは機能しません。幅が固定されていない限り、オフセットの量がわからないため、相対値(など50%
)を使用できません。に適用されます。 transform
動作が異なります。その値は、それらが適用される要素を基準にしています。したがって、は要素の幅の半分50%
をtransform
意味し50%
、マージンは親の幅の半分を意味します。これはIE9 +ソリューションです
上記の例と同様のコードを使用して、完全に動的な幅と高さを使用して同じシナリオを再作成しました。
.fixedContainer {
background-color:#ddd;
position: fixed;
padding: 2em;
left: 50%;
top: 0%;
transform: translateX(-50%);
}
中央揃えにしたい場合は、次のようにすることもできます。
.fixedContainer {
background-color:#ddd;
position: fixed;
padding: 2em;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
デモ:
jsFiddle:水平方向のみ中心
jsFiddle:中心水平方向と垂直方向の両方で
オリジナルクレジットは、ユーザーに行くaaronk6に私にそれを指摘するために、この答え