CSS:<div>要素内の中央要素


178

HTML要素を中央に配置するには、CSSを使用できますleft: 50%;。ただし、これにより、ウィンドウ全体に対して要素が中央に配置されます。

要素の子である<div>要素があり<div>、ウィンドウ全体ではなく、この親を基準にして子を中央に配置したい。

コンテナー<div>すべてのコンテンツを中央に配置するのではなく、特定の1つの子だけを配置します。

回答:


264

設定しtext-align:center;、親のdivに、とmargin:auto;子のdivに。

#parent {
    text-align:center;
    background-color:blue;
    height:400px;
    width:600px;
}
.block {
    height:100px;
    width:200px;
    text-align:left;
}
.center {
    margin:auto;
    background-color:green;
}
.left {
    margin:auto auto auto 0;
    background-color:red;
}
.right {
    margin:auto 0 auto auto;
    background-color:yellow;
}
<div id="parent">
    <div id="child1" class="block center">
        a block to align center and with text aligned left
    </div>
    <div id="child2" class="block left">
        a block to align left and with text aligned left
    </div>
    <div id="child3" class="block right">
        a block to align right and with text aligned left
    </div>
</div>

これは、ほとんどすべてを集中させるための優れたリソースです。
http://howtocenterincss.com/


3
ええと...親div全体にテキストを中央揃えにしたくありません。これで問題は解決しますが、別の問題が発生します!
Randomblue 2011

3
text-align:leftを設定できます。子要素に追加して、テキストを正しく配置します。
pasine

@pasine text-align<i>要素に対して機能しないようです。クラスにそれを与える..
nclsvh

これを水平方向だけでなく垂直方向にも要素の中心にする方法はありますか?
Gman Smith

使用できる@GmanSmith display: table-cellまたはflexboxこのため。追加したリンクをご覧ください。
pasine

57

実際、これはCSS3 フレックスボックスで非常に簡単です。

.flex-container{
  display: -webkit-box;  /* OLD - iOS 6-, Safari 3.1-6, BB7 */
  display: -ms-flexbox;  /* TWEENER - IE 10 */
  display: -webkit-flex; /* NEW - Safari 6.1+. iOS 7.1+, BB10 */
  display: flex;         /* NEW, Spec - Firefox, Chrome, Opera */
  
  justify-content: center;
  align-items: center;
  
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <div class="inner-element"></div>
</div>

更新:

この回答を書いたとき、私はOP編集を読んでいないようです。上記のコードはすべての内部要素を(それらの間で重複することなく)中央に配置しますが、OPは他の内部要素ではなく特定の要素のみを中央に配置することを望んでいます。したがって、@ Warfaceの2番目の答えはより適切ですが、垂直方向の中央揃えが必要です。

.flex-container{
  position: relative;
  
  /* Other styling stuff */
  width: 400px;
  height: 200px;
  background-color: #3498db;
}

.inner-element{
  position: absolute;
  left: 50%;
  top: 50%;
  
  transform: translate(-50%,-50%);
  /* or 3d alternative if you will add animations (smoother transitions) */
  transform: translate3d(-50%,-50%,0);

  /* Other styling stuff */
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
}
<div class="flex-container">
  <p>Other inner elements like this follows the normal flow.</p>
  <div class="inner-element"></div>
</div>


11

CSS

  body{
    text-align:center;
    }
    .divWrapper{
    width:960px //Change it the to width of the parent you want
    margin: 0 auto;
    text-align:left;
    }

HTML

<div class="divWrapper">Tada!!</div>

これはdivを中央に配置する必要があります

2016-HTML5 + CSS3メソッド

CSS

div#relative{
  position:relative;
}

div#thisDiv{
  position:absolute;
  left:50%;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
}

HTML

<div id="relative">
  <div id="thisDiv">Bla bla bla</div>
</div>

バイオリン

https://jsfiddle.net/1z7m83dx/


しかし、それはまた、全身を集中させますね?
Randomblue 2011

まあ、divWrapperにあるものは中央に配置されますが、そのDivの外に何かを置くことができ、必要に応じて中央に配置されません。
Warface

正確な幅(960px)は、ほとんどのシナリオに適切ではありません。
QMaster、2014年

@QMaster私はこの投稿が古いことを知っています。HTML5パワーで更新する必要があります
Warface

ここに良い説明があります: w3.org/Style/Examples/007/center.en.html
Purplejacket

5

text-align:center; 親divのトリックを行う必要があります


2
これは、私が揃えたいテキストではなく、要素全体(ボタンなど)です。
Randomblue '24

1
div内にある場合は、中央に配置する必要がありますが、ブロック要素の場合は少しトリッキーかもしれません。
ケビンBowersox

4

特定の子のみを中央に配置するには:

.parent {
  height: 100px;
  background-color: gray;
  position: relative;
}

.child {
  background-color: white;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 20px;
  height:20px;
  margin: auto;

}
<div class="parent">
   <span class="child">hi</span>
</div>  

または、フレックスも使用できますが、すべての子が中心になります

.parent {
  height: 100px;
  background-color: gray;
  display: flex;
  justify-content: center;
  align-items: center;
}

.child {
  background-color: white;  
}
<div class="parent">
   <span class="child">hi</span>
</div>


4

あなたはそのようなブートストラップフレックスクラス名を使うことができます:

<div class="d-flex justify-content-center">
    // the elements you want to center
</div>

それは内部の要素の数でも動作します。


2

divは固定幅ですか、それとも流動幅ですか?どちらの方法でも、流体の幅には次を使用できます。

#element { /* this is the child div */
margin-left:auto;
margin-right:auto;
/* Add remaining styling here */
}

または、親divをに設定しtext-align:center;、子divをに設定することもできますtext-align:left;

またleft:50%;、divがに設定されてposition:absolute;いる場合は、ページ全体に合わせて中央揃えします。あなたがdivをleft:50%;それに設定するならば、それは親divの幅に関連してそれをするべきです。固定幅の場合は、次のようにします。

#parent {
width:500px;
}

#child {
left:50%;
margin-left:-100px;
width:200px;
}


1

CSS3を使用する場合:

position:absolute;
left:calc(50% - PutTheSizeOfTheHalfOfYourElementpx);

要素の幅に合わせてパーセンテージを取得する方法を見つけるために、さらに検索を行うことをお勧めします。


0

まず、left:50%で親divを基準にして中央に配置できますが、そのためにはCSSの配置を学習する必要があります。

多くからの1つの可能な解決策は、次のようなことをすることです

    div.parent { text-align:center; }    //will center align every thing in this div as well as in the children element
    div.parent div { text-align:left;}   //to restore so every thing would start from left

中央に配置するdivが相対的に配置されている場合は、単に行うことができます

    .mydiv { position:relative; margin:0 auto; } 

親div全体が欲しいのではないtext-align:center;
Randomblue '24

なぜあなたは欲しくないのですか?とにかく、その場合は2番目の方法を使用できます。
エーテシャム2011

0

左:50%は、静的な幅が割り当てられた最も近い親に対して互いに作用します。幅を試してください:親divで500pxまたは何か。または、display:blockの中央に配置する必要があるコンテンツを作成し、左右のマージンをautoに設定します。


0

子要素がインライン(例えばされていない場合divtableなど)私は内部でそれを包むだろうdivか、pとラッパーのテキスト整列CSSプロパティを作るの中心に等しいです。

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="text-align: center">
            This <button>button</button> is centered.
        </div>
        This text is still aligned left.
    </div>

要素がブロック(あればそうでない場合、display: block例えば、A divまたはp固定幅)、私はautoにその余白の左右のCSSプロパティを設定すると思います。

    <div id="container">
        This text is aligned to the left.<br>
        So is this text.<br>
        <div style="margin: 0 auto; width: 200px; background: red; color: white;">
            My parent is centered.
        </div>
        This text is still aligned left.
    </div>

もちろん、 text-align: center、ラッパー要素にをして、コンテンツを中央揃えにます。

IMHOはOPの問題を解決する方法ではないため、位置付けについては気にしませんが、このリンクを確認してください。非常に役立ちます。


0

要素を中央に配置するための新しいdiv要素を作成し、その要素をこのように中央に配置するためのクラスを追加します

<div id="myNewElement">
    <div class="centered">
        <input type="button" value="My Centered Button"/>
    </div>
</div>

CSS

.centered{
    text-align:center;
}

0

別の解決策を見つけました

<style type="text/css">
    .container {
        width:600px; //set how much you want
        overflow: hidden; 
        position: relative;
     }
     .containerSecond{
        position: absolute; 
        top:0px; 
        left:-500%; 
        width:1100%;
     }
     .content{
        width: 800px; //your content size 
        margin:0 auto;
     }           
</style>

そして体内で

<div class="container">
   <div class="containerSecond">
       <div class="content"></div>
   </div>
</div>

これにより、コンテナーが大きくても小さくても、コンテンツdivが中央に配置されます。この場合、コンテンツは中央揃えにならないようにコンテナの1100%より大きくする必要がありますが、その場合は、containerSecondを大きくすることで機能します。



0

たとえば、メインのコンテンツdivの中にある記事のdivがあります。記事の中に画像があり、その画像の下にボタンがあります。次のようなスタイルです。

。論文 {

width: whatever;
text-align: center; 
float: whatever (in case you got more articles in a row); 
margin: give it whatever margin you want;

} 。論文 {

}

/ *記事の中で画像を中央揃えにしたい* /

.article img {

float: none;
margin: 0 auto;
padding: give it a padded ridge if you want;

}

/ *これで、同じ記事要素のこの画像の下に、read moreなどのボタンがあります。もちろん、レスポンシブデザイン内にある場合は、emまたは%を操作する必要があります* /

.button {

background: #whatever color:
padding: 4.3567%; /*Instead of fixed width*/
text-align: cente;
font: whatever;
max-width: 41.4166%;
float: none;
margin: 0 auto; /* You could make the zero into any margin you want on the top and bottom of this button.. Just notice the float: none property.. this wil solve most your issues, also check if maybe position and displaay might mess up your code..*/

}

幸運を


0

div内の要素を中央に配置し、分割サイズを気にしない場合は、Flexパワーを使用できます。私はflexを使用することを好み、要素に正確なサイズを使用しません。

<div class="outer flex">
    <div class="inner">
        This is the inner Content
    </div>
</div>

ご覧のとおり、Outer divはFlexコンテナーであり、InnerはFlexアイテムである必要がありますflex: 1 1 auto;。これにより、理解を深めるために、この単純なサンプルを見ることができます。http://jsfiddle.net/QMaster/hC223/

この助けを願っています。


0

私は魔法が欲しいです。

html, body {
 height: 100%;
}

.flex-container{
  display: -ms-flexbox;
  display: -webkit-box;
  display: flex;
  -ms-flex-align: center;
  -ms-flex-pack: center;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: center;
  justify-content: center;
}


<div class="flex-container">
  <div>Content</div>
</div>

0
<html>
<head>
</head>
<style>
  .out{
    width:200px;
    height:200px;
    background-color:yellow;
  }
   .in{
    width:100px;
    height:100px;
    background-color:green;
    margin-top:50%;
    margin-left:50%;
    transform:translate(-50%,50%);
  }
</style>
  <body>
     <div class="out">
     <div class="in">

     </div>
     </div> 
  </body>
</html>

コードは常に優れていますが、元の質問への対処方法に関するコメント/コンテキストを追加するのにも役立ちます。
クレイグコールフィールド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.