タブのコンテンツを縦方向に中央揃えしようとしていますが、CSSスタイルdisplay:inline-flex
を追加すると、水平方向のテキストの配置が消えます。
タブごとにテキストの配置を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>
transform
translateX
/translateY
:サポートされているブラウザ (ほとんどの場合)では、translateX(-50%) translateY(-50%)
と組み合わせてtop: 50%
/left: 50%
を使用して、要素を垂直方向/水平方向に動的に中央揃えできます。
.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>
サポートされているブラウザ で、対象要素の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>
table-cell
/vertical-align: middle
:場合によっては、html
/body
要素の高さが100%
に設定されていることを確認する必要があります。
垂直方向に配置するには、親要素のwidth
/height
を100%
に設定し、display: table
を追加します。次に、子要素について、display
をtable-cell
に変更し、vertical-align: middle
を追加します。
水平方向の中央揃えの場合は、テキストと他のinline
子要素を中央揃えにするためにtext-align: center
を追加することができます。あるいは、要素がblock
レベルであると仮定して、margin: 0 auto
を使用することもできます。
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>
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>
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>
CSS3がオプションの場合(またはフォールバックがある場合)、transformを使用できます。
.center {
right: 50%;
bottom: 50%;
transform: translate(50%,50%);
position: absolute;
}
上記の最初のアプローチとは異なり、IE9 +にはオーバーフローのバグがあるため、left:50%をマイナスの変換には使用したくありません。正の正の値を利用すると水平スクロールバーが見えなくなります。
ボックスを垂直方向と水平方向の両方に中央揃えする最善の方法は、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>
this Fiddle !も参照してください。
コンテンツをページの中央に配置するには、outherコンテナに以下を追加します。
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>
this Fiddle !も参照してください。
このコードスニペットを実行すると、垂直方向と水平方向に整列した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>
私にとって最も簡単でわかりやすい解決策は、CSS3プロパティ "transform"を使うことです。
.container {
position: relative;
}
.container a {
position: absolute;
top: 50%;
transform: translate(0,-50%);
}
<div class="container">
<a href="#">Hello world!</a>
</div>
.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つの単純なflexプロパティを使って2軸の n divを中心にする方法は次のとおりです。
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>
要素を垂直方向と水平方向に中央揃えするには、以下に示すプロパティも使用できます。
このCSSプロパティ aligns-items verticalは、次の値を受け入れます。
flex-start :項目はコンテナの上部に揃えられます。
flex-end :項目はコンテナの下部に揃えられます。
center :項目はコンテナの垂直方向の中央に揃えられます。
baseline :コンテナのベースラインに項目が表示されます。
stretch :アイテムはコンテナに合わせて拡大されます。
このCSSプロパティ justify-content は、アイテムを水平方向に整列し、次の値を受け入れます。
flex-start :項目はコンテナの左側に配置されます。
flex-end :項目はコンテナの右側に配置されます。
center :項目はコンテナーの中央に配置されます。
space-between :アイテムは等間隔で表示されます。
space-around :項目は等間隔で表示されます。
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>
もう一つのアプローチはtableを使うことです:
<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>
以下は、望ましい結果を得るためのフレックスボックスアプローチです。
<!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>
グリッド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>
垂直方向と水平方向の両方に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>
/*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;
}
シンプル!コンテナーにフレックス表示、テキストにマージン自動を使用してください!!!!
#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日のすべての最後の更新)
これを実現するには、CSS(あなたの要素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>
上下左右を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>