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

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

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

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

意見交換

クローズ

12回答

1313閲覧

レイアウトシフト対応について、みなさんどうしていますか?

pureko555

総合スコア4

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

1クリップ

投稿2024/03/02 04:36

編集2024/03/04 03:49

0

1

imgタグに「width」「height」を指定すると画像サイズが固定されてしまうため、ネットで調べるとCSSに「height: auto;」を指定するといった解決方法がでてきます。
たしかに「height: auto;」を指定すると画像サイズが固定されることはなくなりました。

ただ、「height: auto;」を指定した状態で画像が読み込めない場合、高さがなくなりレイアウトが崩れる状態になります。
対処法について調べてはみたのですが、aspect-ratioを使う、画像をdivで囲みdiv側で高さを指定するなど人によって対応がバラバラでした。

画像1つ1つに上記を対応するのも手間がかかるのでみなさんはどうしているのか気になり質問させていただきました。

「height: auto;」をつける理由は、画像サイズが固定だとデザイン的に違和感があるため、ブラウザ幅を縮めても画像を可変さたいという理由です。

それなら「width」「height」指定しなければいいというご意見もあるかと思いますが、imgタグに「width」「height」を指定しないとサイトの評価が下がると聞いたため付与しています。

自分的には、基本は「height: auto;」でレイアウトシフトが気になる場合は個別対応かなとは思っています。

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

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

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

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

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

回答12

#1

yambejp

総合スコア117665

投稿2024/03/02 05:29

「width」「height」を指定すると画像サイズが固定されてしまう

固定されないことでレイアウトが崩れることを問題とするなら固定することが解決策では?
固定されることのデメリットはなんだと思われています?

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

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

#2

pureko555

総合スコア4

投稿2024/03/02 05:35

編集2024/03/02 05:37

#1
デメリットは、ブラウザ幅を縮小してもサイズが変わらないのでデザイン的に違和感がでてくることです。

画像の大きさは変わらず、文字サイズが縮小されるとバランスが悪くなるのがデメリットかなと思ってます。

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

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

#3

Lhankor_Mhy

総合スコア37413

投稿2024/03/04 02:07

編集2024/03/04 05:25

ただ、画像が読み込めないと高さがなくなり、レイアウトが崩れる状態になります。

そうなりますか?
手元のブラウザ(Firefox123 Chrome122)だと、width属性height属性が指定されていればレイアウトシフトは起きないようでした。
これは2,3年前から、内部的にaspect-ratio: attr(width) / attr(height)を適用してるからだったと記憶してます。
ただ、width属性height属性によるアスペクト比が実際の画像と異なる場合には、読み込み後に intrinsic aspect ratio が実際の画像に更新されるはずなので、レイアウトシフトが起きるかと思います。そのような運用をする理由はあまりないと思いますが。

もし、Safari限定などのケースであれば、そのように書かれた方が話が混乱しないかもしれませんね。


自分的には、基本は「height: auto;」でレイアウトシフトが気になる場合は個別対応かなと

そもそもimg要素にwidth属性height属性を指定するのって、レイアウトシフトを防ぐ方策だったと記憶してます。
なので、レイアウトシフトに対応しないなら、そもそもwidth属性height属性を指定しなければいいかな、と思います。その場合にはheight: auto;は初期値なので不要かと。

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

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

#4

pureko555

総合スコア4

投稿2024/03/04 03:43

#3
ご回答ありがとうございます。

width属性height属性が指定されていればレイアウトシフトは起きないようでした。

おっしゃるとおり、 width属性height属性を指定するとレイアウトシフトは起こりません。

ただ、width属性height属性を指定してしまうと、画像のサイズが固定されてしまい、デザイン的に違和感があるので、その対策として「height: auto;」を指定して、ブラウザ幅が変わると画像サイズも変更するようにしました。
そうすると、画像サイズは変わるのですが、画像が読み込めないと高さがなくなり、レイアウトが崩れるという状態です。

レイアウトシフトに対応しないなら、そもそもwidth属性height属性を指定しなければいいかな、と思います。

width属性height属性を指定しないとサイトの評価が下がると聞いたため、苦肉の策でwidth属性height属性と「height: auto;」の両方指定する方がいいのかなと思っておりました。

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

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

#5

Lhankor_Mhy

総合スコア37413

投稿2024/03/04 04:52

#4

そうすると、画像サイズは変わるのですが、画像が読み込めないと高さがなくなり、レイアウトが崩れるという状態

当方で試した限りではレイアウトシフトは起きませんでした(Firefox123 Chrome122)。環境の問題があるのかもしれないですね。

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

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

#6

pureko555

総合スコア4

投稿2024/03/04 05:32

#5

検証いただきありがとうございます。
こちらも(Chrome122)ですが、レイアウトシフトが発生しますね。
バージョン以外の何かで違いがあるのかもしれないですね。

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

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

#7

Lhankor_Mhy

総合スコア37413

投稿2024/03/04 05:34

#4
コードで話した方が早そうなので、サンプルを置いておきます。
https://jsfiddle.net/Lhankor_Mhy/gscephnb/

当方の環境ですと、『画像が読み込めないと高さがなくなり、レイアウトが崩れる』ということは起きないのですが、そちらでは違いますか?
また、想定されていたコードとは何か違いますか?

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

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

#8

Lhankor_Mhy

総合スコア37413

投稿2024/03/04 05:50

あと、これはGoogle先生次第だと思うのではっきりしたことは言えませんが、「レイアウトシフトは対応しないけどSEOのためにwidth属性height属性を埋める」というのは本末転倒、というかなにかそれ効果があるのかな、という気がしてます。
【Core Web Vitals】CLSの要因と改善策をざっくりまとめ #Web - Qiita

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

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

#9

pureko555

総合スコア4

投稿2024/03/04 06:22

#7

サンプルまでありがとうございます。
こちらのサンプルどおりにやるとレイアウトシフトは起きませんでした。

色々試してみたところどうもalt属性に値を入れると高さが消えるみたいでした。
※いただいたサンプルでもalt属性を入れると高さが消えました。

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

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

#10

pureko555

総合スコア4

投稿2024/03/04 06:28

#8

URLまでありがとうございます。
ちなみにLhankor_Mhyさんはどう対応されているのでしょうか。

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

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

#11

Lhankor_Mhy

総合スコア37413

投稿2024/03/04 06:58

#9
#10

なるほど、代替テキストがありましたね。ありがとうございます。
display: blockとしてみるのはどうでしょうか。もちろん、インライン画像を使いたいときには使えませんが、レイアウトに関与するような画像は大体ブロックレベルボックスにしたいんじゃないかと。

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

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

#12

pureko555

総合スコア4

投稿2024/03/04 07:05

#11

レイアウトに関与するような画像は大体ブロックレベルボックスにしたいんじゃないかと。

たしかにそうですね。
今後はdisplay: blockの使い分けで対応しようと思います。

長々とお付き合いいただきありがとうございました。助かりました。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問