🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

Q&A

解決済

2回答

1026閲覧

”max-width:100%”について

susumu-99

総合スコア44

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

0グッド

0クリップ

投稿2021/02/01 12:42

HTMLレスポンシブデザインのFluid imageの”max-width:100%”について質問させてください。
とあるサイトで、”max-width:100%”の説明が、「ブラウザの幅に応じて画像が拡大・縮小するが、元の画像よりも大きくはならない」と書いているものがあります(こちらを説明Aとします)。
この説明は正しいのでしょうか?
ほかのサイトでは、『「画像の大きさの最大値」が「親要素のwidth幅の100%の値」』となっています(こちらを説明Bとします)。Bの説明なら理解できます。ですが、Aの説明だと、仮に元の画像の幅が1000px、親要素が、ブラウザの幅で960pxの場合を想定すると、画像の幅は元の画像幅の1000pxまでは大きくなるので、ブラウザから画像が40pxはみ出ることになります。Bの説明だと、画像の幅が親要素(ブラウザの幅)の100%を最大値とするのだから、ブラウザ幅いっぱい(100%)に広がりはみ出ることはないと思います。
ただAの説明をしているサイトが間違ったことを書いてあるとも思えず、私の認識の甘さで、結局どちらも正しいことを言っているのかもしれない、であるならどう解釈すればいいのか手助けをいただきたいと思った次第です。

 追伸、質問を書いてから気がついたのですが、AとBの説明には、”max-width:100%”の"100%"が元の画像の幅をさしているのか、親要素の幅をさしているのかという違いがあるような気がしています。やっぱりAの説明はまちがっているのでしょうか?

回答よろしくお願いしますm(__)m

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

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

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

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

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

guest

回答2

0

この手のサイトはもちろん書籍であっても結構誤りが多いのがこの業界(言い過ぎか?w
また、昔正しい事が書いてあったはずの資料が、現在は仕様変更等により正しく無くなったなんて事もしばしばあります。

所詮は企業が作ったものなので動くものが真実という側面もあり
時には検証して自分の目で確かめたものを真実として取り入れる必要もあるかもしれません。
ちょっと書いてみたので挙動を見ながら弄ってみるといいと思います。

検証コード

https://jsfiddle.net/5bL8e3ks/

html

1<div>指定なし</div> 2<img src="https://teratail-v2.storage.googleapis.com/uploads/avatars/u17/177223/061af5094a21beeb_thumbnail.png"> 3<hr> 4 5<div>囲みあり</div> 6<select id="styleSelector1"> 7 <option value="50">width: 50%</option> 8 <option value="100" selected>width: 100%</option> 9 <option value="150">width: 150%</option> 10 <option value="200">width: 200%</option> 11</select> 12<div id="styleView1">width: 100%(95x95[px])</div> 13<div style="width: 95px; height: 95px;"> 14 <img id="iconImg1" src="https://teratail-v2.storage.googleapis.com/uploads/avatars/u17/177223/061af5094a21beeb_thumbnail.png"> 15</div> 16 17<hr> 18 19<div>囲み無し</div> 20<select id="styleSelector2"> 21 <option value="50">width: 50%</option> 22 <option value="100" selected>width: 100%</option> 23 <option value="150">width: 150%</option> 24 <option value="200">width: 200%</option> 25</select> 26<div id="styleView2">width: 100%(95x95[px])</div> 27<img id="iconImg2" src="https://teratail-v2.storage.googleapis.com/uploads/avatars/u17/177223/061af5094a21beeb_thumbnail.png">

jQuery3.4を使用

js

1const styleView1 = $('#styleView1'); 2const iconImg1 = $('#iconImg1'); 3const styleView2 = $('#styleView2'); 4const iconImg2 = $('#iconImg2'); 5 6$('#styleSelector1').on('change', (event) => { 7 let selected = event.currentTarget.value; 8 iconImg1.css({width: selected + '%'}); 9 let w = iconImg1.width(); 10 let h = iconImg1.height(); 11 styleView1.html('width: ' + selected + '% - (' + w + 'x' + h + '[px])'); 12}).trigger('change'); 13 14$('#styleSelector2').on('change', (event) => { 15 let selected = event.currentTarget.value; 16 iconImg2.css({width: selected + '%'}); 17 let w = iconImg2.width(); 18 let h = iconImg2.height(); 19 styleView2.html('width: ' + selected + '% - (' + w + 'x' + h + '[px])'); 20}).trigger('change');

css

1#iconImg1, #iconImg2 { 2 max-width: 100%; 3}

投稿2021/02/01 13:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

susumu-99

2021/02/01 14:22

検証していただき大変ありがとうございます。 初めてみるサイトで使用方法が分からないため、またゆっくり見せていただきます。
guest

0

ベストアンサー

ただAの説明をしているサイトが間違ったことを書いてあるとも思えず

それが間違いです。間違ったことを書いてあるWebサイトは、山のようにあります。

投稿2021/02/01 12:51

maisumakun

総合スコア145975

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

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

susumu-99

2021/02/01 13:13

そうなんですね。やっぱりAの説明はまちがっているという解釈でいいんですか… Aの説明はとある評価の高いサイトのものだったので、こんな基本的な部分で間違いがあるとはがっかりです(´;ω;`)ウゥゥ 回答ありがとうございました!
maisumakun

2021/02/01 13:17

自然な幅がある画像に対してmax-widthをかけても、自然な幅以上に拡大されることはありません。
susumu-99

2021/02/01 13:26

AもBも別のことを言っているが、両方とも正しいということでしょうか?
maisumakun

2021/02/01 13:31 編集

Aの説明は、max-widthの挙動自体を説明したもので、「100%」の意味に触れていないのではないでしょうか?
susumu-99

2021/02/01 14:05

回答ありがとうございます。 元の画像の幅を100%として、100%より大きくならないという意味ではないのでしょうか? 回答で書いていただいたMDNのサイトにmax-width:75%とうものがありましたが、それは元の画像の幅を100%としたときの75%以上にはならないというふうに解釈しました。 あとすいません、2つ目にいただいた回答の「max-width を包含ブロックの幅に対するパーセント値で定義します。」に戻らせていただきたのですが、この場合、包含するブロックというのは質問内のブラウザ(親要素)の幅を指しますか?画像(”max-width:100%”を指定している要素)の幅を指しますか?
maisumakun

2021/02/01 14:14 編集

> 回答で書いていただいたMDNのサイトにmax-width:75%とうものがありましたが、それは元の画像の幅を100%としたときの75%以上にはならないというふうに解釈しました。 違います。パーセントの基準は包含ブロック(positionなどでずらさなければ親要素)です。
susumu-99

2021/02/01 14:45

回答ありがとうございます。 そうですか であれば”max-width:100%”の100%は親要素の100%ということになるので、質問中のBの説明は間違いではなさそうですね。 一方で、こちらもmaisumakunの回答でいただいた内容ですが、『Aの説明は、max-widthの挙動自体を説明したもので、「100%」の意味に触れていないのではない』のであり正しい内容であれば、 結論として、「”max-width:100%”は元の画像の幅が親要素の幅の100%より大きければ、親要素の幅100%を最大とするが、元の画像の幅が親要素の幅の100%より小さければ、元の画像の幅を最大とする」ということになるんでしょうか
susumu-99

2021/02/01 15:00 編集

なんか目から鱗で理解できたような気がします。長時間、質問にお付き合いいただき大変ありがとうございました。 またよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問