position:fixed
センターがページ上で整列しているdivを取得しようとしています。
この「ハック」を使用して、絶対配置のdivで常にそれを行うことができました。
left: 50%; width: 400px; margin-left:-200px
... margin-leftの値はdivの幅の半分です。
これは、固定位置のdivでは機能しないようです。代わりに、左端の50%に配置し、マージン左宣言を無視します。
これを修正して固定位置の要素を中央に揃える方法のアイデアはありますか?
そして、上記で説明した方法よりも、絶対位置に配置された要素を中央揃えにするより良い方法を教えていただければ、ボーナスM&Mを投入します。
これと同じ問題を抱えているが、レスポンシブデザインでは、次のものも使用できます。
width: 75%;
position: fixed;
left: 50%;
margin-left: -37.5%;
これを行うと、レスポンシブデザインであっても、固定div
が常に画面の中央に配置されます。
Koenの答えは、要素を正確に中央に配置しません。
適切な方法は、CCS3 transform
プロパティを使用することです。 一部の古いブラウザではサポートされていません です。固定または相対width
を設定する必要さえありません。
.centered {
position: fixed;
left: 50%;
transform: translate(-50%, 0);
}
ワーキングjsfiddle比較 here 。
これにもflexboxを使用できます。
.wrapper {
position: fixed;
top: 0;
left: 0;
height: 100%;
width: 100%;
/* this is what centers your element in the fixed wrapper*/
display: flex;
flex-flow: column nowrap;
justify-content: center; /* aligns on vertical for column */
align-items: center; /* aligns on horizontal for column */
/* just for styling to see the limits */
border: 2px dashed red;
box-sizing: border-box;
}
.element {
width: 200px;
height: 80px;
/* Just for styling */
background-color: lightyellow;
border: 2px dashed purple;
}
<div class="wrapper"> <!-- Fixed element that spans the viewport -->
<div class="element">Your element</div> <!-- your actual centered element -->
</div>
上記の投稿から、最善の方法は
width: 100%
で固定divを持っているmargin-left: auto
とmargin-right: auto
を使用して新しい静的divを作成するか、テーブル用にalign="center"
を作成します。これが役立つことを願っています。
通常のdivはmargin-left: auto
およびmargin-right: auto
を使用する必要がありますが、固定divでは機能しません。これを回避する方法は Andrewの答え に似ていますが、非推奨の<center>
を使用しません。基本的に、固定divにラッパーを与えるだけです。
#wrapper {
width: 100%;
position: fixed;
background: gray;
}
#fixed_div {
margin-left: auto;
margin-right: auto;
position: relative;
width: 100px;
height: 30px;
text-align: center;
background: lightgreen;
}
<div id="wrapper">
<div id="fixed_div"></div>
</div
これにより、divがブラウザと反応する一方で、div内の固定divが中央に配置されます。つまり、十分なスペースがある場合、divは中央に配置されますが、ない場合はブラウザーのエッジと衝突します。通常の中央のdivの反応に似ています。
幅が400pxであることがわかっている場合、これが最も簡単な方法でしょう。
left: calc(50% - 200px);
固定位置divを垂直と水平の両方に中央揃えする場合は、これを使用します
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
これは、要素を別のナビゲーションバーのようにページ全体に広げたい場合に機能します。
幅:calc(幅:100%-中心から外れた幅)
たとえば、サイドナビゲーションバーが200ピクセルの場合:
幅:calc(100%-200px);
Twitter Bootstrap(v3)で以下を使用しました
<footer id="colophon" style="position: fixed; bottom: 0px; width: 100%;">
<div class="container">
<p>Stuff - rows - cols etc</p>
</div>
</footer>
つまり、固定位置の全幅エレメントを作成し、その中にコンテナーを押し込むだけで、コンテナーは全幅に対して中央に配置されます。応答性も良好です。
幅を使用すると非常に簡単です:70%;左:15%;
要素の幅をウィンドウの70%に設定し、両側に15%を残します
ラッパーメソッドを使用したくない場合。その後、これを行うことができます:
.fixed_center_div {
position: fixed;
width: 200px;
height: 200px;
left: 50%;
top: 50%;
margin-left: -100px; /* 50% of width */
margin-top: -100px; /* 50% of height */
}
フレックスボックスを使用したソリューション。完全にレスポンシブ:
parent_div {
position: fixed;
width: 100%;
display: flex;
justify-content: center;
}
child_div {
/* whatever you want */
}
<div class="container-div">
<div class="center-div">
</div>
</div>
.container-div {position:fixed; left: 0; bottom: 0; width: 100%; margin: 0;}
.center-div {width: 200px; margin: 0 auto;}
これは同じことをする必要があります。