2016-08-11 4 views
4

ここからotherquestionsここにあるので、私はアスペクト比をイメージに維持して、水平方向と垂直方向の両方にコンテナに収めることができるようになります容器に収まるように収縮させる。ほぼそこに!パーフェクトイメージコンテナ:中央、アスペクト比、シャンクと盛り上がりフィット

どういうところが間違っていますか?小さな画像を展開したい場合は、<img>タグにクラスを追加することができます。つまり、小さな画像を展開する機能をオフにする場合は<img class="nogrow" ... />です。

JSBin

.parent { 
 
    width: 240px; 
 
    height: 160px; 
 
    border: 1px solid black; 
 
    position: relative; 
 
} 
 

 
.img-container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    right: 0; 
 

 
    text-align:center; 
 
    font: 0/0 a; 
 
} 
 

 
.img-container .centerer { 
 
    display: inline-block; 
 
    vertical-align: middle; 
 
    height: 100%; 
 
} 
 

 
.img-container img { 
 
    vertical-align: middle; 
 
    display: inline-block; 
 
    max-height: 100%; 
 
    max-width: 100%; 
 
}
<table> 
 
<thead> 
 
    <th>Actual</th> 
 
    <th>Expected</th> 
 
</thead> 
 
<tbody> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/1000x500" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/1000x500" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/500x600" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/500x600" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/50x60" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/50x60" alt="" height="100%" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/100x50" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img src="http://placehold.it/100x50" alt="" width="100%" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <th colspan="2">With ".nogrow"</th> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/1000x500" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/1000x500" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/500x600" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/500x600" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/50x60" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/50x60" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/100x50" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    <td> 
 
     <div class="parent"> 
 
     <div class="img-container"> 
 
      <div class="centerer"></div> 
 
      <img class="nogrow" src="http://placehold.it/100x50" alt="" /> 
 
     </div> 
 
     </div> 
 
    </td> 
 
    </tr> 
 
</tbody> 
 
</table>

+1

これは取り組むことができますが、私はしばらくの間、いくつかの純粋なCSSの解像度を希望されています。 – Season

+0

@シーズンそれは時々起きているようで、何とか過去には理想的ではないものを作っていました:/ /しかし、私はそこに純粋なCSSソリューションがあることを本当に欲しがっています – Assimilater

答えて

4

object-fit: containを試してみてください(と.nogrowためnoneまたはscale-down)。 divを一切必要としないでください。イメージの寸法を100%100%に設定するだけです。少しJSで

<!DOCTYPE html> 
<style> 
td { width:240px; height:160px; border:1px solid } 
img { width:100%; height:100%; object-fit:contain; display:block } 
.nogrow { object-fit:scale-down } 
</style> 
<table> 
<tr><td><img src="http://placehold.it/1000x500" alt=""> 
<tr><td><img src="http://placehold.it/500x600" alt=""> 
<tr><td><img src="http://placehold.it/50x60" alt=""> 
<tr><td><img src="http://placehold.it/100x50" alt=""> 
<tr><th>With ".nogrow" 
<tr><td><img class="nogrow" src="http://placehold.it/50x60" alt=""> 
<tr><td><img class="nogrow" src="http://placehold.it/100x50" alt=""> 
</table> 
+0

ディスプレイの期待と現実を並べて表示すると、実際のユースケースにはテーブルはありません。しかし、これはまさに私が探しているものと思われます。そして、それはずっと簡単で、私は怒り狂って、幸せで、悲しいものになるでしょう。 – Assimilater

+0

一般的な応答型で動作するためには、親(この場合は '​​')に 'position:relative'がなければなりません。また、 ''には 'display:block'が必要ではないと考えています。 – Assimilater

+0

完全なテストセットで回答を更新する価値があるかもしれません:http://jsbin.com/gaxegemudi/1/edit?html、 css、output – Assimilater

関連する問題