この記事ではHTMLで画像の上にテキストを表示する方法を解説します。
imgタグを使った場合はCSSで背景画像を入れた場合などサンプルコード付きで解説します。
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>
ブラウザで表示するとこちらのようになります。
まず、.image-container
にposition: relative;
を入れて画像の枠を作ります。
position: relative;
を入れることで、.overlay-text
のposition: absolute;
が画像の範囲に対して有効になります。
.image-container
にposition: relative;
を入れないと、ページ全体の中央になってしまいます。
次に、top
とleft
とtransform
プロパティでテキストの位置を調整しています。
あとはテキストの背景に黒い色をつけて文字を見やすくしています。これはなくても問題ありません。
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
プロパティでも同じように配置できます。
画像の上でテキストが突き出したようなデザインを作る
画像の上にテキストが表示されていて、テキストが半分突き出したようなデザインにすることもできます。
こちらのようなデザインを作るときは、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>
ブラウザで確認するとこちらのようになります。
クリックして別ページに移動できるようにする
画像をクリックして別のページに移動できるようにするためには、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>
まとめ
画像の上にテキストを表示する方法を紹介しました。テキストを画像の上に表示するデザインはよく使うのでコードスニペットなどに登録しておくと使いまわせて便利です。