画像スライド(flexslider)にオーバーレイするコンテンツを垂直方向および水平方向に中央に配置しようとしています。これに似た質問がいくつかありましたが、私の特定の問題に直接適用される満足のいく解決策を見つけることができませんでした。 FlexSliderの制限のため、実装のimgタグでposition: absolute;
を使用することはできません。
私は仕事の下にほとんど回避策を持っています。唯一の問題は、inner-wrapper
プロパティを持つdisplay: table-cell
divで幅と高さの宣言を取得できないことです。
これは標準的な動作ですか、それともコードに何か不足していますか?それが標準的な動作である場合、私の問題に対する最善の解決策は何ですか?
HTML
<ul>
<li>
<img src="#">
<div class="outer-wrapper">
<div class="inner-wrapper">
<h1>My Title</h1>
<h5>Subtitle</h5>
</div>
</div>
</li>
</ul>
CSS
html, body {
margin: 0; padding: 0;
width: 100%; height: 100%;
}
ul {
background: #CCC;
height: 100%;
width: 100%;
list-style-position: outside;
margin: 0; padding: 0;
}
li {
width: 100%;
display: table;
}
img {
width: 100%;
height: 410px;
}
.outer-wrapper {
position: absolute;
width: 100%;
height: 100%;
top: 0;
margin: 0; padding: 0;
}
.inner-wrapper {
display: table-cell;
vertical-align: middle;
text-align: center;
width: 100%;
height: 100%;
}
注:中央のコンテンツは複数の要素になるため、行の高さのトリックは使用できません。
jsFiddle 。
display:table;
を.outer-wrapper
に入れるとうまくいくようです...
編集:表示テーブルセルを使用する2つのラッパー
私はあなたの答えにコメントしますが、私は担当者が少なすぎます:(とにかく...
出発 あなたの答え 、あなたがする必要があるのはdisplay:table;
(Dejavu?)の中に.outer-wrapper
を追加するだけのようで、table-wrapper
全体を取り除くことができます-心から。
ええ、position:absolute
を使用すると、div
をimg
の上に配置できます。読み過ぎて、position:absolute
をまったく使用できないと思いましたが、すでにそれを理解しました。小道具!
ソースコードを投稿するつもりはありません。99%のティムシュートの仕事が終わったので、彼の答えを参照するか、自分のjsfiddleリンクを使用してください
更新:Flexboxを使用した1つのラッパー
しばらくして、すべてのクールな子供たちがフレックスボックスを使用しています:
<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;">
stuff to be centered
</div>
ブラウザのサポート( source ):IE 11 +、FireFox 42 +、Chrome 46 +、Safari 8 +、iOS 8.4+(-webkit-
プレフィックス)、Android 4.1+(-webkit-
プレフィックス)
CSSでのセンタリング方法 :コンテンツをセンタリングする方法を入力し、それをHTMLおよびCSSで行う方法を出力します。未来はここにあります!
これを見つけました。私はこれがいつか誰かを助けることを知っています。
相対的な位置にある画像上でDivを垂直方向および水平方向にセンタリングする方法
キーは3番目のラッパーでした。ラッパーの使用が少ない答えには投票します。
HTML
<div class="wrapper">
<img src="my-slide.jpg">
<div class="outer-wrapper">
<div class="table-wrapper">
<div class="table-cell-wrapper">
<h1>My Title</h1>
<p>Subtitle</p>
</div>
</div>
</div>
</div>
CSS
html, body {
margin: 0; padding: 0;
width: 100%; height: 100%;
}
ul {
width: 100%;
height: 100%;
list-style-position: outside;
margin: 0; padding: 0;
}
li {
width: 100%;
display: table;
}
img {
width: 100%;
height: 100%;
}
.outer-wrapper {
width: 100%;
height: 100%;
position: absolute;
top: 0;
margin: 0; padding: 0;
}
.table-wrapper {
width: 100%;
height: 100%;
display: table;
vertical-align: middle;
text-align: center;
}
.table-cell-wrapper {
width: 100%;
height: 100%;
display: table-cell;
vertical-align: middle;
text-align: center;
}
jsFiddle の動作を確認できます。
2017年へようこそ最近はvW
とvH
を使用してトリックを行います
html, body {
margin: 0; padding: 0;
width: 100%; height: 100%;
}
ul {
background: #CCC;
height: 100%;
width: 100%;
list-style-position: outside;
margin: 0; padding: 0;
}
li {
width: 100%;
display: table;
}
img {
width: 100%;
height: 410px;
}
.outer-wrapper {
position: absolute;
width: 100%;
height: 100%;
top: 0;
margin: 0; padding: 0;
}
.inner-wrapper {
display: table-cell;
vertical-align: middle;
text-align: center;
width: 100vw; /* only change is here "%" to "vw" ! */
height: 100vh; /* only change is here "%" to "vh" ! */
}
<ul>
<li>
<img src="#">
<div class="outer-wrapper">
<div class="inner-wrapper">
<h1>My Title</h1>
<h5>Subtitle</h5>
</div>
</div>
</li>
</ul>
「幅」の値が大きいほど、ボックスの幅が小さくなり、逆もまた同様であることを発見しました。以前に同じ問題を抱えていたので、これを見つけました。そう:
.inner-wrapper {
width: 1%;
}
問題を解決します。
100%はビューポートの100%を意味します。幅の%単位のほかにvw単位を使用して修正できます。問題は、100vwがビューポートに関連し、%が親タグに関連していることです。そのようにします:
.table-cell-wrapper {
width: 100vw;
height: 100%;
display: table-cell;
vertical-align: middle;
text-align: center;
}
CSS
ul {
background: #CCC;
height: 1000%;
width: 100%;
list-style-position: outside;
margin: 0; padding: 0;
position: absolute;
}
li {
background-color: #EBEBEB;
border-bottom: 1px solid #CCCCCC;
border-right: 1px solid #CCCCCC;
display: table;
height: 180px;
overflow: hidden;
width: 200px;
}
.divone{
display: table-cell;
margin: 0 auto;
text-align: center;
vertical-align: middle;
width: 100%;
}
img {
width: 100%;
height: 410px;
}
.wrapper {
position: absolute;
}