絶対配置のDivで中央揃え


93
div#thing {
  position: absolute;
  top: 0px;
  z-index: 2;
  margin: 0 auto;
}

<div id="thing">
   <p>text text text with no fixed size, variable font</p>
</div>

divは一番上にありますが、<center>またはで中央揃えすることはできませんmargin: 0 auto

回答:


152

div次のように固定幅を指定すると、問題が解決することがあります。

div#thing {
    position: absolute;
    top: 0px;
    z-index: 2;
    width:400px;
    margin-left:-200px;
    left:50%;
}

1
垂直方向のセンタリングにいつも同じテクニックを使用しているのに、どうしてそんなことを考えなかったのかわかりません。
Aayush

1
ユーザーが垂直方向に下にスクロールした場合、divがページの上部に表示され、表示領域に表示されるはずです
PUG

動的にサイズ変更された画像のサムネイルをオーバーレイdivに表示しているため、幅がわかりません。
PUG、2012

4
これが唯一の回避策で、stackoverflow.com/questions/1776915/...は解決策のように見える
PUG

1
これは正解ではありません。異なるメディアタイプはこのスニペットをサポートしません。
Sushan 2014年

97
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

3
これはどのように作動しますか?回答が有効である理由を教えてください。
afuzzyllama

1
私はこの方法が他の99%よりも本当に好きで、パディングやボーダーなどを処理する必要はありません。これが失敗するのを見たことがないので、次に失敗する場合の例を示します。
ダン、

1
このソリューションのクールな点は、それがパーセントでも機能することです。クロスブラウザー互換かどうかは
わかり

1
ワオ。これが機能することを期待していませんでしたが、それは魅力のように私にとっては機能しました
Awais Umar '25 / 07/25

4
これが正解であることに同意します。-200pxのマージンは私にハックを叫びます。
Mani5556 2015

36

パーティーに遅れることはわかっていますが、絶対的な幅を正確に知らない場合に、絶対的なアイテムを水平方向に配置する必要がある人々のために、ここで答えを提供しようと思いました。

これを試して:

// Horizontal example.
div#thing {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

同じ手法は、次のようにプロパティを調整するだけで、垂直方向の配置が必要になる可能性がある場合にも適用できます。

// Vertical example.
div#thing {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

1
ええと。これはすごい!それがどのように機能するか説明できますか?編集:いくつかのハンティングを行い、左のように見えます:50%は、divの左の位置を中央に移動しますが、これは実際には中央ではありません。しかし、translateXはコンテンツの幅の
Aziz Javed

2
絶対配置は、アイテムの左上から配置されます。translateを使用すると、サイズに応じた量にシフトされます。
Michael Giovanni Pumo

3
マイケル、あなたに知りたかっただけで、パーティーの芽に遅れなかった...そして知らない人のために:変換:変換(-50%、-50%); 1行で垂直方向と水平方向の両方のセンタリングを行います
Marvel Moe

4

垂直方向と水平方向の両方で中央に配置するには、次のようにします。

div#thing {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
}

0

相対的な幅(パーセンテージ)が必要な場合は、絶対位置のdivでdivをラップできます。

div#wrapper {
    position: absolute;
    width: 100%;
    text-align: center;
}

要素を絶対的に配置するには、親要素を相対的に配置する必要があることに注意してください。


0

私は同じ問題を抱えていました、そして私の制限は私が事前に定義された幅を持つことができないということでした。要素の幅が固定されていない場合は、これを試してください

div#thing 
{ 
  position: absolute; 
  top: 0px; 
  z-index: 2; 
  left:0;
  right:0;
 }

div#thing-body
{
  text-align:center;
}

次に、htmlを次のように変更します

<div id="thing">
 <div id="thing-child">
  <p>text text text with no fixed size, variable font</p>
 </div>
</div>

0

または、相対単位を使用することもできます。

#thing {
    position: absolute;
    width: 50vw;
    right: 25vw;
}


-22

はい:

div#thing { text-align:center; }

5
これは、div内のコンテンツを揃えます。ページの中央にdivを配置しません。また、ドキュメントフローの一部であるその中のコンテンツ以外の方法で絶対配置されたdivを整列しません。
CarterMan 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.