動的幅(CSS)の中央固定div


88

私はこのCSSを持つdivを持っています:

#some_kind_of_popup
{
    position: fixed;
    top: 100px;
    min-height: 300px;
    width: 90%;
    max-width: 900px;
}

さて、どうすればこのdivを中央に配置できますか?使用できますmargin-left: -450px; left: 50%;が、これは画面が900ピクセルを超える場合にのみ機能します。その後(ウィンドウが900ピクセル未満の場合)、中央に配置されなくなります。

もちろん、ある種のjsでこれを行うことはできますが、CSSでこれを行う「より正しい」方法はありますか?


4
@リアム-私は同意しません、私はこの質問はそれ自体で完全なものだと思います。これらの質問は、中央に固定幅のないdivがあることに関してこれに答えません。
Joshua M

Joshuaが言ったことは、divを別のdivの中央に配置するためです。
gubbfett 2013年

7
@ Liam-さらにmargin: 0 autoposition: fixeddivでaを使用することはできません。質問も読みましたか?
Joshua M

^いいえ。私もそれを試しました。:p
gubbfett 2013年

3
@JoshuaMあなたの主張は100%正しくありません。私の答えを見てください。
laconbass 2013年

回答:


221

配置された要素を中央に配置する場合と同じように、fixedまたはabsolute配置された要素の設定rightleftto 0、およびmargin-leftmargin-rightを中央に配置できautoますstatic

#example {
    position: fixed;
    /* center the element */
    right: 0;
    left: 0;
    margin-right: auto;
    margin-left: auto;
    /* give it dimensions */
    min-height: 10em;
    width: 90%;
}

このフィドルに取り組んでいるこの例を参照してください。


1
言うまでもなく...それはそれほど予想外ではありませんが、IE7では失敗します。ここの左から0pxの位置にあります。それはどのようにこれまでIE 8での仕事、完璧なん
gubbfett

要素の幅が画面の幅よりも大きい場合、これは機能しません。そのような状況で機能させると便利です。
andrewb 2014

1
@andrewbあなたは上の両方の均等に負のマージンも適用することができるrightleft、少なくとものをvalue >= witdth / 2に見られるように、jsfiddle.net/PvfFy/168が、非エレガントなアプローチの私見です。私は楽しみのためにそれをクロムでテストしました、それが残りで働くかどうかわかりません
laconbass 2014年

5
質問の範囲外では、これは要素の幅の設定に依存するため、幅が変化するか不明な動的コンテンツがある場合はあまり良くありません。中央揃えはさておき、私は通常、ディスプレイを使用してこれを行います。インラインブロックで幅を設定しません。誰かがその場合のjsなしのソリューションを持っていますか?
enigment 2015

4
質問は動的幅を言います、それは全体の問題です、あなたはそれを単に無視することはできません。
Gil Epshtain 2018

54

CSS3のtransformプロパティを安全に使用できる場合の別の方法は次のとおりです。

.fixed-horizontal-center
{
    position: fixed;
    top: 100px; /* or whatever top you need */
    left: 50%;
    width: auto;
    -webkit-transform: translateX(-50%);
    -moz-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%);
}

...または、水平方向と垂直方向の両方のセンタリングが必要な場合:

.fixed-center
{
    position: fixed;
    top: 50%;
    left: 50%;
    width: auto;
    height: auto;
    -webkit-transform: translate(-50%,-50%);
    -moz-transform: translate(-50%,-50%);
    -ms-transform: translate(-50%,-50%);
    -o-transform: translate(-50%,-50%);
    transform: translate(-50%,-50%);
}

5
最新のブラウザ用である限り、これがこの答えの最良の解決策です!真の「float:center」のような唯一のものは、ラッピング要素の周りをクリックすることができ、その周りを釣り回る必要がないという点です。この答えが大好きです!
SpYk3HH 2015

1
結果の値がfloatの場合は平滑化されるため、テキストを中央に配置するためのパーセンテージでの変換は使用しないでください。ほら、あなたはそれを望まない、いや、あなたは望まない。
gnou 2015

CSS変換を使用すると、テキストだけでなくスムージングが発生する可能性があります。変身の結果、ファンキーなボーダーになりました。
ネイサンK

1
画面サイズを変更すると(分割のサイズによって異なります)、早期に収縮する可能性があり、分割の端に大きな境界線ができます。
単一エンティティ

7
<div id="container">
    <div id="some_kind_of_popup">
        center me
    </div>
</div>

あなたはそれを容器に包む必要があるでしょう。これがCSSです

#container{
    position: fixed;
    top: 100px;
    width: 100%;
    text-align: center;
}
#some_kind_of_popup{
    display:inline-block;
    width: 90%;
    max-width: 900px;  
    min-height: 300px;  
}

ああ、私はあなたの考えが好きです。固定divは、実際の結果を持つ別のdivのコンテナになりますか?これやってみます!
gubbfett 2013年

私はあなたの答えの直感性が好きですが、それがどのようにie6 / 7のサポートを可能にするかわかりません。
マシューバーグ

1
@ MathewBerg、ie6 / 7についての良い点。その場合、あなたの答えが最もうまくいくはずです。これは少しOTですが、個人的には、開発者は<= ie7の修正に時間を費やすべきではないと思います。実際、開発者はこれらのブラウザをブロックして、古いシステムを使用している人や企業にアップグレードを強制する必要があると思います。そのアイデアを有料の顧客に販売するのはこれまでになく困難です。;)
gubbfett 2013年

はい。ただし、残念ながら、将来的にどの程度進んでも、レガシーブラウザのサポートが必要な企業もあります。先に進んで、あなたのニーズに応じて私の答えかラコンバスの答えを受け入れてください。
マシューバーグ

1
「コンテナ」をクリックできないため、これも機能しません
SpYk3HH 2015

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.