Skip to content

CSS の基本をマスターしよう(中編)

公開日:December 16, 2024更新日:December 16, 2024
HtmlCSS📄

前編では、文字や背景のスタイル、要素の大きさや余白の調整方法について学びました。中編では、要素の横並びと、セレクタの使いこなしについて、さらに詳しく見ていきましょう。

4. 要素を横並びにしてみよう

HTML の要素は、ブロックレベル要素インライン要素の 2 種類に分けられます。

  • ブロックレベル要素<h1><h6><p><div><form><ul><ol><li> など。前後に改行が入り、親要素の幅いっぱいに広がります。高さや幅、上下外側の余白を指定することができます。
  • インライン要素<span><a><img><strong><em> など。前後に改行は入らず、要素の幅は内容に合わせて伸縮します。高さや幅、上下外側の余白を指定することはできません(<img>は例外)。

デフォルトでは縦に並ぶブロックレベル要素を横並びにするには、いくつかの方法があります。ここでは、よく使う2つの方法を紹介します。

display: inline-block の便利な使い方

最も簡単な方法は、display プロパティを inline-block にすることです。inline-block を指定された要素は、インライン要素のように横並びに配置されつつ、ブロックレベル要素のように高さや幅、上下外側の余白を指定することができます

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Inline-block の例</title>
    <style>
        .box {
            display: inline-block;
            width: 100px;
            height: 100px;
            margin: 10px;
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <div class="box">ボックス1</div>
    <div class="box">ボックス2</div>
    <div class="box">ボックス3</div>
</body>
</html>

この例では、3 つの <div> 要素が inline-block によって横並びに配置されています。

Flexbox レイアウト入門 (display: flex)

Flexbox は、要素を柔軟に配置するためのレイアウトモジュールです。Flexbox を使うと、要素の横並びや縦並び、順序の変更、余白の調整などを簡単に行うことができます。

Flexbox を使うには、まず親要素に display: flex を指定します。これにより、親要素は Flex コンテナとなり、その中の子要素は Flex アイテムとなります。

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Flexbox の例</title>
    <style>
        .container {
            display: flex;
        }
        .box {
            width: 100px;
            height: 100px;
            margin: 10px;
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box">ボックス1</div>
        <div class="box">ボックス2</div>
        <div class="box">ボックス3</div>
    </div>
</body>
</html>

この例では、<div class="container"> が Flex コンテナとなり、その中の 3 つの <div class="box"> が Flex アイテムとなっています。display: flex を指定するだけで、Flex アイテムが横並びに配置されます。

flex-direction で方向指定

flex-direction プロパティを使うと、Flex アイテムの並び方向を変更することができます。

css
.container {
    display: flex;
    flex-direction: row; /* 行方向(横並び)(デフォルト) */
}

.container {
    display: flex;
    flex-direction: column; /* 列方向(縦並び) */
}
  • row:行方向(横並び)
  • column:列方向(縦並び)
  • row-reverse:行方向(逆順)
  • column-reverse:列方向(逆順)

justify-content で主軸の揃え

justify-content プロパティを使うと、主軸(flex-direction で指定した方向)における Flex アイテムの揃え方を指定できます。

css
.container {
    display: flex;
    justify-content: flex-start; /* 主軸の先頭に揃える(デフォルト) */
}

.container {
    display: flex;
    justify-content: center; /* 主軸の中央に揃える */
}

.container {
    display: flex;
    justify-content: flex-end; /* 主軸の末尾に揃える */
}

.container {
    display: flex;
    justify-content: space-between; /* 均等配置(両端揃え) */
}

.container {
    display: flex;
    justify-content: space-around; /* 均等配置(両端に半分の余白) */
}
  • flex-start:主軸の先頭に揃える
  • center:主軸の中央に揃える
  • flex-end:主軸の末尾に揃える
  • space-between:均等配置(両端揃え)
  • space-around:均等配置(両端に半分の余白)
  • space-evenly:均等配置(両端含む)

align-items で交差軸の揃え

align-items プロパティを使うと、交差軸(flex-direction で指定した方向と垂直の方向)における Flex アイテムの揃え方を指定できます。

css
.container {
    display: flex;
    align-items: stretch; /* 交差軸方向に伸ばす(デフォルト) */
}

.container {
    display: flex;
    align-items: flex-start; /* 交差軸の先頭に揃える */
}

.container {
    display: flex;
    align-items: center; /* 交差軸の中央に揃える */
}

.container {
    display: flex;
    align-items: flex-end; /* 交差軸の末尾に揃える */
}
  • stretch:交差軸方向に伸ばす
  • flex-start:交差軸の先頭に揃える
  • center:交差軸の中央に揃える
  • flex-end:交差軸の末尾に揃える
  • baseline:ベースラインで揃える

Grid レイアウト入門 (display: grid)

Grid レイアウトは、Flexbox と同様に、要素を柔軟に配置するためのレイアウトモジュールです。Flexbox が 1 次元(行方向または列方向)のレイアウトであるのに対し、Grid は 2 次元(行方向と列方向)のレイアウトを扱うことができます。

Grid レイアウトを使うには、まず親要素に display: grid を指定します。これにより、親要素は Grid コンテナとなり、その中の子要素は Grid アイテムとなります。

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Grid の例</title>
    <style>
        .container {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr;
            grid-template-rows: 100px 100px;
            gap: 10px;
        }
        .item {
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
    </div>
</body>
</html>

この例では、grid-template-columnsで列の幅を指定し、grid-template-rowsで行の幅を指定しています。frはグリッドで使用できる単位で、ここでは1fr 1fr 1frと指定しているので、各列の幅が均等になるようになっています。

強力なレイアウト!

このように、Gridを使うと、格子状のレイアウトが簡単に作成できます。Flexbox と Grid は、どちらも強力なレイアウトツールです。使いこなせるようになれば、複雑なレイアウトも簡単に実現できます。

5. セレクタを使いこなそう

セレクタとは、スタイルを適用する HTML 要素を指定するためのパターンです。これまで見てきた例では、タグ名や id 属性、class 属性を使ってセレクタを指定していましたが、それ以外にも様々なセレクタがあります。

タグで指定

タグ名を指定すると、そのタグが使われているすべての要素にスタイルが適用されます。

css
/* すべての <p> 要素の文字色を赤にする */
p {
    color: red;
}

id で指定

id 属性で指定すると、その id 属性値を持つ要素にスタイルが適用されます。id 属性値はページ内で一意である必要があります。

css
/* id="title" の要素の文字色を青にする */
#title {
    color: blue;
}

class で指定

class 属性で指定すると、その class 属性値を持つすべての要素にスタイルが適用されます。複数の要素に同じスタイルを適用したい場合に便利です。

css
/* class="highlight" の要素の背景色を黄色にする */
.highlight {
    background-color: yellow;
}

属性セレクタで指定

属性セレクタを使うと、特定の属性を持つ要素にスタイルを適用することができます。

css
/* href 属性が "https://example.com" の <a> 要素の文字色を緑にする */
a[href="https://example.com"] {
    color: green;
}

擬似クラスで状態を指定(:hover, :active, :focus など)

擬似クラスを使うと、要素の特定の状態(マウスオーバー、アクティブ、フォーカスなど)に対してスタイルを適用することができます。

css
/* マウスオーバーされた <a> 要素の文字色を赤にする */
a:hover {
    color: red;
}

/* アクティブな <a> 要素の文字色を青にする */
a:active {
    color: blue;
}

/* フォーカスされた <input> 要素の背景色を黄色にする */
input:focus {
    background-color: yellow;
}

擬似要素で要素の一部を指定(::before, ::after

擬似要素を使うと、要素の前後にコンテンツを挿入したり、要素の一部分にスタイルを適用したりすることができます。

css
/* <p> 要素の前に ">>" を挿入する */
p::before {
    content: ">>";
}

/* <p> 要素の後に "<<" を挿入する */
p::after {
    content: "<<";
}

子孫セレクタ、子セレクタ、隣接セレクタ

  • 子孫セレクタ:ある要素に含まれるすべての要素にスタイルを適用します(例:div p<div> 要素内のすべての <p> 要素にスタイルを適用)。
  • 子セレクタ:ある要素の直下にある要素にスタイルを適用します(例:div > p<div> 要素の直下にある <p> 要素にスタイルを適用)。
  • 隣接セレクタ:ある要素の直後にある兄弟要素にスタイルを適用します(例:h1 + p<h1> 要素の直後にある <p> 要素にスタイルを適用)。
css
/* <div> 要素内のすべての <p> 要素の文字色を赤にする */
div p {
    color: red;
}

/* <div> 要素の直下にある <p> 要素の文字色を青にする */
div > p {
    color: blue;
}

/* <h1> 要素の直後にある <p> 要素の文字色を緑にする */
h1 + p {
    color: green;
}