模写修行メディア

HTMLの画像サイズ(widthとheight)の扱い方!

画像サイズ(widthとheight)の扱い方は、初学者の方が苦戦するポイントです。

下記のようなことが起きたこと、ありませんか?

  • 画像のサイズをうまく指定できない
  • 画像が大きく表示されて横スクロールしてしまう
  • 画像が潰れた感じで表示されてしまう
  • 画像がぼやけて(粗い)表示されてしまう

これらは画像サイズの扱い方を正しく理解していないと起きることです。

サイズ指定はちょっとしたコツさえ掴めば良いので、ぜひこの記事で理解してみてください!

gakuのアイコン

👇 メンターやってます 👇

模写修行やこのメディアを作ったエンジニア中心に、メンタリングサービスHello Mentorを運営しています。

0からweb制作やプログラミングの勉強を始める方はもちろん、12ヶ月以上独学している方や既にお仕事をしている方にもご利用いただいています!

模写武者くんのアイコン
  • 独学に限界を感じている...
  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業のアドバイスが欲しい...

このような方は、ぜひ下記のリンクからサービス詳細をご覧ください。無料相談もお気軽にお申し込みください。

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

👆 メンターやってます 👆

この記事の目次

imgタグの使い方

画像の指定にはimgタグを使います。

<img src="..." alt="..." width="..." height="..." >

他にも入れた方が良い属性はありますが、初学者の方は一旦src / alt / width / heightを入れると覚えておくと良いです。

ただし、装飾目的の画像の場合alt属性は空にします。つまりalt=""このように書くということです。なくて良いのではなく、空にする点に注意してください。

画像のサイズ指定方法

例えば、横1200px / 縦600pxの画像を使う場合の書き方は下記のようになります。単位のpxは必要ありません。

<img src="..." alt="..." width="1200" height="600" >

このimgタグのwidthとheightで、画像の"表示サイズ"を指定すると思っている方が多いです。

それでもサイズ指定はできますが、常にそのサイズになってしまいます。実際は見ている環境によって、表示される画像のサイズは可変にすることが多いので、imgタグのwidthとheightでサイズ指定すると問題が起きます。

一旦はimgタグのwidthとheightで"表示サイズ"指定するわけではないと理解すればOK!

gakuのアイコン

imgタグのwidthとheightで"表示サイズ"指定しない理由

上の動画の画像は、下記のコードです。CSSは全く指定していません。

<img src="https://placehold.jp/500x200.png" alt="..." width="500" height="200"/>

動画を見るとわかる通り、画像は常に横500pxで表示されているので、ブラウザの幅が500px以下の場合は、横スクロールしてしまいます。

この問題があるため、imgタグのwidthとheightで"表示サイズ"指定はしない方が良いです。※ ただし、imgタグのwidthとheightは必要です。その点については後述します。

重要!
"表示サイズ"は、imgタグのwidthとheightではなく、CSSで指定する

画像の"表示サイズ"指定方法

まずは横スクロールを防ぐ

前述した通り、"表示サイズ"は、imgタグのwidthとheightではなく、CSSで指定します。

<img src="https://placehold.jp/500x200.png" alt="..." width="500" height="200"/>
img {
    width: 100%;
    height: auto;
}

このようにimgタグに対して、width: 100%;height: auto;を指定すると、画像は常に横幅100%で表示されます。それが下記の動画です。

こうすることで、横スクロール問題は防げました。ただし、どんなに小さい画像も親要素に対して100%で表示されます。

親要素にサイズ指定

横スクロールを防いだ上で、画像に幅を設定したい場合は、画像をdivタグなどで囲って、そのdivに対してサイズ指定すると良いです。

<div class="img-wrap">
    <img src="https://placehold.jp/500x200.png" alt="..." width="500" height="200" />
</div>
img {
    width: 100%;
    height: auto;
}
.img-wrap {
    width: 50%;
}

このような感じです。親要素の.img-wrapが50%でimgが100%ということは、imgは親要素に対して100%なので、下記の動画のように50%になります。

このように可変幅で指定すると、ブラウザの横幅よりも大きくなること(=横スクロールすること)はありません。

固定幅にもできる

<div class="img-wrap">
    <img src="https://placehold.jp/500x200.png" alt="..." width="500" height="200" />
</div>
img {
    width: 100%;
    height: auto;
}
.img-wrap {
    width: 200px;
}

例えば、この場合、親要素の.img-wrapが200pxでimgが100%だから、imgは200pxになります。

駆け出しの方を見ていると、大きめの固定値を入れて横スクロールしてしまっているケースが多いです。

今回の例のように200pxくらいでは、横スクロールすることはないと思って良いです。200px以下の環境で見ているユーザーはいないからです。

これが360pxくらいになると、自分の環境では良くても320px程度のSPを使っているユーザーの環境では、横スクロールしてしまいます。

【注意】imgタグのwidthとheightも必要

CSSでサイズ指定をするから、imgタグのwidthとheightはいらないと思ってしまいがちですが、imgタグのwidthとheightは必要です。

少し難しい話しになりますが、imgタグのwidthとheightがないとレイアウトシフトという現象が起きてしまいます。

詳しくは下記の記事をご覧ください。

レイアウトシフト(Cumulative Layout Shift)とは?対策・改善方法も紹介!

初学者の方は、混乱する可能性もあるので、一旦はimgタグのwidthとheightも必須と覚えておくだけでも良いと思います!

gakuのアイコン

imgタグのwidthとheightには、画像そのものの幅と高さを指定すれば良いです。下記の赤枠の数値です。

【初学者・中級者の方】独学に限界を感じてませんか?

プログラミングやデザインは独学可能ですが、ほとんんどの方が苦戦します。

↓このように感じていませんか?

  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業するまでの道が見えない...

そんな問題を解決するために、模写修行やこのメディアを作ったエンジニア/デザイナー中心に、メンタリングサービスHello Mentorを始めました。

初級者から中級者まで対応できる、数少ないサービスです。

スクールのような大金は必要ありません。高額な費用は払いたくないけど、プロのサポートが欲しい方は、ぜひ下記のリンクからサービス詳細をご覧ください。

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

👆 メンターは全員現役エンジニア 👆

画像に関するよくやりがちなミス

画像に関するよくやりがちなミスを3つ紹介します。

大きな固定値を入れる

既に説明していますが、1番多いミスなので、再度記載します。

大きな固定値を入れると、自分の見ている環境では問題なくてもユーザーの環境によっては、横スクロールする場合があります。

ほぼ確実にどんな環境でも横スクロールしないくらい小さい幅を除いて、widthに固定値は使わない方が良いです。

元画像より大きなサイズを指定する

  • 元の画像は500px
  • 表示サイズは1000px

このようなケースは、無理やり画像を引き伸ばして表示してるだけなので、画像がぼやけます。下記のようなケースです。

<div class="img-wrap">
    <img src="https://placehold.jp/500x200.png" alt="..." width="500" height="200" />
</div>
.img-wrap {
    max-width: 1000px;
}

1000pxで表示したい場合は、1000px以上の画像を用意して使いましょう。

本来は複数サイズの画像を用意して、ユーザーの環境によって出しわけをします。その方法は、中級者向けの内容なので、初学者の方は表示するサイズの2 or 3倍の画像を使うと良いです。そうすれば、おおよそ綺麗に表示されるはずです。

画像の出しわけに関しては、下記の記事をご覧ください。(中級者向け)

srcset/sizes属性やpictureタグを使ったレスポンシブイメージを解説

画像の比率を無視する

元の画像が横2000px/縦1000pxだとします。この場合、横:縦=2:1の比率を崩すと、画像が潰れて表示されます。下記のようなケースです。

<div class="img-wrap">
    <img src="https://placehold.jp/2000x1000.png" alt="..." width="2000" height="1000" />
</div>
img {
    width: 100%;
    height: auto;
}
.img-wrap {
    width: 1000px;
    height: 3000px;
}

見栄えが悪いので、画像の縦横比は崩さないように気をつけましょう。

そもそもimgwidth: 100%;height: auto;が入っているので、.img-wrapでは、widthだけ指定すればOKです。heightは自動(auto)で決まります。

比率を崩してはいけないと書きましたが、object-fitを使うと、CSSで画像のトリミングが可能です。詳しくは下記の記事をご覧ください。

CSSで画像をトリミングする方法を紹介!

ケーススタディ

この動画のようなサイズ指定をすることを考えてみます。

HTML・CSSは下記のようになっています。

<div class="img01">
    <img src="https://placehold.jp/2000x600.png" alt="..." width="2000" height="600" />
</div>

<div class="img02">
    <img src="https://placehold.jp/1000x400.png" alt="..." width="1000" height="400" />
</div>

<div class="img03">
    <img src="https://placehold.jp/200x200.png" alt="..." width="200" height="200" />
</div>
img {
    width: 100%;
    height: auto;
}

ここから動画のような見た目になるように、CSSを書いていきます。

img01に関して

img01は、常に横100%になっています。imgにはwidth: 100%;が入っているので、.img01に指定するCSSはありません。

何もせずとも、動画のような挙動になります。

img02に関して

img02は、下記のような特徴があります。

  • ブラウザの横500pxまでは100%で表示
  • ブラウザの横500px以上では500px固定表示

この場合、下記のように書けば動画と同じ挙動になります。

.img02 {
    max-width: 500px;
}

imgにはwidth: 100%;が入っているので、横幅100%で表示されますが、max-width: 500px;を指定しているので、最大でも500pxにしかなりません。( = 幅を広げても500pxで拡大が止まってくれる )

img03に関して

img03は、常に100pxで表示されています。

そのため下記を入れれば良いです。

.img03 {
    width: 100px;
}

固定値ですが、100pxくらい小さいサイズであれば問題ありません。

全コードまとめ

余白や中央寄せするためのコードも含め、下記のコードで動画とおりになります。

<div class="img01">
    <img src="https://placehold.jp/2000x600.png" alt="..." width="2000" height="600" />
</div>

<div class="img02">
    <img src="https://placehold.jp/1000x400.png" alt="..." width="1000" height="400" />
</div>

<div class="img03">
    <img src="https://placehold.jp/200x200.png" alt="..." width="200" height="200" />
</div>
body {
    margin: 0;
    padding: 0;
}

img {
    width: 100%;
    height: auto;
    vertical-align: middle;
}

.img02 {
    max-width: 500px;
    margin: 80px auto 0;
}

.img03 {
    width: 100px;
    margin: 80px auto 0;
}

独学に限界を感じていませんか?

現役エンジニアによるメンタリングサービス作りました!

模写修行やこのメディアを作ったエンジニア中心に、メンタリングサービスHello Mentorを運営しています。

👇 こんな方のためのサービスです。

  • 独学に限界を感じている...
  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業のアドバイスが欲しい...

メンターを務めるのは、今も現役でコードを書いているエンジニアのみです。駆け出しの方やメンターだけをやっている方はいません。

高額な料金はかかりません。サブスク / 契約期間の縛りなし / 入会金・解約料なしなので、リスクなく始められます。

少しでも興味がある方は、ぜひ下記のリンクからサービスサイトをご覧ください。無料相談もお気軽にお越しください。(無理な営業等一切ございません!)

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

この記事を書いた人

Gakuのアイコン

Gaku / @gaku92014091

フリーランス8年を経て法人化(3期目)、業界歴は12年目。コンテンツ制作、ライティング、マーケティング、デザイン、コーディング、プログラミング(フロント)、幅広くやってます!webサービスを作るのが好き!

当メディア運営メンバーでメンターやってます!👉

詳しく見る

\Share/

模写修行のトップページのスクリーンショット
模写修行

実務レベルを体験するためのコーディング練習教材