【ソースコード】番外編:positionの練習

目次

※コーディングの解説はCSSのコメントを参照

ディレクトリ構成

    
extra1
 ├─img
 │  └─flower.jpg
 │
 ├─css
 │  └─style.css
 │
 └─index.html
    
  

HTML(index.html)

別タブで開く
index.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>タイトル</title>
    <meta name="description" content="テキストテキストテキストテキストテキストテキスト">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
    <link rel="preconnect" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="css/style.css">
  </head>

  <body>
    <div class="content">
      <div class="text">
        <h2 class="title">OUR SERVICES</h2>
        <p class="large">
          We can provide flower arrangements for offices,
          hotels, restaurants & retail spaces.
        </p>
        <p>
          テキストテキストテキテキストテキストテキストテキテキスト
          テキストテキストテキテキストテキストテキストテキテキスト
          テキストテキストテキテキストテキストテキストテキテキスト
        </p>
        <a class="btn" href="#">詳細はこちら</a>
      </div>
      <div class="img">
        <img src="img/flower.jpg" alt="">
      </div>
    </div>
  </body>
</html>

CSS(style.css)

別タブで開く
style.css

@charset "UTF-8";

html {
  font-size: 100%;
}
body {
  background-color: #efeded;
  color: #35383a;
  font-family: 'Noto Serif JP', serif;
}
a {
  color: #35383a;
  text-decoration: none;
}
img {
  max-width: 100%;
}

/*
【要素の重ね合わせ(親要素)】
positionで要素を重ね合わせると高さがなくなるので、
高さを残したい場合は親要素で「height」を指定。
*/
.content {
  max-width: 1000px;
  height: 698px;
  margin: 100px auto;
  position: relative;
}
/*
【要素の重ね合わせ(子要素)】
「position: absolute;」と「left」で左に配置。
*/
.text {
  max-width: 680px;
  background-color: #fff;
  padding: 84px 160px 84px 84px;
  position: absolute;
  left: 0;
}
.text p {
  line-height: 1.8;
  margin-bottom: 35px;
}
/*
「display: inline-block;」で下線をテキスト幅に合わせる。
*/
.text .title {
  border-bottom: solid 1px #35383a;
  display: inline-block;
  font-size: 1.875rem;
  font-weight: normal;
  margin-bottom: 30px;
}
.text .large {
  font-size: 1.875rem;
}
/*
「display: inline-block;」でボタンをテキスト幅に合わせてから
paddingでサイズを調整。
「transition」で、ホバーをふわっとさせる。
(※transitionの詳細については調べてみてくださいね。)
*/
.text .btn {
  display: inline-block;
  border: solid 1px #35383a;
  border-radius: 30px;
  padding: 16px 50px;
  transition: all 0.3s ease;
}
.text .btn:hover {
  background-color: #efeded;
}
/*
【要素の重ね合わせ(子要素)】
「position: absolute;」と「top」「right」で、
親要素の上から140px、右から20pxに配置。
*/
.img {
  max-width: 400px;
  position: absolute;
  top: 140px;
  right: 20px;
}
/*
「vertical-align: bottom;」で、画像の下の隙間を消す。
「top」を指定してもOK。
(※画像の下の隙間を消す方法は、実務でもよく使うので
覚えておいてください。)
*/
.img img {
  vertical-align: bottom;
}

/*-------------------------------------------
SP
-------------------------------------------*/
@media screen and (max-width: 1000px) {
  /*
  スマホ時はテキストエリアと画像を縦に並べるので、
  「position: static;」で位置の固定を解除する。
  「height: auto;」で高さの固定も解除する。
  */
  .content {
    height: auto;
    position: static;
    margin: 0;
  }
  .text {
    max-width: 100%;
    padding: 60px 20px;
    position: static;
  }
  .img {
    max-width: 100%;
    position: static;
  }
}