縦横比を固定しながらwindowサイズに追従する一般的な書き方を教えてください。
比率を保ちたいのは画像要素、divなどで囲った要素、それらを並べたときなどです。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
私も先日までMasakazuFukamiさんと同じ方法でCSSで縦横比固定をしてたんですが、
某セミナーで「自分のwidthを基準に縦横比を固定する方法」を教えてもらい、目からウロコでしたので
共有しておきます。
CSS
1.box{ 2 position:relative; 3 width:30%;←ここは任意の数 4} 5.box:before{ 6 padding-top: 150%; ←親要素.boxに対する比率 7} 8.box__inner{ 9 position:absolute; 10 top:0; 11 left:0; 12 width:100%; 13 height:100%; 14}
これは便利w
投稿2015/09/16 05:26
編集2015/09/16 05:27総合スコア3763
0
縦横比の固定ですね。
横だけの比率保持なら簡単なんですが、縦横の比率保持は結構難しいと思います。
投稿者様は①画像要素②divなどで囲った要素の縦横比率保持なのでひとつずつ解説します。
①画像の縦横比率保持
画像に関しては横幅を%指定すると縦幅も勝手に比率保持されるのでwidth="50%"など指定すると問題なく縦横の比率を保持したまま可変します。
②divタグ等の縦横比率保持
こえはcssのドンピシャの方法はなく、無理やり作成します。
1.jsで指定する方法(.boxという要素に縦:横 = 1:1.5とする)
javascript
1 window.onresize = function(){ 2 var $box = $('.box'); 3 var width = $box.width(); 4 5 $box.height(width * 1.5); 6 }
とすることで、windowのサイズがリサイズするたびにjsが実行されて$boxのheightに横幅の1.5倍が入ります。
2.cssで無理やり指定する(縦:横 = 1:1.5)(個人的にはこっちが好きです)
cssで指定するのに何が難しいかというと実装する側としては、
「自分の横幅」の1.5倍としたいわけですがcssで「自分の横幅」を基準に指定してくれるプロパティでいいものがないことです。
ただ、縦横のレスポンシブにする場合はpadding-top(or padding-bottom)を指定することが多いのでこれを使います。
つまり1:1.5にしたい場合はwidth:○%;padding-top:150%;を指定すると縦横のレスポンシブになります。 そしてその要素をposition:relative;にし、子要素をposition:absolute;top:0;left:0;width:100%;heght:100%;にしてpaddingを指定した親要素いっぱいに広げてあげることで縦横のレスポンシブを指定することが可能です。
具体的なコードは以下です。
html
1<div class="box"> 2 <div class="box__inner">ここがレスポンシブになるよ</div> 3</div>
css
1.box{ 2 position:relative; 3 width:30%;←ここは任意の数 4 height:0; 5 padding-top:150%;←1:1.5の場合。1:0.5の場合だと50%を指定、1:3の場合だと300%を指定しましょう! 6} 7.box__inner{ 8 position:absolute; 9 top:0; 10 left:0; 11 width:100%; 12 height:100%; 13}
こうすることで実現できます!
長くなってしまいましたが、頑張ってください!
投稿2015/09/14 03:38
編集2015/09/14 03:40総合スコア1869
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
html
1<div class="content"> 2 <div class="left"> 3 Sample Text Node 4 </div> 5 <div class="right"> 6 Sample Text Node 7 </div> 8</div> 9<p> 10 <img src="./test.jpg" alt="test" /> 11 Sample Text Node 12</p>
css
1div.content, 2p{ 3overflow : hidden; 4} 5div.content div.left{ 6 width : 20%; 7 float : left; 8} 9div.content div.right{ 10 width : 80%; 11 float : right; 12} 13p img{ 14 width : 20%; 15 float : left; 16} 17media screen and (max-width : 767px){ 18 div.content div.left, 19 div.content div.right, 20 p img{ 21 width : 100%; 22 float : none; 23 } 24}
私はこんな感じでmedia queryを利用したり%指定したりしてます。
投稿2015/09/14 03:01
編集2015/09/14 03:03総合スコア775
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/16 08:33
2015/09/16 08:37
2015/09/17 03:16
2015/09/17 03:18
2015/09/17 03:41
2015/09/17 14:45 編集
2015/09/18 02:15