HTMLの<img>
タグは、画像を表示するために使います。このページでは<img>
の使い方やHTMLでの画像の取り扱い方について詳しく解説します。
imgタグの基本
imgタグの基本形
<img src="画像のURL" alt="画像の説明">
👆画像を表示するHTMLの基本形はこのようになります。
src
で画像のURL(どこから画像を読み込むか)を指定しalt
に画像の説明文(何の画像か)を書きます。
<img src="https://catnose.me/learning/images/ogp.png" alt="コードキッチンのサムネイル画像">
閉じタグは書かない
<img></img>
のような閉じタグは不要です。<img>
とだけ書くようにしましょう。
src属性の書き方
<img>
タグを使うときはsrc
属性で画像のURL(画像の置いてある場所)を指定します。URLはおもに次の2通りの書き方をします。
✍️URLの書き方
- 絶対パス:
https://example.com/test.jpg
のような完全なURL - ルートパス:
/test.jpg
のようにスラッシュから始まる、今いるサイトのいちばん上からの位置
たとえば、あなたが今https://abc.com
というサイト上のどこかのページを見ているとします。
この場合、https://abc.com/test/test.jpg
というURLは/test/test.jpg
と省略して書けます。
https://abc.com/a/b/c/d
というURLは/a/b/c/d
と書けます。
このように同じサイト上のファイルやページへのリンクは、https://abc.com
を省略して/
から書きはじめることができるのです。
このような書き方をルートパスといいます。
ルートパスのメリット
- すっきりとして見やすい
- ドメインを変更したときに書き換えの手間が省ける(たとえば
example.com
からabc.com
へ移行してもsrc
を書き換える必要がない) - 相対パス(今いるパスからの相対的な位置。詳細は割愛🙏)と比べても、パッと見たときに位置が分かりやすい
<!-- ↓絶対パス -->
<img src="https://catnose.me/learning/images/ogp.png" alt="略">
<!-- ↓ルートパス -->
<img src="/learning/images/ogp.png" alt="略">
👆絶対パスで指定した<img>
と、ルートパスで指定した<img>
を並べてみました。どちらも読み込んでいる画像ファイルは同じです。
alt属性の書き方
alt
属性は、次の2つの点からとても重要です。
- アクセシビリティ向上
目の不自由な方が使う読み上げソフトで「画像の内容を表すテキスト」として読み上げてくれる - SEO対策
Googleなどの検索エンジンが画像の内容を理解するためのヒントになる
また、画像の読み込みに失敗したときに、alt
に指定されているテキストを表示してくれます。
画像の内容を表す具体的な説明を書く
装飾のための画像ならaltは省略してOK
装飾のため・見栄えのための画像であればalt=""
のように何も書かなくてOKです。たとえば、見出し前につけるちょっとした画像や、ページを華やかに見せるためのアイキャッチ的な画像にalt
を指定する必要はありません。
😿間違ったaltの書き方
以下のようなaltテキストは避けましょう。
- 「example.jpg」のようなファイル名
- 「画像」のような抽象的な説明文
👇こちらでalt属性の書き方の事例をたくさん見ることができます。気になる方はぜひチェックしてみてください。
imgタグが対応している画像形式
JPEG・PNG・SVG・GIF・WebP・TIFF・ICO・BMP・APNG
👆こちらは<img>
で使用できる画像の形式です。理解しておきたいのは以下の5つでしょう。
形式 | 特徴 |
---|---|
JPEG | 写真など、色数の多い画像向け |
PNG | イラストや図表など、色数の少ない画像向け。背景を透過できる |
GIF | おもにアニメーション画像で使う |
SVG | どれだけ拡大してもぼやけない。ロゴ画像やアイコンに最適 |
WebP | 次世代の画像形式。軽量で高画質。未対応ブラウザのためpitcureタグを合わせて使う |
GIFアニメーションを使う例
<img src="https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582605006/posts/rpqykkoasegwhdpgmwev.gif">
👆GIFアニメーション画像(◯◯.gif
)も、他の形式の画像と同じように使用できます(この例ではcliply.coで配布されているGIFを使用させていただきました)。
動画はvideoタグで
.mp4形式などの動画を埋め込むときには<video>
タグを使いましょう。
HTMLで画像を使いこなす
画像リンクをつくる
画像をリンクにしたいときは、アンカータグ(<a>
)の中に画像(<img>
)を入れます。
<a href="https://catnose.me">
<img src="/learning/images/ogp.png" alt="リンクの説明">
</a>
👆画像をクリックするとページが遷移することが分かります。サイトのロゴ画像なんかはリンクにすることが多いですね。リンクの中に<img>
を入れるときはalt="◯◯"
をきっちりと書くようにしましょう。
記事の中で画像を使うときはpタグで囲む
ブログやニュースの記事などで、文章の流れの中で画像を使うときには段落タグ(<p>
)の中に<img>
を入れるようにしましょう。
<p>このサイトのロゴ画像はこちらです。</p>
<p><img src="/learning/images/ogp.png" alt="コードキッチンの画像"></p>
<p>このロゴの意味は…</p>
👆このように<p><img ...></p>
とします。画像が記事を構成する一部の場合、画像も1つの段落とみなされるためです。
loading="lazy"で画像を遅延読み込み
HTML loading="lazy"
<img src="..." alt="..." loading="lazy">
👆<img>
にloading="lazy"
を指定すると画像が遅延読み込みされます。ざっくりというと必要になるまで画像が読み込まれないため、ページの表示速度が上がります。
開いた瞬間に表示したい画像以外はすべてloading="lazy"
を指定しても良いでしょう。
✍️loading="lazy"
は一部のブラウザでのみ対応しています(ブラウザ対応状況)。
とはいえ未対応ブラウザでは無視されるだけなので、気にせず使用してしまえばOKだと思います。
title属性でツールチップを表示
カーソルを画像にしばらくあてると…
👆<img>
タグにtitle="表示テキスト"
を指定すると、画像にマウスカーソルをしばらくのせたときにテキストが小さく表示されます。
<img src="/learning/images/ogp.png" alt="..." title="コードキッチンの画像だよ!">
ただし、title
属性のテキストが表示されるのは一部のブラウザだけです。基本的にiOSやAndroidのモバイル端末では役に立ちません。スマホユーザーが多い現在ではあまり頼らない方が良いでしょう。
画像のサイズ
ここからは画像のサイズの変え方について解説します。
widthとheight属性で幅と高さを指定する
<img>
タグでは、width
(幅)とheight
(高さ)を指定できます。
<img src="/learning/images/ogp.png" alt="..." width="200" height="105">
👆このように<img>
タグ内で直接サイズを指定します。width="200"
、height="105"
なので、画像の幅は200px、高さは105pxになります。ポイントは数字だけを記入できるという点です。
🙅これは間違い
- width="auto"(使えるのは数値だけ!)
- width="200px"(pxはつけない!)
- width="100%"(%は使えない!)
画像の幅と高さはCSSでも指定できる
<img>
の幅や高さは、CSSのwidth
・height
プロパティを使って指定することもできます。CSSなら「px」だけでなく「%」などの相対的な単位も使用できます。
img {
width: 100%;
height: auto;
}
👆width: 100%
なので、画像は横いっぱいに広がることになります。height: auto
により高さは自動で決められます。画像の横幅に応じて高さが決まるわけですね。
✍️メモ
<img width="◯◯" height="◯◯">
に対して、CSSでも幅や高さを指定した場合、CSSの値が優先されます。- widthとheightのデフォルト値は
auto
です。とくに何も指定していない場合、幅と高さは自動で決められます。 - CSSの方が柔軟にサイズを指定できますが、HTMLのwidth・height属性を使った方が表示パフォーマンス的には優れています。気づかないレベルかもしれませんが…。
画像がはみ出ないようにする
width: 800px
のようにサイズを指定した場合、ブラウザの幅が画像の幅より小さい時などに、はみ出てしまいます。
「パソコンでは問題ないけど、スマホではみ出る」はWebあるあるです。
そこで活躍するのが、要素の最大幅を指定するmax-width
というCSSプロパティです。
img {
width: 800px;
max-width: 100%; /* 🖐大事! */
}
CSSでimg { max-width: 100% }
と書いておくと、画像の最大幅が100%となり、横にはみ出ることがなくなります。「大きな画面では800pxで表示され、画像が収まりきらない画面では横ぴったりに表示されるようになる」というイメージですね。
😺100%
という指定は、親要素(<img>
を囲む要素)に対して100%という意味になります。たとえば親要素の幅が300pxであれば、width: 100%
の画像も300pxになります。
画像が歪む(縦横比が崩れる)ときの対処法
img {
max-width: 100%;
width: 600px;
height: 100px;
}
👆max-width: 100%
を指定すると、画像がはみ出ないように幅が調整されます。つまりwidth: 600px
としていても表示される画面が小さければ、画像の幅も小さくなります。
このときheight
は指定されたままの高さになるので、画像の縦横比が崩れてしまいます。
対処法1: height: autoを指定する
img {
max-width: 100%;
width: 600px;
height: auto; /* 👈 */
}
👆そのような場合、CSSでheight: auto
と指定しましょう。max-width
を使っているときにも常に画像の縦横比が保たれます。
対処法2: object-fit: containで縦横比を保つ
別の方法として「object-fit: contain
を合わせて指定する」というものがあります。
img {
max-width: 100%;
width: 600px;
height: 100px;
object-fit: contain; /* 🖐 */
}
👆画像要素に対してobject-fit: contain
を指定すると、指定された幅と高さ(この例では600 x 100px)の中にぴったりと収まるように画像サイズが自動調整されます。
object-fit:coverで画像をトリミングする
img {
width: 150px;
height: 150px;
object-fit: cover; /* 🖐 */
}
👆CSSで画像要素に対してobject-fit: cover
を指定すると、画像を好きなサイズにトリミング(切り抜き)できます。この例ではwidth
とheight
が150pxの正方形なので、正方形にはまるように画像の中心で切り抜かれます。
詳しくはこちらのページで解説しています。
CSSでレスポンシブに画像サイズを変える
メディアクエリという仕組みを使えば、画面の幅に応じてサイズを変更することができます。
スマホから見るときと、パソコンから見るときでサイズを変えられるというわけです。
😺画面幅に応じてスタイルやレイアウトを変えることを「レスポンシブに◯◯する」と言ったりします。
HTML
<img src="..." class="example-img" alt="...">
👆たとえばexample-img
というクラスを持つ画像のサイズを、画面幅に応じてレスポンシブに変えてみたいと思います。CSSでは.example-img { ~ }
というように指定します。
CSS
/* デフォルトのサイズ */
.example-img {
max-width: 100%;
width: 200px;
}
/* 画面幅が800px以上のとき */
@media only screen and (min-width: 800px) {
.example-img {
width: 400px;
}
}
/* 画面幅が1200px以上のとき */
@media only screen and (min-width: 1200px) {
.example-img {
width: 600px;
}
}
👆この例では「800px以上の画面」と「1200px以上の画面」で画像の幅(width
)を変えています。反対に「◯◯px以下の画面では…」にしたければmin-width: ◯◯px
をmax-width: ◯◯px
にすればOKです。
表示する画像自体を切り替える
<img>
ではなく<picture>
タグを使えば、画面幅に応じて別の画像を表示できます。
デモページ
HTML
<picture class="sample">
<source srcset="画像1URL" media="(min-width: ○○px)" /><!-- ○○px以上で表示する画像 -->
<source srcset="画像2URL" media="(min-width: △△px)" /><!-- △△px以上で表示する画像 -->
<img src="画像3のURL" alt="サンプル画像"/><!-- それ以外の場合に表示する画像 -->
</picture>
👆このように書くと、画面幅に応じて、別の画像が表示されます。<source>
は、条件分岐に必要な数だけ増やしましょう。画像は必要になったときに読み込まれるため、パフォーマンス上の心配は不要です。
詳しくはこちらのページで解説しています。
CSSで画像の配置を決める
中央寄せなどの画像の配置についても解説しておきます。
<div class="parent" style="height: 110px;background: #e7edf3;">
<img src="/learning/images/ogp.png" width="150" height="78">
</div>
👆分かりやすくするために親要素(<img>
を囲む要素)の背景をグレーにしました。このようにデフォルトでは画像は左寄せで表示されます。
画像を中央寄せ
方法1:親要素にtext-align: center
.parent {
text-align: center;
}
👆親要素にtext-align: center
を指定すると、中に含まれる画像は中央寄せになります。
方法2:imgだけで中央寄せする
img {
display: block;
margin-left: auto;
margin-right: auto;
}
👆画像に対して「display: block
+ 左右のマージンをauto
」というやり方もあります。この方法であれば、親要素にCSSを当てることなく中央寄せできます。
✍️メモ
display: block
の要素は、親要素にtext-align: center
をあてても中央寄せになりません。display: block
の要素を中央寄せする簡単な方法は左右のmargin
をauto
にすることです。
縦横中央寄せ(ど真ん中に配置)
左右だけでなく上下にも中央寄せしたいときは、CSSのflex
を使うのが楽です。
.parent {
display: flex; /* flexに */
align-items: center; /* 上下中央に */
justify-content: center; /* 左右中央に */
}
👆画像を囲む親要素にこの3行をあてると、親要素のど真ん中に配置されるようになります。このCSSを使えば、画像以外でも中央寄せできるので覚えておくと良いでしょう。
画像を右寄せ
方法1:親要素にtext-align: right
.parent {
text-align: right;
}
👆親要素にtext-align: right
を指定すると、中に含まれる画像は右寄せになります。
方法2:imgだけで中央寄せする
img {
display: block;
margin-left: auto;
}
👆画像に対して「display: block
+ 左のマージンだけをauto
」というCSSをあてるやり方もあります。
CSSで画像のスタイルを変更
ここからはCSSで画像を装飾したり、フィルターをかけたりする方法を紹介します。
HTML
<img src="..." class="example-img" alt="...">
👆この例ではexample-img
というクラスを持つ画像(<img>
)に対してCSSをあてていきます。
線をつける
.example-img {
border: solid 2px #ffa81c;
}
👆画像に線をつける場合は、画像要素にborder: 線の種類 太さ 色コード;
のように指定します。
影をつける
.example-img {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
}
👆影をつける場合は、画像要素にbox-shadow: x方向の大きさ y方向の大きさ 広がり 影の色
のようにCSSを指定します。
画像を角丸に
.example-img {
border-radius: 10px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
}
👆画像の角を丸くするにはborder-radius: 影の大きさ
と指定します。
アバター画像のように丸く切り抜く
.example-img {
border-radius: 50%;
}
👆border-radius: 50%
とすると画像は円形になります。
フィルターをかける
CSSのfilter
プロパティを使うと、画像の彩度、明度、コントラスなどを変更したり、ぼかしを加えたりすることができます。
.example {
filter: sepia(70%);
}
👆たとえばfilter: sepia(70%)
とすると、写真がセピア調になります。70%
という値は、フィルターの強さを表しています。filter
を使えば、このように画像を簡単に加工できます。
詳しくはこちらのページで解説しています。
alt
には、読むだけで何の画像かざっくりと分かるような、具体的な説明を書きます。たとえば、この写真であれば
alt="水をガブ飲みするマッチョの写真"
などが最適でしょう。