質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

3回答

6389閲覧

CSSでのリキッドレイアウトの作り方

enokiyo

総合スコア78

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

3クリップ

投稿2015/09/13 14:12

編集2015/09/14 02:39

縦横比を固定しながらwindowサイズに追従する一般的な書き方を教えてください。

比率を保ちたいのは画像要素、divなどで囲った要素、それらを並べたときなどです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
aKusano

総合スコア3763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enokiyo

2015/09/16 08:33

MasakazuFukamiさんとの違いがよくわからなかったのですが:beforeは何を意味していますでしょうか?
aKusano

2015/09/16 08:37

.boxに直接padding-topを設定した場合、基準は.box自身のwidthではなく、その親要素のwidthとなります。 :before擬似要素にpadding-topを設定した場合は、.boxのwidthが基準となります。 詳しくはこちらのスライドをご覧ください。 http://yoshiko-pg.github.io/slides/20150830-backtobasics/
MasakazuFukami

2015/09/17 03:16

うぉおおおおおおおおお! これ超便利ですね!!!!!! ゾクッとしました!!!(笑) これ使わせてもらいます!!!!!
MasakazuFukami

2015/09/17 03:18

すいません僕の回答ちょっと間違ってましたw 僕.boxのしたにもう一つdivをかませてそれを基準にpadding-topを指定するようにしてました! おそらくyoshikoさんがされていることと同じ原理です! ただ、before要素を使って実装されるのはすごいですねw 感動しましたw
MasakazuFukami

2015/09/17 03:41

ちなみに僕の無知で申し訳ないんですが、afterやbeforeなどの擬似要素にcontentやdisplay:block;などを指定しなければ動かない?理由ってなんなんでしょうか??
aKusano

2015/09/17 14:45 編集

:before、:afterは「擬似要素」といって、指定要素の開始タグ直後(:before)・終了タグ直前(:after)に「要素っぽいもの(擬似要素)」を作り出すことができる特殊なセレクタです。 擬似要素を実際に生成するのがcontentプロパティなので、それがないと何も作られない=動作しないはずです。(上の私のサンプルソースだとダメですね多分w) contentプロパティで作られる擬似要素は、<span></span>に相当するものと考えると分かりやすいのですが、デフォルトではdisplay:inline;として生成されます。なので、widthやheightを設定したければdisplay:block;などに変更しないとスタイルが効かないです。 ちなみにposition:absolute;が設定された要素は自動的にdisplay:block;になる仕様のようですので、擬似要素をposition:absolute;で絶対配置にする場合は、わざわざdisplay:block;と明示しなくても良いようです。
MasakazuFukami

2015/09/18 02:15

うぉ!メチャクチャ勉強になります! 個人的にはcontentプロパティをデフォルトで''に指定していてほしいなと感じました(笑) 擬似要素がdisplay:inline;で作られるのは初めて知りました! メチャクチャ勉強になります! ありがとうございます!
guest

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
MasakazuFukami

総合スコア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
nanndemoiikara

総合スコア775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問