レシポンシブな画像に文字を重ねる方法

HTML & CSSCSS, HTML, デザイン

完成目標

  1. 画像はレスポンシブに対応する
  2. 画像の横幅は640pxの画像を利用
  3. 640pxまでは横幅いっぱいに画像が広がり、その後は画像を中央寄せ
  4. 画像の左上ぴったりから文字が始まる
  5. 文字列が長く、横幅が足りなくなった場合は、改行して画面に映るようにする
横幅いっぱいの画像
横幅いっぱいの画像

640px以上なら左右に余白
640px以上なら左右に余白

画像をレスポンシブにする

画像部分のHTML部分は以下の通り。
<html lang="ja">
<head>
〜〜〜〜中略〜〜〜〜
  <link rel="stylesheet" type="text/css" href="style.css">
</head>

<div class="content-wrapper">
  <div class="image-wrapper">
     <img src="woman.jpg" alt="woman">
   </div>
</div>

CSSについては下記の通り

style.css
.content-wrapper {
  position: relative;
}

.image-wrapper {
  max-width: 640px;
  position: absolute;
  top: 0;
  left: 50%;
  transform; translateX(-50%);
}

img {
  width: 100%;
  max-width: 640px;
  height: auto;
}

.image-wrapperにmax-widthをあてたいので、.image-wrapperの中央寄せをposition: absoluteで実施する(text-align:centerはmax-widthと一緒に使うと機能しない)。

imgにwidth:100vwとmax-width: 640px(設定する画像の横幅)を指定することによって、640pxまではデバイスの横幅いっぱいに画像が表示され、デバイスの横幅が640px以降の場合は左右に余白が作成される(.image-wrapperにleft:50%を指定しているため。画像の左端が画面のちょうど50%から表示されてしまうため、transformXで50%左にずらしている)。

文字を重ねる

HTMLに重ねたい文字を追記する。

〜〜〜〜中略〜〜〜〜
<div class="image-wrapper">
   <img src="woman.jpg" alt="woman">
 <div id="sentence">
     <h1>年齢を重ねても美しさを保つために</h1>
   </div>
</div>

CSSで#sentenceを画像の左上に持っていく。

〜〜〜〜中略〜〜〜〜
#sentence {
  position: absolute; // 親要素のimage-wrapperの位置を基準に配置できる。
  top: 0; // image-wrapperの一番上側に配置
  left: 0; // image-wrapperの一番左側に配置
}


まとめ

今回は左上に文字を入れましたが、うまく使えば右下とかにも入れられます。
独学で学んでいるので、もっと簡単にできる方法があればご教示お願いします。


HTML & CSSCSS, HTML, デザイン

Posted by blogramming