CSS グリッドを使ったペットサービス紹介

CSSBeginner
オンラインで実践に進む

はじめに

ペット愛好家のための仮想空間「ペットの家」では、ウェブ開発者のアレックスは、CSS Grid を使ってサービスの紹介を刷新する探求に乗り出しています。

この実験では、サービスを整理された視覚的に魅力的な方法で提示することでユーザーを惹きつけることを目的としています。アレックスの使命は、「表示」セクションをグリッドレイアウトに変え、ペットサービスを上品かつ効率的に強調することです。

位置プロパティ

CSS のpositionプロパティは、開発者がページ上の要素の正確な配置を制御できる強力なツールです。これにより、要素を通常のフローに基づいて配置することができますし、親要素に対して、ビューポートに対して、または最も近いスクロール祖先に対して配置することもできます。

静的配置

staticはすべての要素のデフォルト値で、要素が通常のドキュメントフローに従ってレイアウトされることを意味します。静的に配置された要素は、top、right、bottom、または left プロパティの影響を受けません。

要素が標準的なフローに従うようにする場合、静的配置が最適な選択肢です。

たとえば、ページの左側にロボットの画像があり、この要素をposition:staticに設定すると、ページをスクロールしたときにこの画像もページのフローとともにスクロールします。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .full-page-img {
        width: 100%;
        margin-left: 15%;
      }
      .box img {
        width: 90%;
      }
      .ad-l {
        position: static;
        top: 100px;
        left: 0;
        width: 150px;
      }
    </style>
  </head>
  <body>
    <img src="robot.png" class="ad-l" />
    <div class="full-page-img">
      <img src="page.png" />
    </div>
  </body>
</html>

静的配置のロボットの例

固定配置

fixed配置は、要素をブラウザウィンドウのビューポートに対して配置します。ページをスクロールしても要素は同じ場所に留まります。

ページの上部または下部に固定されたナビゲーションバーを作成する場合に使用します。

たとえば、ページの左側にロボットの画像があり、この要素をposition:fixedに設定すると、ページをスクロールしたときにこの画像はページのスクロールによって消えることはありません。画像は固定された位置にとどまります。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
   .full-page-img {
      width: 100%;
      margin-left: 15%;
    }
   .box img {
      width: 90%;
    }
   .ad-l {
      position: fixed;
      top: 100px;
      left: 0;
      width: 150px;
    }
    </style>
  </head>
  <body>
    <img src="robot.png" class="ad-l" />
    <div class="full-page-img">
      <img src="page.png" />
    </div>
  </body>
</html>

固定配置のロボットの例

相対配置

relative配置は、要素を通常の位置からオフセットさせることができます。オフセットさせても、要素は依然として元のスペースを占めます。

レイアウトの他の部分に影響を与えることなく、要素の位置をわずかに調整する必要がある場合に使用します。

たとえば、ページの左側のロボット画像を、通常の位置からtopleft方向に設定されたピクセル数だけ移動させました。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100%;
      }
      .box img {
        width: 90%;
      }
      .ad-l {
        position: relative;
        top: 70px;
        left: 70px;
      }
    </style>
  </head>
  <body>
    <img src="labby.png" class="ad-l" />
    <div class="box">
      <img src="page.png" />
    </div>
  </body>
</html>

相対配置のロボット画像

絶対配置

absolute配置は、要素を最も近い配置された祖先要素(存在する場合)に対して、そうでなければ初期の含むブロックに対して配置します。要素はドキュメントフローから削除され、スペースを占めません。

浮動要素(たとえばモーダルやドロップダウンメニュー)を作成する必要がある場合に使用します。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100%;
      }
      .box img {
        width: 90%;
      }
      .ad-l {
        position: absolute;
        top: 70px;
        left: 70px;
      }
    </style>
  </head>
  <body>
    <img src="labby.png" class="ad-l" />
    <div class="box">
      <img src="page.png" />
    </div>
  </body>
</html>

絶対配置の例

位置属性の使い方を理解したら、style.cssに次のように追加できます。

header {
  position: fixed;
  display: flex;
  flex-direction: row;
  background-color: rgb(233, 174, 87);
  width: 100%;
  max-height: max-content;
  min-height: 1em;
  padding-top: 1%;
  padding-bottom: 1%;
  text-transform: uppercase;
}
.navigation li {
  position: relative;
  display: inline-block;
}
.service figure {
  position: relative;
}
.service figcaption {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, 0.5);
  color: #fff;
  padding: 10px;
}

グリッド基本

前の実験では、Flexbox を学びましたが、ペットページのレイアウトは、私たちが望む効果を達成できませんでした。そこで、次に別のレイアウトであるグリッドレイアウトを学びます。

CSS グリッドレイアウト(Grid)は、開発者が応答型の Web ページレイアウトを作成できるグリッドベースのレイアウトシステムです。Grid は、ページを主要な領域に分割したり、小さなコンポーネントのレイアウトを定義したりすることができます。

グリッドレイアウトを使用するには、まずコンテナ要素にdisplay: grid;プロパティを設定する必要があります。style.cssに次のように追加できます。

.container {
  display: grid;
  padding: 0px;
  padding-top: 1em;
  width: 100%;
}
.services {
  width: 90%;
  display: grid;
  margin: 20px auto;
}

行と列の定義

次に、grid-template-columnsgrid-template-rows プロパティを使って、コンテナ内の行と列を定義します。

たとえば、.container は列と行に特定の寸法を持つグリッド表示モードを設定します。

  • display: grid; はコンテナに対してグリッドレイアウトを活性化します。
  • grid-template-columns: 50px 100px; は 2 つの列を定義し、最初の列は 50 ピクセル幅で、2 番目の列は 100 ピクセル幅です。
  • grid-template-rows: 30px 60px; は 2 つの行を定義し、最初の行は 30 ピクセル高で、2 番目の行は 60 ピクセル高です。

グリッドレイアウトの例の可視化

style.css に次のように追加できます。

.container {
  display: grid;
  grid-template-columns: 100%;
  padding: 0px;
  padding-top: 1em;
  width: 100%;
}
.services {
  width: 90%;
  display: grid;
  grid-template-columns: 2fr 2fr 2fr;
  margin: 20px auto;
}

fr は可変長単位で、グリッドコンテナ内の利用可能な空間の一部を表します。

グリッドギャップ

grid-gap プロパティ(現在は gaprow-gap、および column-gap を使用することが推奨されています)を使用すると、グリッドの行と列の間のスペースを設定できます。

CSS グリッドギャップの例

style.css に次のように追加できます。

.services {
  width: 90%;
  display: grid;
  grid-template-columns: 2fr 2fr 2fr;
  gap: 5%;
  margin: 20px auto;
}

まとめ

この実験では、アレックスは CSS Grid をうまく利用して、「ペットの家」の表示セクションを再デザインし、構造化された魅力的なグリッドレイアウトでペットサービスを紹介しました。このアプローチは、視覚的なプレゼンテーションを向上させるだけでなく、Web デザインにおける CSS Grid の柔軟性と力を示しています。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習