モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

CSS 設計に関するヒント

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/08/03
最終更新最終更新
2021/10/07
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    デザイナー兼フロントエンドエンジニア。UI/UX設計が得意です。

    0
    ステッカーを贈るとは?

    CSS は構造化が難しくスタイルを宣言していくだけで目的が達成できてしまいます。上書きの繰り返しによって肥大化しないための設計ヒントをまとめます。

    詳細度の高騰が発生した CSS は破綻しやすい

    CSS の詳細度はルーティングテーブルのロンゲストマッチのようなものです。一致度の高いとされるセレクタで指定したスタイルが優先的に適用されます。同じ詳細度の場合は後から指定したスタイルで上書かれて適用されます。

    ↑高い
    !important (避けるべき)
    HTML の style 属性でのインライン記述 (避けるべき)
    ID セレクタ (避けることを推奨(後述))
    クラスセレクタ (推奨)
    要素セレクタ ('p' 等。HTML 構造への依存は避けます(後述)。リセット用途で使用)
    ユニバーサルセレクタ '*' (リセット用途で使用。パフォーマンスの問題などからあまり推奨されない)
    ↓低い
    

    important は基本的には使用しないようにします。CSS 内で詳細度が高騰してくるとスタイルを適用するための応急処置として以下のようなコードを書かざるを得なくなってきます。

    p {
      font-size: 6px !important;
    }
    

    可能なかぎり詳細度の高騰は避けましょう。例えば以下のようにします。

    .mylist li a {
    }
    ↓
    .mylist a {
    }
    

    絶対値を多用した CSS は破綻しやすい

    相対値を使用すると独立パラメータ変数の個数を削減できます。以下の line-height の例では子要素に属性値が伝搬するためコード量も削減できています。

    <div class="myouter">
      <p class="myinner">文章</p>
      <p>文章</p>
    </div>
    

    悪い例

    <style>
     .myouter {
       font-size: 12px;
       line-height: 24px;
     }
     .myinner {
       font-size: 24px;
       line-height: 48px;
     }
    </style>
    

    良い例

    <style>
     .myouter {
       font-size: 12px;
       line-height: 2.0;
     }
     .myinner {
       font-size: 24px;
     }
    </style>
    

    HTML の構造に依存した CSS は破綻しやすい

    要素セレクタや ID セレクタは HTML の特定の場所に依存しがちです。クラスで部品化しましょう。ただし汎用部品化には時間がかかります。結局使用しない部品の可能性もあるため何度か出現してから抽出してコンポーネント化するようにします。

    要素セレクタは避ける

    悪い例

    h1 が h2 に変更されると困ります。

    <div id="container">
      <h1>見出し</h1>
      <p>文章</p>
    </div>
    
    <style>
     div h1 {
       font-size: 24px;
     }
    </style>
    

    良い例

    要素セレクタではなくクラスでセレクトしましょう。h1.myheadline ではなく、要素セレクタを使用せずに省略して .myheadline とします)。

    <div id="container">
      <h1 class="myheadline">見出し</h1>
      <p>文章</p>
    </div>
    
    <style>
     .myheadline {
       font-size: 24px;
     }
    </style>
    

    ID セレクタは避ける

    悪い例

    id container はページ内に一箇所しか存在できません。詳細度の高騰にもつながります。

    <div id="container">
      <h1>見出し</h1>
      <p>文章</p>
    </div>
    
    <style>
     #container h1 {
       font-size: 24px;
     }
    </style>
    

    良い例

    <div id="container">
      <h1 class="myheadline">見出し</h1>
      <p>文章</p>
    </div>
    
    <style>
     .myheadline {
       font-size: 24px;
     }
    </style>
    

    スタイルの取り消しがある CSS は破綻しやすい

    クラスを用いた部品化ではスタイルの削除ではなく追加を心がけます。コード量を削減できます。以下の例ではスタイル三行を二行に削減できています。

    悪い例

    <div>
      <h1 class="myheadline myheadline-no-underline">見出し</h1>
      <h1 class="myheadline">下線あり見出し</h1>
    </div>
    
    <style>
     .myheadline {
       font-size: 24px;
       border-bottom: 2px solid #000;
     }
     .myheadline-no-underline {
       border-bottom: none;
     }
    </style>
    

    良い例

    ルールを追加するように設計すると行数が削減できます。

    <div>
      <h1 class="myheadline">見出し</h1>
      <h1 class="myheadline myheadline-underline">下線あり見出し</h1>
    </div>
    
    <style>
     .myheadline {
       font-size: 24px;
     }
     .myheadline-underline {
       border-bottom: 2px solid #000;
     }
    </style>
    

    シングルクラスとマルチクラス

    Sass の @extend を使用するとシングルクラスで書けてしまいます。しかしながらクラス数が増加していきます。以下の例における最後のクラスはマルチクラスにしておけば不要だったはずです。

    .mybtn {
    }
    .mybtn-primary {
      @extend .mybtn;
    }
    .mybtn-large {
      @extend .mybtn;
    }
    .mybtn-primary-large {
      @extend .mybtn;
      @extend .mybtn-primary;
      @extend .mybtn-large;
    }
    

    コンポーネントは複数の役割を担うのではなく一つのことだけを行うべきです。例えば「色やサイズなどの見た目」と「position, floatなどの配置」は別々のコンポーネントで管理されるべきです。過度に意識する必要はありませんが必要に応じてマルチクラスに分離していきましょう。一方、シングルクラスにはセマンティックなクラス名が実現できるというメリットがあり、状況によって使い分けられます。

    コンポーネント化の実例 (CSS スプライト)

    CSS スプライトは背景画像の座標を background-position で指定して widthheight で切り出して表示する手法です。画像の HTTP リクエスト回数を減らせるという利点があります。これをコンポーネント化すると以下のようになります。

    <div class="myicn myicn-1"></div>
    <div class="myicn myicn-2"></div>
    
    <style>
     .myicn {
       display: inline-block;
       background-image: url(myicons.png);
     }
     .myicn-1 {
       width: 300px;
       height: 50px;
       background-position: 0 0;
     }
     .myicn-2 {
       width: 300px;
       height: 50px;
       background-position: 0 50px;
     }
    </style>
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    デザイナー兼フロントエンドエンジニア。UI/UX設計が得意です。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • フォーム入力 (Bootstrap 3)
        フォーム関連の Bootstrap 3 の機能をコード例とともに列挙します。公式ページは CSS/Forms です。JavaScript には依存せずに動作します。 標準的なレイアウト <div class="container"></div> に含めて使用します。まとまりごとに form-group で囲います。 <form> <!-- 一行入力 -...
        からふるねこからふるねこ11/24/2017に更新
        いいねアイコン画像0
      • Sass チートシート
        Sass (Syntactically Awesome Stylesheets) のチートシートです。インデントを多用した SASS 記法ではなく、広く普及している SCSS 構文の Sass を対象とします。 継承 (extend) 基本 .class1 { background-color: #f00; } .class2 { @extend .class1; colo...
        ピカピカピカピカ10/7/2021に更新
        いいねアイコン画像0
      • グリッドレイアウトでレスポンシブ Web デザイン (Bootstrap 3)
        グリッドレイアウトによるレスポンシブ Web デザインを Bootstrap 3 で行う方法を記載します。 すべての要素の入れ物であるコンテナ要素 公式ドキュメントの一番最初に記載されている container はすべての要素の入れ物です。コンテンツ全体を container で囲みます。container には四種類の幅があります。container の左右にはマージンが作られます。入れ子にする...
        junjun11/18/2017に更新
        いいねアイコン画像0
      • CSS で部品を装飾 (Bootstrap 3)
        公式ドキュメントのうち JavaScript に依存せず CSS だけで部品を装飾する Bootstrap 3 の機能をコード例とともに列挙します。公式ページは CSS Components および CSS です。 グリフアイコン [使用できるアイコン一覧](http://getbootstrap.com/components/#glyphicon
        からふるねこからふるねこ10/7/2021に更新
        いいねアイコン画像0
      • Bootstrap 3 公式ドキュメントの利用例
        サムネイル画像-b611feccd5
        Bootstrap のメジャーバージョンは 2015-2-01(Sun) 現在 3 であり、最も人気のある HTML, CSS, JS のフレームワークです。Grid system という、いわゆるレスポンシブデザインを行うために便利な機能も利用できます。デザインの独自性にこだわらない業務アプリケーションなどを短期間で作る場合にも便利ですし、インターネットに公開する独自性が求められるアプリケーショ...
        HARUTOHARUTO11/17/2017に更新
        いいねアイコン画像0