#menu {
position: fixed;
width: 800px;
background: rgb(255, 255, 255); /* The Fallback */
background: rgba(255, 255, 255, 0.8);
margin-top: 30px;
}
私はこの質問が100万回あることを知っていますが、私の解決策を見つけることができません。 divがあります。これは画面上で修正する必要があります。ページがスクロールされても、画面の中央に常に中央に配置する必要があります。
Divの幅は500px
で、上部から30px
(マージン上部)離れている必要があります。また、すべてのブラウザーサイズでページの中央に水平方向に配置し、ページの残りをスクロールするときに移動しないようにします。
それは可能ですか?
left: 50%;
margin-left: -400px; /* Half of the width */
ここでの答えは時代遅れです。CSS3変換を簡単に使用できるようになりましたマージンをハードコーディングせずに。これは、幅がない、または動的な幅を持つ要素を含む、すべての要素で機能します。
水平中心:
left: 50%;
transform: translateX(-50%);
垂直中央:
top: 50%;
transform: translateY(-50%);
水平および垂直の両方:
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
互換性は問題ではありません: http://caniuse.com/#feat=transforms2d
インラインブロックを使用するオプションがある場合、このアプローチをお勧めします。
.container {
/* fixed position a zero-height full width container */
position: fixed;
top: 0; /* or whatever position is desired */
left: 0;
right: 0;
height: 0;
/* center all inline content */
text-align: center;
}
.container > div {
/* make the block inline */
display: inline-block;
/* reset container's center alignment */
text-align: left;
}
これに関する短い投稿をここに書きました: http://salomvary.github.com/position-fixed-horizontally-centered.html
2016年9月編集:まだこれに時折賛成票を投じることはいいことですが、世界は進んでいるので、今は変換を使用する(そして多数の賛成票を持っている)答えに行きます。私はもうこのようにはしません。
マージンを計算したりサブコンテナを必要としない別の方法:
#menu {
position: fixed; /* Take it out of the flow of the document */
left: 0; /* Left Edge at left for now */
right: 0; /* Right Edge at right for now, so full width */
top: 30px; /* Move it down from top of window */
width: 500px; /* Give it the desired width */
margin: auto; /* Center it */
max-width: 100%; /* Make it fit window if under 500px */
z-index: 10000; /* Whatever needed to force to front (1 might do) */
}
このようにdivを水平方向に中央揃えすることができます:
html:
<div class="container">
<div class="inner">content</div>
</div>
css:
.container {
left: 0;
right: 0;
bottom: 0; /* or top: 0, or any needed value */
position: fixed;
z-index: 1000; /* or even higher to prevent guarantee overlapping */
}
.inner {
max-width: 600px; /* just for example */
margin: 0 auto;
}
この方法を使用すると、常に内側のブロックが中央に配置され、加えて簡単に真のレスポンシブに変更することができます(例では小さな画面では流動的です) 。
もう1つの2 divソリューションです。簡潔に保ち、ハードコード化しないようにしました。まず、期待されるhtml:
<div id="outer">
<div id="inner">
content
</div>
</div>
次のcssの背後にある原理は、「外側」のどちらかの側を配置し、「内側」のサイズを想定して後者を相対的にシフトするという事実です。
#outer {
position: fixed;
left: 50%; // % of window
}
#inner {
position: relative;
left: -50%; // % of outer (which auto-matches inner width)
}
このアプローチはクエンティンのアプローチに似ていますが、インナーのサイズは可変です。
...または、メニューdivを別のdivにラップできます。
<div id="wrapper">
<div id="menu">
</div>
</div>
#wrapper{
width:800px;
background: rgba(255, 255, 255, 0.8);
margin:30px auto;
border:1px solid red;
}
#menu{
position:fixed;
border:1px solid green;
width:300px;
height:30px;
}
全画面ラッパーdivを使用する場合のflexboxソリューションを以下に示します。 justify-contentは子divを水平に中央揃えし、align-itemsは子divを垂直に中央揃えします。
<div class="full-screen-wrapper">
<div class="center"> //... content</div>
</div>
.full-screen-wrapper {
position: fixed;
display: flex;
justify-content: center;
width: 100vw;
height: 100vh;
top: 0;
align-items: center;
}
.center {
// your styles
}