要素を水平および垂直に中央揃えする方法


408

タブのコンテンツを垂直方向に中央display:inline-flex揃えにしようとしていますが、CSSスタイルを追加すると、水平方向のテキスト配置が表示されなくなります。

各タブのテキストの配置をxとyの両方にするにはどうすればよいですか?

* { box-sizing: border-box; }
#leftFrame {
  background-color: green;
  position: absolute;
  left: 0;
  right: 60%;
  top: 0;
  bottom: 0;
}
#leftFrame #tabs {
  background-color: red;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 25%;
}
#leftFrame #tabs div {
  border: 2px solid black;
  position: static;
  float: left;
  width: 50%;
  height: 100%;
  text-align: center;
  display: inline-flex;
  align-items: center;
}
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>
  </div>
</div>


幅と高さ中央のdiv水平ずに変換表示型フレックスとCSS 2Dを使用し、垂直方向にのみCSSの方法が使用して最新のCSS方法freakyjolly.com/...
コードスパイ

回答:


666

.container {
    position: absolute;
    top: 50%;
    left: 50%;
    -moz-transform: translateX(-50%) translateY(-50%);
    -webkit-transform: translateX(-50%) translateY(-50%);
    transform: translateX(-50%) translateY(-50%);
}
<div class="container">
    <span>I'm vertically/horizontally centered!</span>
</div>


  • アプローチ2-フレックスボックス方式:

    ここの例 /全画面の例

    ではサポートされているブラウザ、設定display対象の要素へのflexおよび使用をalign-items: center垂直センタリング用とjustify-content: center水平センタリングのために。追加のブラウザーサポートのためにベンダープレフィックスを追加することを忘れないでください(例を参照)。

html, body, .container {
    height: 100%;
}

.container {
    display: -webkit-flexbox;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    align-items: center;
    justify-content: center;
}
<div class="container"> 
  <span>I'm vertically/horizontally centered!</span>
</div>


  • アプローチ3- table-cell/ vertical-align: middle

    ここの例 /全画面の例

    場合によっては、html/ body要素の高さがに設定されていることを確認する必要があります100%

    垂直方向の配置については、親要素のwidth/ heightをに設定し100%て追加しdisplay: tableます。次に、子要素について、をに変更しdisplaytable-cell追加しvertical-align: middleます。

    水平方向のtext-align: center中央揃えの場合、テキストとその他のinline子要素を中央揃えに追加できます。または、margin: 0 auto要素がblockレベルであると想定して、を使用することもできます。

html, body {
    height: 100%;
}
.parent {
    width: 100%;
    height: 100%;
    display: table;
    text-align: center;
}
.parent > .child {
    display: table-cell;
    vertical-align: middle;
}
<section class="parent">
    <div class="child">I'm vertically/horizontally centered!</div>
</section>


  • アプローチ4- 50%上から絶対的に配置して変位:

    ここの例 /全画面の例

    このアプローチでは、テキストの高さがわかっていることを前提としています18px。この例では、50%親要素を基準にして、要素を上から絶対的に配置します。margin-top要素の既知の高さの半分である負の値を使用します-9px。この場合は- です。

html, body, .container {
    height: 100%;
}

.container {
    position: relative;
    text-align: center;
}

.container > p {
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    margin-top: -9px;
}
<div class="container">
    <p>I'm vertically/horizontally centered!</p>
</div>


  • アプローチ5- line-heightメソッド(柔軟性が最も低い-推奨されません):

    ここの例

    場合によっては、親要素の高さが固定されます。垂直方向の中央揃えの場合、必要なことline-heightは、親要素の固定高さに等しい値を子要素に設定することだけです。

    このソリューションは場合によっては機能しますが、このように複数行のテキストがある場合は機能しないことに注意してください。

.parent {
    height: 200px;
    width: 400px;
    background: lightgray;
    text-align: center;
}

.parent > .child {
    line-height: 200px;
}
<div class="parent">
    <span class="child">I'm vertically/horizontally centered!</span>
</div>


3
はい、動作します。私はすでにcss3のインラインフレックスに慣れていたので、このアプローチを正しく行う方法を完全に忘れていました。本当に感謝しています。ありがとうございました。
修二2013年

上記の「フルスクリーン」の例をすべて開いたところ、垂直方向の配置が常に画面の下部に少し多すぎることに気づきました(解像度1920x1080では、ラベルが画面内で20ピクセル低すぎる)。Webページにアプローチ#2を実装し、divがフルスクリーンでなくても同じ問題が発生しました。私のウェブページでは問題はさらに悪化しています。(100pxが低すぎます)...
AXMIM 2015年

アプローチ6を追加するには、フレックスボックスを使用します(IE9 +、[90%+ブラウザー市場のカバレッジ](caniuse.com/#feat=flexbox)で機能):display: flex親とalign-self: center子で。
Dan Dascalescu、2015

私は少しアプローチ2:jsfiddle.net/yeaqrh48/278を変更しました。その結果、ウィンドウの高さを低くすると、テキストがスコープを超えて見えなくなります。この問題を解決するには?
ollazarev

1
@ josh-crozier css xdにあなたの投稿へのリンクがあるWebサイトを見つけました
zoran404

31

CSS3がオプションの場合(またはフォールバックがある場合)、変換を使用できます。

.center {
    right: 50%;
    bottom: 50%;
    transform: translate(50%,50%);
    position: absolute;
}

上記の最初のアプローチとは異なり、IE9 +にはオーバーフローバグがあるため、negative変換でleft:50%を使用することは避けてください。正の正しい値を使用すると、水平スクロールバーは表示されません。


transform: translateX(50%) translateY(50%);代わりに変革が必要だと思います。上記の変換は、Mozilla変換ドキュメントによれば、構文的に正しくありません。
Eirik H

1
@EirikHあなたが何を見ていたかはわかりませんが、その構文は問題ありません(ドキュメントでそう言っています)。XとYの値を取るtransformことができるほとんどの値には、両方を取る基本的な機能と、1つだけを取る特別な機能があります。
Scott Marcus

9

垂直方向と水平方向の両方でボックスを中央に配置する最良の方法は、2つのコンテナーを使用することです。

外側のコンテナ:

  • すべきだった display: table;

内部コンテナ:

  • すべきだった display: table-cell;
  • すべきだった vertical-align: middle;
  • すべきだった text-align: center;

コンテンツボックス:

  • すべきだった display: inline-block;
  • テキストを中央に配置したくない場合を除き、水平方向のテキスト配置を調整する必要があります

デモ :

body {
    margin : 0;
}

.outer-container {
    display: table;
    width: 80%;
    height: 120px;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

こちらのフィドルもご覧ください!

ページの中央に中央揃え:

コンテンツをページの中央に配置するには、次のコードを外部コンテナーに追加します。

  • position : absolute;
  • width: 100%;
  • height: 100%;

ここにそのデモがあります:

body {
    margin : 0;
}

.outer-container {
    position : absolute;
    display: table;
    width: 100%;
    height: 100%;
    background: #ccc;
}

.inner-container {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.centered-content {
    display: inline-block;
    text-align: left;
    background: #fff;
    padding : 20px;
    border : 1px solid #000;
}
<div class="outer-container">
   <div class="inner-container">
     <div class="centered-content">
        Center this!
     </div>
   </div>
</div>

こちらのフィドルもご覧ください!


7

2つの単純なflexプロパティを使用して、n divを2軸の中央に配置する方法を次に示します。

  • コンテナの高さを設定します。ここでは、本体を少なくとも100vhに設定します。
  • align-items: center ブロックを垂直方向に中央揃えにします
  • justify-content: space-around divの周りに無料の水平スペースを分散します

body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: space-around;
}
<div>foo</div>
<div>bar</div>


5

このコードスニペットを実行して、垂直方向と水平方向に配置されたdivを確認します。

html,
body,
.container {
  height: 100%;
  width: 100%;
}
.container {
  display: flex;
  align-items: center;
  justify-content: center;
}
.mydiv {
  width: 80px;
}
<div class="container">
  <div class="mydiv">h & v aligned</div>
</div>


3

私にとって最もシンプルでクリーンな解決策は、CSS3プロパティ「transform」を使用することです。

.container {
  position: relative;
}

.container a {
  position: absolute;
  top: 50%;
  transform: translate(0,-50%);
}
<div class="container">
  <a href="#">Hello world!</a>
</div>


3

    .align {
        display: flex;
        width: 400px;
        height: 400px;
        border: solid 1px black;
        align-items: center;
        justify-content: space-around;
    }
    .align div:first-child {
        width: 20px;
        height: 20px;
        background-color: red;
        position: absolute; 
    }
    .align div {
        width: 20px;
        height: 20px;
        background-color: blue;
    }
    <div class='align'>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>

最初の子は中央で垂直および水平に配置されます


2

Divをページの中央に配置するには check the fiddle link

#vh {
    border-radius: 15px;
    box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
    padding: 25px;
    width: 200px;
    height: 200px;
    background: white;
    text-align: center;
    margin: auto;
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
<div id="vh">Div to be aligned vertically</div>

更新 別のオプションはフレックスボックスを使用することです check the fiddle link

.vh {
    background-color: #ddd;
    height: 200px;
    align-items: center;
    display: flex;
}
.vh > div {
    width: 100%;
    text-align: center;
    vertical-align: middle;
}
<div class="vh">
    <div>Div to be aligned vertically</div>
</div>


2

以下は、望ましい結果を得るためのフレックスボックスアプローチです

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Flex-box approach</title>
<style>
  .tabs{
    display: -webkit-flex;
    display: flex;
    width: 500px;
    height: 250px;
    background-color: grey;
    margin: 0 auto;
    
  }
  .f{
    width: 200px;
    height: 200px;
    margin: 20px;
    background-color: yellow;
    margin: 0 auto;
    display: inline; /*for vertically aligning */
    top: 9%;         /*for vertically aligning */
    position: relative; /*for vertically aligning */
  }
</style>
</head>
<body>

    <div class="tabs">
        <div class="f">first</div>
        <div class="f">second</div>        
    </div>

</body>
</html>


2

別のアプローチはテーブルを使うことです:

<div style="border:2px solid #8AC007; height:200px; width:200px;">
  <table style="width:100%; height:100%">
    <tr style="height:100%">
      <td style="height:100%; text-align:center">hello, multiple lines here, this is super long, and that is awesome, dude</td>
    </tr>
  </table>
</div>


2

要素を垂直方向および水平方向に中央揃えにするために、以下のプロパティを使用することもできます。

このCSSプロパティは、itemsを垂直方向に配置し、次の値を受け入れます。

flex-start:アイテムはコンテナの上部に配置されます。

flex-end:アイテムはコンテナの下部に配置されます。

center:アイテムはコンテナの垂直方向の中央に配置されます。

baseline:アイテムはコンテナのベースラインに表示されます。

ストレッチ:アイテムはコンテナに合うようにストレッチされます。

このCSSプロパティjustify-contentは、アイテムを水平方向に配置し、次の値を受け入れます。

flex-start:アイテムはコンテナの左側に配置されます。

flex-end:アイテムはコンテナの右側に配置されます。

center:アイテムはコンテナの中央に配置されます。

space-between:アイテムは等間隔で表示されます。

space-around:アイテムの周りに等間隔で表示されます。


2

グリッドCSSアプローチ

#wrapper {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
}
.main {
    background-color: #444;
}
<div id="wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box main"></div>
</div>


2

以下に従う必要が新しい簡単な解決策:

  .centered-class {
      align-items: center;
      display: flex;
      justify-content: center;
      width: 100vw;
      height: 100vh;
    }
<div class="centered-class">
  I'm in center vertically and horizontally.
</div>


1
  • アプローチ6

/*Change units to "%", "px" or whatever*/

#wrapper{
  width: 50%;
  height: 70vh;
  background: rgba(0,0,0,.5);
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
}
#left{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  background: red;
}
#right{
  width: 50%;
  height: 50vh;
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  background: green;
}
.txt{
  text-align: center;
  line-height: 50vh;
}
<div id="wrapper">
   <div id="left" class="txt">Left</div>
   <div id="right" class="txt">Right</div>
</div>

    .container{ 
               width: 50%;  //Your container width here
               height: 50%; //Your container height here
               position: absolute; 
               top: 0; 
               right: 0;  
               bottom: 0; 
               left: 0; 
               margin: auto;
    }

1

上、下、左、右を0にするだけです。

<html>
<head>
<style>
<div> 
{
position: absolute;
margin: auto;
background-color: lightblue;
width: 100px;
height :100px;
padding: 25px;
top :0;
right :0;
bottom:0;
left:0;
}


</style>
</head>
<body>

<div> I am in the middle</div>

</body>
</html>

1

CSS(your element display:inline-grid+ grid-auto-flow: row;)GridとFlex Box(親要素display:flex;)を使用してこれを実現できます。

以下のスニペットを参照してください

#leftFrame {
  display: flex;
  height: 100vh;
  width: 100%;
}

#tabs {
  display: inline-grid;
  grid-auto-flow: row;
  grid-gap: 24px;
  justify-items: center;
  margin: auto;
}

html,body {
  margin:0;
  padding:0;
}
<div>
<div id=leftFrame>
  <div id=tabs>
    <div>first</div>
    <div>second</div>        
  </div>
</div>
</div>


1

ソースリンク

方法1)ディスプレイの種類flex

.child-element{
     display: flex;
     justify-content: center;
     align-items: center;
}

方法2)2D変換

.child-element {
   top: 50%;
   left: 50%;
   transform: translate(-50% , -50%);
   position: absolute;
}

ここで他の方法を参照してください


1

divを垂直方向と水平方向の両方にセンタリングする最も簡単な方法は次のとおりです。

<div style="display: table; width: 200px; height: 200px; border: 1px solid black;">
    <div style="display: table-cell; vertical-align: middle; text-align: center;">
        Text Here
    </div>
</div>

もう1つの例

.parent {
    display: table; 
    width: 100%; 
    height: 100%;
}

.child {
    display: table-cell; 
    vertical-align: middle;
    text-align: center;
}


<div class="parent">
    <div class="child">
        <h4><u>SERVICE IN BANGLADESH FLEET RESERVE <br> AND <br> RE-ENGAGEMENT ORDER FOR DEFENCE SERVICE</u></h4>
    </div>
</div>

1

これは、検索時にこのページにアクセスする可能性のある関連する問題です。(100px四角)divの「待機中」のdivを中央に配置したい場合、次のアニメーションgifを使用します。

  .centreDiv {
        position: absolute;
        top: calc(50vh - 50px);
        top: -moz-calc(50vh - 50px);
        top: -webkit-calc(50vh - 50px);
        left: calc(50vw - 50px);
        left: -moz-calc(50vw - 50px);
        left: -webkit-calc(50vw - 50px);
        z-index: 1000; /*whatever is required*/
    }

1

あなたはそれを好む場合なし
フレキシボックス/グリッド/表
またはなし
垂直整列:ミドル

できるよ:

HTML

<div class="box">
  <h2 class="box_label">square</h2>
</div>

CSS

.box {
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  text-align: center;
  border: 1px solid black;
}

.box_label {
  box-sizing: border-box;
  display: inline-block;
  transform: translateY(50%);
  text-align: center;
  border: 1px solid black;
}

0

これはうまくいくはずです

.center-div {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    min-height: 100vh;
}
<div class="center-div">Center Div</div>


0

シンプル!コンテナではフレックス表示を使用し、テキストでは自動マージンを使用します!!!!

#hood{

 width : 300px;
 height: 100px;
 border: solid 1px #333333;
 display: flex; 
}

#hood span{

  margin: auto
}



<html>
<head></head>
    <body>
        <div id="hood">
            <span> I Am Centered</span>
        </div>
    </body>
</html>

デモ:https : //jsfiddle.net/ay95f08g/

テスト済み:MacOs Mojave上のSafari、Chrome、Firefox、Opera。(2019年2月25日のすべての最終更新)


0

同じことをすることが多かったです。次のメソッドを使用して、ページの中央にdivを作成できます。

.center-box {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
}
<div class="center-box">
  <h1>Text in center of page</h1>
</div>

乾杯!


0

最も簡単なflexboxアプローチ:

単一の要素を垂直方向および水平方向に中央揃えする最も簡単な方法は、それをflexアイテムにして、マージンをauto次のように設定することです。

フレックスアイテムに自動マージンを適用すると、そのアイテムは指定されたマージンを自動的に拡張して、フレックスコンテナー内の余分なスペースを占有します...

.flex-container {
  height: 150px;
  display: flex;
}

.flex-item {
  margin: auto;
}
<div class="flex-container">
  <div class="flex-item">
    This should be centered!
  </div>
</div>

各方向の余白のこの拡張はします押し込み、要素がコンテナーの真ん中に正確にれます。

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