固定縦横比3:2
でdiv
内にportrait imagesを使用して画像レイアウトを作成したいと思います。画像のサイズは327x491px
です。
主な問題は、画像間の不要なスペースです。 HTML/CSSのみを使用して画像をモザイクとして配置するにはどうすればよいですか?
HTML:
<div id="pictures1" class="_pictures1 grid">
<div class="_pictures1-01"><div style="width:125px;height: 188px; background: red;"><img src="" width="125" height="188" alt="" /></div></div>
<div class="_pictures1-02"><div style="width:192px;height: 288px;background: green;"><img src="" width="192" height="288" alt="" /></div></div>
... SO ON ...
</div>
CSS:
._pictures1 {
width: 935px; height: 490px;
margin: -26px 0 0 59px;
float: left;
top: 20%; left: 20%;
position: absolute;
border: 1px gray solid;
}
._pictures1 div {position: absolute;}
._pictures1-01 {top: 0px; left: 35px;}
._pictures1-02 {top: 200px; left: 0px;}
/* ... SO ON ... */
適切な答えを出すために、まず要件を明確にします。
あなたはあなたのイメージを表示するために何千もの可能性を持つことができます。簡単なレイアウトを作成して、独自のレイアウトを作成する方法を示します。
これはあなたが達成できることのFANCY FIDDLEであり、これは次のようになります。
最初:簡単にするために、画像に3つのサイズがあるとします(計算を簡単にするために、画像サイズを1ピクセルずつ変更しました)。
328*492px
164*246px
82*123px
2番目:画像はすべて縦向きで、コンテナの高さは大きな画像と同じであるため、高さ492pxの縦棒で作業する必要があります3つの幅:
328px
ワイド、すべてのサイズの画像を表示できます328/2 = 164px
広く、中小の画像を表示できます327/4 = 82px
広く、小さい画像しか表示できません3番目:列の数と画像サイズは?これはあなた次第です。あなたはあなたのコンテナの全幅と表示したい画像の数に応じて選択をしなければなりません。
しかし、あなたのフィドルでは、コンテナ(._pictures1
) があります 935px
widthこれは、直前に選択された列幅では実現できません。
935/82 = 11.4024...
あなたが得ることができる最も近いものは82*12 = 984px
幅広のコンテナ。
コンテナーの幅を変更するか、最初の幅に合わせて画像と列のサイズを変更する必要があります。
または(スポイラー)パーセンテージで作業できます。これは、レイアウトをレスポンシブにする必要がある場合に特に役立ちますが、これは複雑になり、私は物事をシンプルにしようとしています。
きっとあなたは好奇心旺盛でチェックしたいと思いますので、ここにレイアウト例を示します。
ペン、フォトショップ、または自分に合ったその他のツールを使用します。本当に上手い場合は、脳を使って思い通りのレイアウトをメンタルに表現することもできます。
解答のビギンに見える画像をデザインしました。
前に述べたように、レイアウトの可能性(列の数とそれらの列の画像のサイズ)はたくさんあるので、例では2つの大きな列と1つの中型の列と2つの小さな列を選択しました
328*2+164+82*2 = 984px ( = width of container so it can fit!)
これで結果を見ることができます
このレイアウトは floats に基づいているので、コンテナー、列、画像の幅、高さを定義して、それらがすべて互いにうまく隣り合うようにする必要があります(計算とデザイン、それは簡単です)。
CSS:
#wrap {
width:984px;
height:492px;
}
.big_col, .medium_col, .small_col{
height:492px;
float:left;
}
img {
display:block;
margin:0;
padding:0;
border:none;
float:left;
}
.big_col {
width:328px;
}
.medium_col{
width:164px;
}
.small_col{
width:82px;
}
.big_img img {
width:328px;
height:493px
}
.medium_img img {
width:164px;
height:246px;
}
.small_img img {
width:82px;
height:123px;
}
そしてHTMLマークアップ:
<div id="wrap">
<div class="big_col">
<div class="small_img">
<img src="http://www.lorempixum.com/327/491/abstract" alt="" />
<img src="http://www.lorempixum.com/g/327/491" alt="" />
<img src="http://www.lorempixum.com/g/327/491/sports" alt="" />
<img src="http://www.lorempixum.com/327/491/nature" alt="" />
</div>
<div class="medium_img">
<img src="http://www.lorempixum.com/g/327/491/business" alt="" />
<img src="http://www.lorempixum.com/327/491/people" alt="" />
</div>
<div class="small_img">
<img src="http://www.lorempixum.com/g/327/491/food" alt="" />
<img src="http://www.lorempixum.com/327/491" alt="" />
<img src="http://www.lorempixum.com/327/491/cats" alt="" />
<img src="http://www.lorempixum.com/327/491/people" alt="" />
</div>
</div>
<div class="big_col">
<img src="http://www.lorempixum.com/327/491/nature" alt="" />
</div>
<div class="small_col small_img">
<img src="http://www.lorempixum.com/g/327/491/transport" alt="" />
<img src="http://www.lorempixum.com/g/327/491/sports" alt="" />
<img src="http://www.lorempixum.com/327/491/nature" alt="" />
<img src="http://www.lorempixum.com/g/327/491/sports" alt="" />
</div>
<div class="medium_col medium_img">
<img src="http://www.lorempixum.com/327/491/nightlife" alt="" />
<img src="http://www.lorempixum.com/g/327/491/transport" alt="" />
</div>
<div class="small_col small_img">
<img src="http://www.lorempixum.com/327/491/fashion" alt="" />
<img src="http://www.lorempixum.com/327/491/nature" alt="" />
<img src="http://www.lorempixum.com/g/327/491/sports" alt="" />
<img src="http://www.lorempixum.com/327/491" alt="" />
</div>
</div>
どちらか一方の寸法を設定し、両方を設定しない場合、画像は滑らかにサイズ変更されます。幅だけをパーセント単位に設定してみてください。
まず、画像間のスペースを削除するには、「0」に設定されたpadding
とmargin
を削除するだけです。
次に、あなたが望むものを達成するために、それらの戦略を使用または組み合わせることができます:
1)サイズの1つにピクセル単位の固定サイズを割り当てます。他のサイズは自動的に拡大縮小されます。
2)JavaScriptで必要なサイズを計算し、値を動的に割り当てることができます。たとえばjQueryフレームワークの場合:
$(img).each(function(){
var h = this.height();
var w = this.width();
if (w => h){
this.attr('width', w*0.66);
}
else {
this.attr('height',h*.066);
}
});
3)必要に応じて、divsおよびbackground-size: cover
またはbackground-size: contain
にcss background-imageを静的または動的に使用できます( w3c docs
同じ位置と比率を動的に維持したい場合、絶対配置は最良の選択ではないようです。
ネイティブHTMLフローが通常の方法です。絶対配置は、ビタミンタブレットのようなものです。必要なときに使いますが、メインの食べ物ではありません。 ;)
私がすることは:
コンテナーを必要に応じて(たとえば、中央に)配置し、その幅を、ウィンドウ/セクションのパーセンテージで幅を調整します。
次に、._ pictures1-xx divをその中に置き、コンテナのパーセンテージを使用して写真の幅のサイズを設定します。高さは比率を自動的に保ちます(*)
次に、._ pictures1-xx divに「インラインブロック」とフロート「左」を表示させます。次に、最後の写真の後に明確な「両方」の小さなdivを入れ、コンテナを閉じます。
(*)リマインダー:幅または高さのデフォルト値は「自動」です。つまり、もう一方がpx /%値の場合に画像の比率を維持する任意のサイズを意味します。写真の比率を維持するために、写真の高さが定義されると、水平マージンはネイティブで動的になります。幅を定義して高さを自動のままにすると、写真の比率を維持するために高さが動的になり、マージンは変わりません。
これがお役に立てば幸いです。
簡単な解決策を提供したいと思います。
img
タグをDIVでラップするだけです。そして、このラップされたDIVにCSSを適用する必要があります。
<img src='some_image.jpg'>
<div class="img_wrapper">
<img src='some_image.jpg'>
</div>
// suggestion: target IMG with parent class / ID
.img_wrapper img{
width: 100%;
height: auto;
}
クラス.img_wrapper
内のすべての画像のアスペクト比は適切です。
私の経験では、どちらか高さまたは幅(両方ではない)の寸法のみを設定した場合、画像はそれに応じて拡大縮小されます。
aspectRatioResizeImg
これは、アスペクト比を維持して画像をサイズ変更できるjQueryプラグインであり、コンテナに適合します。必要に応じて、画像のアスペクト比に合わせてコンテナのサイズを変更できます。
https://github.com/stereoactivo/jquery.resize-image-aspect-ratio
このようなものを試してください
スタイリング
body{
background: black;
width:80%;
margin:5em auto;
display:block;
}
.wrapper{
background:#FFF;
float:left;
}
.container{
height:476px;
width:192px;
display:inline-block;
float:left;
}
.small{
height:188px;
width:125px;
display:block;
margin:0 auto;
background:#333;
}
.medium{
background:#666;
width:192px;
height:288px;
}
.large{
height:476px;
width:200px;
background:#999;
display:inline-block;
float:left;
}
これはHTMLです
<div class="wrapper">
<div class="container">
<div class="small">
<div class="small_inner">
</div>
</div>
<div class="medium">
<div class="medium_inner">
</div>
</div>
</div>
<div class="large">
<div class="large_inner">
</div>
</div>
<div class="container">
<div class="medium">
<div class="medium_inner">
</div>
</div>
<div class="small">
<div class="small_inner">
</div>
</div>
</div>
<div class="large">
<div class="large_inner">
</div>
</div>
<div class="container">
<div class="small">
<div class="small_inner">
</div>
</div>
<div class="medium">
<div class="medium_inner">
</div>
</div>
</div>
</div>
img{
height: auto;
width: 50%
}
画像をdivでラップします。比率に応じてdivの幅と高さを設定します。画像の高さのみを指定します。画像に必要なスペースだけを取りたい場合は、display:inlineも使用します