更新日: 2024 / 11 / 12

コピペでできる、画像の上にテキストを載せる方法

カテゴリー: HTML&CSS 入門ガイド

この記事ではHTMLで画像の上にテキストを表示する方法を解説します。

imgタグを使った場合はCSSで背景画像を入れた場合などサンプルコード付きで解説します。

  1. HTMLで画像の上にテキストを表示する方法

    1. imgタグで挿入した画像の上にテキストを表示する
    2. positionで配置を指定する方法
    3. 背景画像の上にテキストを表示する
    4. 画像の上でテキストが突き出したようなデザインを作る
    5. クリックして別ページに移動できるようにする
  2. まとめ

HTMLで画像の上にテキストを表示する方法

ここからはHTMLで画像の上にテキストを表示する具体的な方法を解説します。

  • imgタグで挿入した画像の上にテキストを表示する
  • 背景画像の上にテキストを表示する
  • 画像の上でテキストが突き出したようなデザインを作る
  • クリックして別ページに移動できるようにする

imgタグで挿入した画像の上にテキストを表示する

まずはimgタグで挿入した画像の上にテキストを表示してみます。

以下のサンプルコードをコピーしてHTMLファイルに貼り付けてみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div class="image-container">
    <img src="https://picsum.photos/1000/450/?random=1" alt="画像の説明">
    <div class="overlay-text">ここにテキストを入力</div>
  </div>
  <style>
    .image-container {
      position: relative;
      display: inline-block;
    }

    .image-container img {
      display: block;
      width: 100%;
      height: auto;
    }

    .overlay-text {
      /* 位置の調整 */
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      /* 画像周りの背景色 */
      background-color: rgba(0, 0, 0, 0.7);
      color: white;
      padding: 10px 20px;
      font-size: 20px;
      text-align: center;
    }
  </style>

</body>
</html>

ブラウザで表示するとこちらのようになります。

HTMLで画像の上にテキストを表示する方法 imgタグで挿入した画像の上にテキストを表示する

まず、.image-containerposition: relative;を入れて画像の枠を作ります。

position: relative;を入れることで、.overlay-textposition: absolute;が画像の範囲に対して有効になります。

.image-containerposition: relative;を入れないと、ページ全体の中央になってしまいます。

次に、toplefttransformプロパティでテキストの位置を調整しています。

あとはテキストの背景に黒い色をつけて文字を見やすくしています。これはなくても問題ありません。

positionで配置を指定する方法

ここでは画像の中央にテキストを表示しましたが、左上や右下などにも表示できます。

以下の画像のような位置に表示することができます。

HTMLで画像の上にテキストを表示する方法 positionで配置を指定する方法

.overlay-textの位置の調整の部分を以下のように変更することで配置をカスタマイズできます。

/* 1の位置 */
.position-1 {
  top: 0;
  left: 0;
}
/* 2の位置 */
.position-2 {
  top: 0;
  left: 50%;
  transform: translateX(-50%);
}
/* 3の位置 */
.position-3 {
  top: 0;
  right: 0;
}
/* 4の位置 */
.position-4 {
  top: 50%;
  left: 0;
  transform: translateY(-50%);
}
/* 5の位置 */
.position-5 {
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
/* 6の位置 */
.position-6 {
  top: 50%;
  right: 0;
  transform: translateY(-50%);
}
/* 7の位置 */
.position-7 {
  bottom: 0;
  left: 0;
}
/* 8の位置 */
.position-8 {
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
}
/* 9の位置 */
.position-9 {
  bottom: 0;
  right: 0;
}

背景画像の上にテキストを表示する

次はimgタグを使った画像ではなくCSSで入れた背景画像の上にテキストを表示してみます。

先ほどと同様に以下のサンプルコードをコピーしてHTMLファイルに貼り付けてみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div class="background-container">
    <div class="overlay-text">ここにテキストを入力</div>
  </div>
  <style>
    .background-container {
      /* 背景画像の表示 */
      background-image: url('https://picsum.photos/1000/450/?random=1');
      background-size: cover;
      background-position: center;
      /* 背景画像のサイズ */
      width: 1000px;
      height: 450px;
      /* 子要素の配置 */
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .overlay-text {
      /* テキストと背景のスタイル */
      color: white;
      font-size: 24px;
      text-align: center;
      padding: 20px;
      background-color: rgba(0, 0, 0, 0.5);
    }
  </style>

</body>
</html>

ブラウザでは同じように表示されます。

ここでは.background-containerにCSSで画像とサイズを指定しています。先ほどと異なり、テキストの配置もここで設定します。

テキストの配置についてはCSSのFlexboxを使用して上下左右の中央に配置しています。

positionプロパティでも同じように配置できます。

画像の上でテキストが突き出したようなデザインを作る

画像の上にテキストが表示されていて、テキストが半分突き出したようなデザインにすることもできます。

HTMLで画像の上にテキストを表示する方法 画像の上でテキストが突き出したようなデザインを作る

こちらのようなデザインを作るときは、positionプロパティを使って4の位置にテキストを配置し、背景の画像の横幅を画面幅の80%程度にすることで画像に重なるような表示になります。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div class="background-container">
    <div class="overlay-text position-4">ここにテキストを入力</div>
  </div>
  <style>
    /* 全体のサイズ */
    .background-container {
      position: relative;
      width: 100%;
      height: 450px;
    }
    /* 背景画像とサイズの指定 */
    .background-container:before {
      content: "";
      display: block;
      /* 背景画像の表示 */
      background-image: url('https://picsum.photos/1000/450/?random=1');
      background-size: cover;
      background-position: center;
      /* 背景画像のサイズ */
      width: 85%;
      height: 100%;
      margin-left: auto;
    }

    .overlay-text {
      /* テキストと背景のスタイル */
      color: white;
      font-size: 24px;
      text-align: center;
      padding: 20px;
      background-color: rgba(0, 0, 0, 0.5);
    }
    /* 4の位置 */
    .position-4 {
      position: absolute;
      top: 50%;
      left: 0;
      transform: translateY(-50%);
    }
  </style>

</body>
</html>

ブラウザで確認するとこちらのようになります。

HTMLで画像の上にテキストを表示する方法 画像の上でテキストが突き出したようなデザインを作る

クリックして別ページに移動できるようにする

画像をクリックして別のページに移動できるようにするためには、aタグを使います。

aタグにtarget="_blank"を入れることで別タブでページを開くことができます。同じタブで開きたい場合は不要です。

<a href="https://example.com" target="_blank">
  <div class="image-container">
    <img src="https://picsum.photos/1000/450/?random=1" alt="画像の説明">
    <div class="overlay-text">ここにテキストを入力</div>
  </div>
</a>

このときテキストに下線が出るのを防ぐため、text-decorationプロパティで修正しておきます。

a {
  text-decoration: none; /* 下線を消す */
}

背景画像を使っているパターンでもやり方は同じです。

<a href="https://example.com" target="_blank">
  <div class="background-container">
    <div class="overlay-text">ここにテキストを入力</div>
  </div>
</a>

まとめ

画像の上にテキストを表示する方法を紹介しました。テキストを画像の上に表示するデザインはよく使うのでコードスニペットなどに登録しておくと使いまわせて便利です。