CSSにおけるハイフンの疑問を解消:詳細ガイドと代替方法


セレクタにおけるハイフン

  • 擬似クラス
    特定の状態にある要素を対象とする場合、コロン(:) の後にハイフン(-) を使用して擬似クラスを定義します。例えば、:hover はマウスカーソルが要素の上に乗っている状態、:focus は要素がフォーカス状態にあることを示します。
  • クラスセレクタ
    独自のカスタムクラスを定義する場合にハイフンを使用します。例えば、.example-class.button-primary のように、単語をハイフンで繋げてクラス名を作ります。


.example-class {
  color: red;
  font-size: 20px;
}

a[href="https://example.com"] {
  text-decoration: none;
}

button:hover {
  background-color: blue;
}

プロパティ値におけるハイフン

  • 複合値を指定する場合、ハイフンを使用して各値を区切ります。例えば、margin: 10px 20px 30px 40px は、要素の余白を上下左右それぞれに設定します。
  • 複数単語からなるプロパティ値を指定する場合、ハイフンを使用することで繋げることができます。例えば、background-colorfont-family のように、単語をハイフンで繋げてプロパティ名を定義します。


body {
  font-family: Arial, sans-serif;
  background-color: #f0f0f0;
  margin: 20px;
}
  • ベンダープレフィックス
    ブラウザごとに異なる挙動をするプロパティを指定する場合、ベンダープレフィックスとしてハイフンを使用します。例えば、-webkit-border-radius は、ChromeやSafariなどのWebkit系ブラウザにおける border-radius プロパティを指定します。
  • コメント
    CSSコード内でコメントアウトしたい部分をハイフン2つ(--) で囲みます。コメントはコードの実行に影響を与えません。
/* コメント */
-- This is a comment

/* ベンダープレフィックス */
.box {
  -webkit-border-radius: 10px;
  border-radius: 10px;
}
  • 最新のCSSでは、ハイフンのかわりにアンダースコアを使用しても構いません。しかし、多くの開発者は引き続きハイフンを使用しており、可読性や慣習性からハイフンの方が好まれる傾向があります。
  • ハイフンは、名前空間の衝突を避けるためにも役立ちます。例えば、ライブラリやフレームワークが独自のカスタムクラスを使用する場合、ハイフンを使用して接頭辞を付けることで、ユーザー定義のクラスと区別することができます。


セレクタ

1 クラスセレクタ

.my-class {
  color: red;
  font-weight: bold;
}

.my-button {
  background-color: blue;
  padding: 10px;
}

このコードでは、2つのクラス .my-class.my-button を定義しています。

2 属性セレクタ

a[href="https://example.com"] {
  text-decoration: none;
  color: green;
}

img[alt="description"] {
  border: 1px solid gray;
}

このコードでは、href 属性が "" である <a> 要素と、alt 属性を持つ <img> 要素をそれぞれスタイル設定しています。

3 擬似クラス

button:hover {
  background-color: yellow;
}

input:focus {
  outline: 2px solid blue;
}

nav ul li:last-child {
  margin-right: 0;
}

このコードでは、マウスカーソルが要素の上に乗っている状態(:hover)、要素がフォーカス状態にある状態(:focus)、ナビゲーションメニューの最後のリスト項目(:last-child)をそれぞれスタイル設定しています。

1 複数単語のプロパティ

body {
  font-family: Arial, sans-serif;
  background-color: #f0f0f0;
}

h1 {
  text-align: center;
  font-size: 2em;
}

このコードでは、font-familytext-align のように、複数単語からなるプロパティ値をハイフンで繋げています。

2 複合値

margin: 10px 20px 30px 40px; /* 上右下左の余白 */
padding: 5px; /* 上下左右の余白 */
border: 2px solid #ccc; /* 線の太さ スタイル 色 */

このコードでは、marginborder のように、複数の値を持つプロパティの値をハイフンで区切っています。

1 コメント

/* ヘッダーセクション */
.header {
  background-color: #333;
  color: white;
  padding: 20px;
}

/* フッターセクション */
.footer {
  background-color: #eee;
  text-align: center;
  padding: 10px;
}

このコードでは、/* ... */ で囲まれた部分をコメントとしています。

2 ベンダープレフィックス

.box {
  -webkit-border-radius: 10px; /* Chrome/Safari */
  border-radius: 10px; /* 標準 */
}

.button {
  -webkit-transition: background-color 0.3s; /* Chrome/Safari */
  transition: background-color 0.3s; /* 標準 */
}

このコードでは、-webkit- プレフィックスを使用して、ChromeやSafariなどのWebkit系ブラウザにおける独自のプロパティを指定しています。



  1. セレクタ
    クラスセレクタ、属性セレクタ、擬似クラスなど
  2. プロパティ値
    複数単語のプロパティ、複合値など

状況に応じて、ハイフンにはいくつかの代替方法があります。

アンダースコア

近年では、ハイフンのかわりにアンダースコアを使用することが一般的になっています。特に、CSSフレームワークやライブラリを使用する場合によく見られます。

.my_class {
  color: red;
  font-weight: bold;
}

a[href="https://example.com"] {
  text-decoration: none;
  color: green;
}

button:hover {
  background-color: yellow;
}

キャメルケース

プロパティ名の場合、キャメルケースを使用してハイフンを省略することができます。ただし、この方法はまだ一般的ではなく、可読性が損なわれる可能性があるため、注意が必要です。

bodyFontFamily = Arial, sansSerif;
backgroundColor = #f0f0f0;
textAlign = center;

専用の文字

一部の特殊な文字は、ハイフンに似ているものがあります。例えば、以下の文字が挙げられます。

  • エムダッシュ (U+2014)
  • ダッシュ (U+2014)
  • ホライズンタルバー (U+2051)
  • マイナスパターン (U+2048)

しかしながら、これらの文字は、すべてのブラウザやフォントで適切に表示されるわけではないため、使用には注意が必要です。

変数

CSS変数を使用して、ハイフンを含む値を定義することができます。

:root {
  --my-class: red bold;
  --href: "https://example.com";
}

.my-class {
  color: var(--my-class);
  font-weight: var(--my-class);
}

a[href="https://example.com"] {
  text-decoration: none;
  color: green;
}
  • 可読性とメンテナンス性を考慮することが重要です。
  • 一部の古いブラウザでは、ハイフンの代替方法をサポートしていない場合があります。
  • ハイフンの代替方法を使用する場合は、プロジェクト全体で一貫性を保つことが重要です。