div
CSSを使用して垂直方向に中央揃えにします。テーブルやJavaScriptは必要ありませんが、純粋なCSSだけが必要です。いくつかの解決策を見つけましたが、それらのすべてにInternet Explorer 6のサポートがありません。
<body>
<div>Div to be aligned vertically</div>
</body>
div
Internet Explorer 6を含むすべての主要なブラウザーで垂直方向に中央揃えするにはどうすればよいですか?
div
CSSを使用して垂直方向に中央揃えにします。テーブルやJavaScriptは必要ありませんが、純粋なCSSだけが必要です。いくつかの解決策を見つけましたが、それらのすべてにInternet Explorer 6のサポートがありません。
<body>
<div>Div to be aligned vertically</div>
</body>
div
Internet Explorer 6を含むすべての主要なブラウザーで垂直方向に中央揃えするにはどうすればよいですか?
回答:
以下は、固定幅のフレキシブルな高さのコンテンツボックスを垂直方向および水平方向の中央に配置するために構築できる最高のオールラウンドソリューションです。Firefox、Opera、Chrome、Safariの最新バージョンでテストされ、機能しています。
.outer {
display: table;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.middle {
display: table-cell;
vertical-align: middle;
}
.inner {
margin-left: auto;
margin-right: auto;
width: 400px;
/*whatever width you want*/
}
<div class="outer">
<div class="middle">
<div class="inner">
<h1>The Content</h1>
<p>Once upon a midnight dreary...</p>
</div>
</div>
</div>
私は柔軟性をテストするためにいくつかの動的コンテンツを組み込んでおり、誰かがそれで何か問題を見つけたかどうか知りたいです。中央に配置されたオーバーレイ(ライトボックス、ポップアップなど)でもうまく機能するはずです。
.outer {position:absolute;width:100%;height:100%}
必要はありません。これらは単に説明するためのものです。私たちが必要とするすべてがあるdisplay:table
、私があったように誰もが混同されている場合、。
.outer
と、middle
そしてはっきり無視.inner
し、そのスタイルを。要素の水平方向の中央に配置されないので、auto margin-left
にmargin-right
設定したポイントが何であるかわかりません。
width: 100%;
して追加margin: 0 auto
すると、.outer
幅も可変になります。
top: 0; left 0;
少なくとも1のデフォルトを設定Chromeで、不足している
リストに表示されないもう1つ:
.Center-Container {
position: relative;
height: 100%;
}
.Absolute-Center {
width: 50%;
height: 50%;
overflow: auto;
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
border: solid black;
}
height
宣言する必要があります(可変高さを参照)overflow: auto
コンテンツの流出を防ぐための推奨設定(オーバーフローを参照)margin: auto;
最も簡単な方法は、次の3行のCSSです。
1)位置:相対的;
2)上:50%;
3)変換:translateY(-50%);
次に例を示します。
div.outer-div {
height: 170px;
width: 300px;
background-color: lightgray;
}
div.middle-div {
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
<div class='outer-div'>
<div class='middle-div'>
Test text
</div>
</div>
height
外でのdiv
です100%
。次に、でのみ機能しposition: absolute;
ます。
-webkit-transform
させるために必要な、特にバリアントについて言及するためのこの特定の回答に対する追加の賞賛...
実際、垂直方向の中央揃えには2つのdivが必要です。コンテンツを含むdivには幅と高さが必要です。
#container {
position: absolute;
top: 50%;
margin-top: -200px;
/* half of #content height*/
left: 0;
width: 100%;
}
#content {
width: 624px;
margin-left: auto;
margin-right: auto;
height: 395px;
border: 1px solid #000000;
}
<div id="container">
<div id="content">
<h1>Centered div</h1>
</div>
</div>
これが結果です
現在、フレックスボックスソリューションは最新のブラウザにとって非常に簡単な方法であるため、これをお勧めします。
.container{
display: flex;
align-items: center;
justify-content: center;
height: 100%;
background:green;
}
body, html{
height:100%;
}
<div class="container">
<div>Div to be aligned vertically</div>
</div>
navbar
、高さを調整するheight: calc(100% - 55px)
か、高さを調整できますnavbar
。
float
ます。ありがとう。
Edit 2020:IE8のような古いブラウザーをサポートする必要がある場合にのみこれを使用してください(これは拒否する必要があります😉)。そうでない場合は、フレックスボックスを使用します。
これは私が見つけた最も簡単な方法であり、私はいつもそれを使用しています(jsFiddleデモはこちら)
この記事については、CSS TricksのChris Coyierに感謝します。
html, body{
height: 100%;
margin: 0;
}
.v-wrap{
height: 100%;
white-space: nowrap;
text-align: center;
}
.v-wrap:before{
content: "";
display: inline-block;
vertical-align: middle;
width: 0;
/* adjust for white space between pseudo element and next sibling */
margin-right: -.25em;
/* stretch line height */
height: 100%;
}
.v-box{
display: inline-block;
vertical-align: middle;
white-space: normal;
}
<div class="v-wrap">
<article class="v-box">
<p>This is how I've been doing it for some time</p>
</article>
</div>
サポートはIE8から始まります。
たくさんの研究の末、ようやく究極の解決策を見つけました。フロート要素でも機能します。ソースを表示
.element {
position: relative;
top: 50%;
transform: translateY(-50%); /* or try 50% */
}
50%
私のために働いた(ではなく-50%
)
html, body { margin: 0; height: 100%; }
body {
display: flex;
align-items: center;
}
<div>This is centered vertically</div>
justify-content: center
はアイテムを水平方向にも中央揃えにします
divをページの中央に配置するには、フィドルリンクを確認します。
#vh {
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.box{
border-radius: 15px;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
padding: 25px;
width: 100px;
height: 100px;
background: white;
}
<div id="vh" class="box">Div to be aligned vertically</div>
別のオプションは、フレックスボックスを使用することです。フィドルリンクを確認してください。
.vh {
background-color: #ddd;
height: 400px;
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>
別のオプションは、CSS 3変換を使用することです。
#vh {
position: absolute;
top: 50%;
left: 50%;
/*transform: translateX(-50%) translateY(-50%);*/
transform: translate(-50%, -50%);
}
.box{
border-radius: 15px;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
padding: 25px;
width: 100px;
height: 100px;
background: white;
}
<div id="vh" class="box">Div to be aligned vertically</div>
%
、em
s、rem
sです。絶対値または固定値は、ピクセルまたはポイントです。あなたが言及しているのは「宣言された高さでのみ機能する」です。ただし、Moesで説明されているこの方法では高さが必要ですが、相対単位で宣言する場合は、中央に配置されたDIVの内側にコンテンツがどの程度含まれていても、DIVがコンテンツに合わせて垂直方向に拡大します。それがこの方法の優れた点です。他の良い点は、誰かがそれらのブラウザをサポートする必要がある場合に備えて、この方法がIE8 / 9/10で機能することです。
transform: translate(-50%, -50%);
テクニックを使用することです。IE8の場合は、上/中央揃えのままにして、次に進みます。
最も簡単な解決策は次のとおりです。
.outer-div{
width: 100%;
height: 200px;
display: flex;
border:1px solid #000;
}
.inner-div{
margin: auto;
text-align:center;
border:1px solid red;
}
<div class="outer-div">
<div class="inner-div">
Hey there!
</div>
</div>
残念ながら、驚くべきことではありませんが、このソリューションは、思ったよりも複雑です。また、残念ながら、垂直方向に中央揃えにしたいdivの周りに追加のdivを使用する必要があります。
Mozilla、Opera、Safariなどの標準に準拠したブラウザの場合、外側のdivをテーブルとして表示し、内側のdivをテーブルセルとして表示するように設定する必要があります。Internet Explorerの場合、内側のdivを外側のdiv内に完全に配置し、上部を50%に指定する必要があります。次のページでは、この手法について詳しく説明し、いくつかのコードサンプルも提供しています。
JavaScriptを使用して垂直方向の中央揃えを行う手法もあります。JavaScriptとCSSを使用したコンテンツの垂直方向の配置がそれを示しています。
誰かがInternet Explorer 10(およびそれ以降)のみに関心がある場合は、次を使用しますflexbox
。
.parent {
width: 500px;
height: 500px;
background: yellow;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.centered {
width: 100px;
height: 100px;
background: blue;
}
<div class="parent">
<div class="centered"></div>
</div>
フレックスボックスのサポート:http ://caniuse.com/flexbox
align-items: center;
。
要素を垂直方向に中央揃えする最新の方法は、を使用することflexbox
です。
あなたは身長を決める親と中央に置く子供が必要です。
次の例では、divをブラウザー内の中央に配置します。どのような(私の例では)重要なのは設定しているheight: 100%
にbody
してhtml
、その後、min-height: 100%
あなたのコンテナに。
body, html {
background: #F5F5F5;
box-sizing: border-box;
height: 100%;
margin: 0;
}
#center_container {
align-items: center;
display: flex;
min-height: 100%;
}
#center {
background: white;
margin: 0 auto;
padding: 10px;
text-align: center;
width: 200px;
}
<div id='center_container'>
<div id='center'>I am center.</div>
</div>
Internet Explorer 6と7を気にしない場合は、2つのコンテナーを使用する手法を使用できます。
display: table;
display: table-cell;
vertical-align: middle;
display: inline-block;
幅や高さを気にすることなく、必要なコンテンツをコンテンツボックスに追加できます。
body {
margin: 0;
}
.outer-container {
position: absolute;
display: table;
width: 100%; /* This could be ANY width */
height: 100%; /* This could be ANY height */
background: #ccc;
}
.inner-container {
display: table-cell;
vertical-align: middle;
}
.centered-content {
display: inline-block;
background: #fff;
padding: 20px;
border: 1px solid #000;
}
<div class="outer-container">
<div class="inner-container">
<div class="centered-content">
Malcolm in the Middle
</div>
</div>
</div>
こちらのフィドルもご覧ください!
水平方向と垂直方向の両方で中央揃えにしたい場合は、以下も必要です。
text-align: center;
text-align: left;
またはtext-align: right;
に再調整する必要がありますbody {
margin: 0;
}
.outer-container {
position: absolute;
display: table;
width: 100%; /* This could be ANY width */
height: 100%; /* This could be ANY height */
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">
Malcolm in the Middle
</div>
</div>
</div>
こちらのフィドルもご覧ください!
.center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* (x, y) => position */
-ms-transform: translate(-50%, -50%); /* IE 9 */
-webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */
}
.vertical {
position: absolute;
top: 50%;
//left: 0;
transform: translate(0, -50%); /* (x, y) => position */
}
.horizontal {
position: absolute;
//top: 0;
left: 50%;
transform: translate(-50%, 0); /* (x, y) => position */
}
div {
padding: 1em;
background-color: grey;
color: white;
}
<body>
<div class="vertical">Vertically left</div>
<div class="horizontal">Horizontal top</div>
<div class="center">Vertically Horizontal</div>
</body>
関連:画像の中央揃え
これは、この問題に戻る必要があるときにいつも行くところです。
ジャンプしたくない人のために:
position:relative
またはとして指定しposition:absolute
ます。position:absolute
top:50%
子コンテナをして、上部を親の中央に移動します。コードでのこの例:
<style type="text/css">
#myoutercontainer {position:relative}
#myinnercontainer {position:absolute; top:50%; height:10em; margin-top:-5em}
</style>
...
<div id="myoutercontainer">
<div id="myinnercontainer">
<p>Hey look! I'm vertically centered!</p>
<p>How sweet is this?!</p>
</div>
</div>
CSSのflexプロパティを使用します。
.parent {
width: 400px;
height:200px;
background: blue;
display: flex;
align-items: center;
justify-content:center;
}
.child {
width: 75px;
height: 75px;
background: yellow;
}
<div class="parent">
<div class="child"></div>
</div>
またはを使用display: flex;
してmargin: auto;
テキストセンターを表示
パーセンテージ(%)の高さと幅を使用します。
私はこのCSSを作成したばかりであり、詳細については以下を参照してください。CSSの3行だけで垂直方向に何でも揃えるこの記事。
.element {
position: relative;
top: 50%;
transform: perspective(1px) translateY(-50%);
}
初心者の方はお試しください
display: flex;
align-items: center;
justify-content: center;
<div style="display:flex"><div style="margin:auto">Inner</div></div>
Billbadからの回答は、.inner
divの固定幅でのみ機能します。このソリューションtext-align: center
は、.outer
divに属性を追加することで動的な幅で機能します。
.outer {
position: absolute;
display: table;
width: 100%;
height: 100%;
text-align: center;
}
.middle {
display: table-cell;
vertical-align: middle;
}
.inner {
text-align: center;
display: inline-block;
width: auto;
}
<div class="outer">
<div class="middle">
<div class="inner">
Content
</div>
</div>
</div>
を使用した3行のコードはtransform
、最新のブラウザとInternet Explorerで実質的に機能します。
.element{
position: relative;
top: 50%;
transform: translateY(-50%);
-moz-transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
}
この回答の以前のバージョンでいくつかの不完全性を見つけたので、この回答を追加します(そして、スタックオーバーフローではコメントを付けることができません)。
現在のdivが本体にあり、コンテナーdivがない場合、相対的な「位置」はスタイルを混乱させます。ただし、「修正済み」は機能するようですが、ビューポートの中央のコンテンツを修正します
また、いくつかのオーバーレイdivを中央に配置するためにこのスタイルを使用しましたが、Mozillaでは、この変換されたdiv内のすべての要素が下の境界線を失っていました。おそらくレンダリングの問題です。しかし、それらのいくつかに最小限のパディングを追加するだけで正しくレンダリングされました。ChromeとInternet Explorer(驚くべきことに)はパディングの必要なしにボックスをレンダリングしました
次のリンクは、CSSの3行だけで簡単に実行できる方法を示しています。
クレジット:セバスチャンEkström。
私は質問がすでに答えを持っていることを知っていますが、私はその単純さのためにリンクで実用性を見ました。
ブラウザーの互換性については回答していませんが、新しいグリッドとそれほど新しいFlexbox機能についても言及しています。
グリッド
From:Mozilla-グリッドのドキュメント-Divを垂直に配置
ブラウザーサポート:グリッドブラウザーサポート
CSS:
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 10px;
grid-auto-rows: 200px;
grid-template-areas:
". a a ."
". a a .";
}
.item1 {
grid-area: a;
align-self: center;
justify-self: center;
}
HTML:
<div class="wrapper">
<div class="item1">Item 1</div>
</div>
フレックスボックス
ブラウザーサポート:Flexboxブラウザーサポート
CSS:
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
align-items: center;
justify-content: center;
フレックスボックスを使用せずに、すべてのブラウザーに確実な解決策-「align-items:center;」display:tableとvertical-align:middle;の組み合わせです。
.vertically-center
{
display: table;
width: 100%; /* optional */
height: 100%; /* optional */
}
.vertically-center > div
{
display: table-cell;
vertical-align: middle;
}
<div class="vertically-center">
<div>
<div style="border: 1px solid black;">some text</div>
</div>
</div>
‣デモ:https ://jsfiddle.net/6m640rpp/
特に、相対的な(不明な)高さを持つ親divの場合、不明なソリューションのセンタリングは私にとってはうまく機能します。この記事には、本当にすばらしいコード例がいくつかあります。
Chrome、Firefox、Opera、Internet Explorerでテストされています。
/* This parent can be any width and height */
.block {
text-align: center;
}
/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can
also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}
<div style="width: 400px; height: 200px;">
<div class="block" style="height: 90%; width: 100%">
<div class="centered">
<h1>Some text</h1>
<p>Any other text..."</p>
</div>
</div>
</div>
私が最近見つけたトリックがあります:あなたは使用する必要があり、top 50%
次にあなたはtranslateY(-50%)
.outer-div {
position: relative;
height: 150px;
width: 150px;
background-color: red;
}
.centered-div {
position: absolute;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
background-color: white;
}
<div class='outer-div'>
<div class='centered-div'>
Test text
</div>
</div>
tables
ここのレイアウトについて人々は常に不快に思ってはいけませんか?