2013-07-19 23 views
48

私は画像スライド(フレックススライダ)の上にいくつかのコンテンツを縦横に配置しようとしています。これに類似の質問がいくつかありましたが、私の特定の問題に直接適用される満足のいく解決策を見つけることができませんでした。 FlexSliderの制限のため、実装ではimgタグにposition: absolute;を使用できません。width:100%がdiv {display:table-cell}で動作しないのはなぜですか?

私はほとんど以下の回避策が働いています。唯一の問題は、幅&の高さの宣言を divのdisplay: table-cellプロパティで動作させることができないことです。

この標準的な動作ですか、または私のコードで何か不足していますか?それが標準的な動作であれば、私の問題に対する最良の解決策は何ですか?

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%; 
} 

注:中心内容は以上1つの要素になりますので、私は行の高さのトリックを使用することはできません。

jsFiddle.outer-wrapperdisplay:table;を置く

答えて

56

が動作するように見えた...

JSFiddle Link


EDIT:二つ

がオフyour answer行く...ディスプレイの表のセル

を使用したラッパーは、私はあなたの答えにコメントだろうが、私はとにかく:(あまりにも少ない担当者を持って、そしてDejaVu(あなたが.outer-wrapperdisplay:table;を追加するだけですように思えます?)、あなたは全面的にtable-wrapperを取り除くことができます。

JSFiddle

しかし、ええ、position:absoluteはあなたがimgdivを配置することができます、私はあまりにも速く読んで、あなたはまったくposition:absoluteを使用することができなかったと思ったが、あなたはすでにそれを考え出したように思えます。小道具!

私は彼の答えを参照してください、またはちょうど私jsfiddleリンクを使用し、そのすべての99%timshutesの仕事の後に、ソースコードを投稿するつもりはない

更新:ワンラッパーフレキシボックス

使い方

それはしばらくしていると、すべてのクールな子供たちがフレキシボックスを使用している:

<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;"> 
    stuff to be centered 
</div> 

Full JSFiddle Solution

ブラウザのサポート(source):IE 11+、FireFoxの42+、クロム46+、サファリ8+、iOS版8.4+(-webkit-接頭辞)、アンドロイド4.1以降(-webkit-プレフィックス)

CSS Tricks: a Guide to Flexbox

How to Center in CSS:入力どのようにあなたのコンテンツを中心にしたいのか、それはhtmlとcssでそれを行う方法を出力します。未来はここです!

+0

私は上記のテキストが必要です - イメージの上にオーバーレイされます。 – timshutes

+0

申し訳ありませんが、私は銃を飛ばしました。私の編集を参照してください – woojoo666

+0

フレックスボックスセンタリングは、インラインテキストをマークアップの中心に置くと面白いことに注意してください - これは 'inline-block'要素のように扱われます。 – Paracetamol

0

How about this? (jsFiddle link)

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; 
} 
+0

を行うこのソリューションは水平方向の配置ではなく、(私もセンタリングしたい)垂直方向の配置を修正するを使用します。また、テーブルセル要素の内部にフロートを配置するのはベストプラクティスではないということを心に留めておきます。しかしそれは本当ではないかもしれません。 – timshutes

+0

divコンテンツを中心にしたいですか? – Hushme

+0

を縦横に表示します。 – timshutes

12

私はこれを考え出しました。私はこれがいつか誰かを助けることを知っています。

は、どのようにキーが第三のラッパーだった、相対位置の画像

にわたり&水平センター事業部を縦にします。私はより少ないラッパーを使用する答えを投票するだろう。

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を見ることができます。

+0

ありがとう、この余分なラッパーは完全に私を助けた;) –

-1

min-height:100%とmin-width:100%を追加するだけで動作します。私も同じ問題がありました。 3番目のラッパーは必要ありません

5

「幅」の値が高いほど、ボックスの幅が小さくなり、逆も同様です。以前は同じ問題があったので、これを見つけました。したがって:

.inner-wrapper { 
    width: 1%; 
} 

が問題を解決します。

+0

ようこそStackOverflow!答えは常に高く評価されていますが、この質問は3年前に尋ねられ、すでに解決策がありました。問題が解決済みとマークされていないか、問題に対処するための劇的に改善された方法を見つけた場合を除いて、回答を提示することでトップに質問を投げ込まないようにしてください。 –

1

ようこそ2017に、これらの日はvWvHトリックに

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>

関連する問題