| カスケードスタイルシート(CSS) | |
|---|---|
2024年12月からの公式ロゴ[ 1 ] | |
| ファイル名拡張子 | .css |
| インターネットメディアの種類 | テキスト/CSS |
| 統一型識別子(UTI) | パブリック.css |
| 開発者 | ワールドワイドウェブコンソーシアム(W3C) |
| 初回リリース | 1996年12月17日 (1996年12月17日) |
| 最新リリース | CSS 3は複数の独立したモジュールとして開発されています。定期的なスナップショットでその状況をまとめています。2023年12月7日 ( 2023-12-07 ) |
| フォーマットの種類 | スタイルシート言語 |
| コンテナ用 | HTML要素のスタイルルール |
| 含まれるもの | HTMLドキュメント |
| オープンフォーマット? | はい |
| Webサイト | w3 |
| カスケードスタイルシート |
|---|
| 概念 |
| 哲学 |
| ツール |
| 比較 |
| HTML |
|---|
| HTMLとそのバリエーション |
| HTML要素と属性 |
| 編集 |
| 文字エンコーディングと言語 |
| ドキュメントとブラウザモデル |
| クライアント側スクリプトとAPI |
| グラフィックスとWeb3Dテクノロジー |
| 比較 |
カスケードスタイルシート(CSS)は、 HTMLやXML ( SVG、MathML、XHTMLなどのXML方言を含む)などのマークアップ言語で書かれた文書の見た目やスタイルを指定するために使用されるスタイルシート言語です。[ 2 ] CSSは、HTMLやJavaScriptと並んで、ワールドワイドウェブの基礎となる技術です。[ 3 ]
CSSは、レイアウト、色、フォントなど、コンテンツとプレゼンテーションの分離を可能にするように設計されています。[ 4 ]この分離により、プレゼンテーションを気にせずにコンテンツを記述できるため、コンテンツのアクセシビリティが向上します。また、プレゼンテーション特性の指定において柔軟性と制御性が向上し、関連するCSSを別の.cssファイルに指定することで複数のWebページで書式を共有できるようになり、構造コンテンツの複雑さと繰り返しが軽減されます。さらに、.cssファイルをキャッシュできるため、ファイルとその書式を共有するページ間でのページ読み込み速度が向上します。
フォーマットとコンテンツを分離することで、同じマークアップページを、画面上、印刷、音声(音声ブラウザやスクリーンリーダー経由)、点字タッチデバイスなど、異なるレンダリング方法に応じて異なるスタイルで表示することが可能になります。CSSには、モバイルデバイスでコンテンツにアクセスした場合の代替フォーマットに関する規則も用意されています。[ 5 ]
カスケードという名称は、特定の要素に複数のプロパティ宣言が一致する場合に、どの宣言を適用するかを決定するための優先順位スキームに由来しています。このカスケード方式の優先順位スキームは予測可能です。
CSS仕様は、ワールド・ワイド・ウェブ・コンソーシアム(W3C)によって保守されています。インターネットメディアタイプ(MIMEタイプ)text/cssは、RFC 2318(1998年3月)によってCSSで使用するために登録されています。W3Cは、CSS文書のための無料のCSS検証サービスを運営しています。[ 6 ]
HTML に加えて、XHTML、プレーン XML、SVG、XULなどの他のマークアップ言語でも CSS の使用がサポートされています。 CSS はGTKウィジェットツールキットでも使用されています。
CSS はシンプルな構文を持ち、多数の英語のキーワードを使用してさまざまなスタイル プロパティの名前を指定します。
スタイルシートはルールのリストで構成されます。各ルールまたはルールセットは、1つ以上のセレクタと宣言ブロックで構成されます。
CSS では、セレクターは、マークアップ自体のタグと属性を一致させることによって、スタイルがマークアップのどの部分に適用されるかを宣言します。
セレクターは以下に適用できます。
#id.classname。例: (「CSS クラス」というフレーズは時々使用されますが、誤った名称です。要素クラス ( HTML の class 属性で指定) は、ブラウザーの CSS サブシステムとは異なるマークアップ機能であり、関連する W3C/WHATWG 標準は文書スタイルに作用します。Webコンテンツ モデルの「クラス」システムの起源については、RDFとマイクロフォーマットを参照してください)クラスとIDは大文字と小文字が区別され、文字で始まり、英数字、ハイフン、アンダースコアを含めることができます。クラスは任意の要素の任意の数のインスタンスに適用できます。IDは1つの要素にのみ適用できます。
疑似クラスは、ドキュメント ツリーに含まれていない情報に基づいた書式設定を許可するために CSS セレクターで使用されます。
広く使われている擬似クラスの例としては が挙げられます。これは、ユーザーが可視要素を「ポイント」した時(通常はマウスカーソルを要素の上に置く)にのみコンテンツを識別します。 またはのようにセレクタに追加されます。 :hovera:hover#elementid:hover
擬似クラスは、またはなどの文書要素を分類しますが、擬似要素は、またはなどの部分的な要素で構成される可能性のある選択を行います。[ 7 ]擬似要素に使用される二重コロン表記と擬似クラスに使用される単一コロン表記の違いに注意してください。 :link:visited::first-line::first-letter
複数の単純セレクタをコンビネータで結合することで、要素を位置、要素タイプ、ID、クラス、またはそれらの組み合わせで指定することができます。[ 8 ]セレクタの順序は重要です。例えば、はdiv要素内にあるクラスmyClassのすべての要素に適用されますが、はmyClassの要素内にあるすべてのdiv要素に適用されます。これは、myClassのdiv要素に適用される などの連結識別子と混同しないでください。div.myClass{color:red;}.myClassdiv{color:red;}div.myClass{color:red;}
次の表は、セレクタ構文の使用法とそれを導入したCSSのバージョンの概要を示しています。[ 9 ]
| パターン | マッチ | CSSレベルで 最初に定義された |
|---|---|---|
E | E型の要素 | 1 |
E:link | ターゲットがまだ訪問されていない (:link) か、すでに訪問されている (:visited) ハイパーリンクのソース アンカーである E 要素 | 1 |
E:visited | ||
E:active | 特定のユーザーアクション中のE要素 | 1 |
E:hover | 2 | |
E:focus | ||
E::first-line | E要素の最初のフォーマットされた行 | 1 |
E::first-letter | E要素の最初のフォーマットされた文字 | 1 |
.c | class="c" を持つすべての要素 | 1 |
#myid | id="myid" の要素 | 1 |
E.warning | クラスが「警告」であるE要素(文書言語によってクラスの決定方法が指定される) | 1 |
E#myid | IDが「myid」に等しいE要素 | 1 |
.c#myid | class="c" で ID が "myid" である要素 | 1 |
EF | E要素の子孫であるF要素 | 1 |
* | 任意の要素 | 2 |
E[foo] | "foo"属性を持つE要素 | 2 |
E[foo="bar"] | 「foo」属性値が「bar」と完全に等しいE要素 | 2 |
E[foo~="bar"] | E要素の「foo」属性値は空白で区切られた値のリストであり、そのうちの1つは「bar」と完全に等しい | 2 |
E[foo|="en"] | E要素の「foo」属性には、左から「en」で始まるハイフンで区切られた値のリストが含まれます。 | 2 |
E:first-child | E要素、親の最初の子 | 2 |
E:lang(fr) | 言語「fr」のE型の要素(文書言語によって言語の決定方法が指定されます) | 2 |
E::before | E要素のコンテンツの前に生成されたコンテンツ | 2 |
E::after | E要素のコンテンツの後に生成されたコンテンツ | 2 |
E>F | E要素の子であるF要素 | 2 |
E+F | F要素の直前にE要素がある | 2 |
E[foo^="bar"] | 「foo」属性値が文字列「bar」で始まるE要素 | 3 |
E[foo$="bar"] | 「foo」属性値が文字列「bar」で終わるE要素 | 3 |
E[foo*="bar"] | 「foo」属性値に部分文字列「bar」が含まれるE要素 | 3 |
E:root | E要素、文書のルート | 3 |
E:nth-child(n) | E要素、その親のn番目の子 | 3 |
E:nth-last-child(n) | E要素、親の最後の要素から数えてn番目の子 | 3 |
E:nth-of-type(n) | E要素、その型のn番目の兄弟 | 3 |
E:nth-last-of-type(n) | E要素、その型の最後の要素から数えてn番目の兄弟 | 3 |
E:last-child | E要素、親の最後の子 | 3 |
E:first-of-type | E要素、その型の最初の兄弟 | 3 |
E:last-of-type | E要素、そのタイプの最後の兄弟 | 3 |
E:only-child | E要素、親の唯一の子 | 3 |
E:only-of-type | E要素、そのタイプの唯一の兄弟 | 3 |
E:empty | 子要素を持たないE要素(テキストノードを含む) | 3 |
E:target | 参照URIのターゲットとなるE要素 | 3 |
E:enabled | 有効になっているユーザーインターフェース要素E | 3 |
E:disabled | 無効になっているユーザーインターフェース要素E | 3 |
E:checked | チェックされたユーザーインターフェース要素E(ラジオボタンやチェックボックスなど) | 3 |
E:not(s) | 単純セレクタに一致しないE要素 | 3 |
E~F | E要素の前にあるF要素 | 3 |
E:has(s) | 単純セレクタsに一致する要素を含むE要素 | 4 |
宣言ブロックは、セミコロンで区切られた宣言{}のリストを囲む一対の中括弧()で構成されます。[ 10 ]
各宣言自体は、プロパティ、コロン(:)および値で構成されます。可読性を高めるために、宣言ブロック、宣言、コロン、およびセミコロンの周囲に任意の空白文字を挿入することができます。[ 11 ]
プロパティはCSS標準で規定されています。各プロパティには、可能な値の集合があります。一部のプロパティはあらゆるタイプの要素に影響を与えますが、他のプロパティは特定の要素グループにのみ適用されます。[ 12 ] [ 13 ]
200px値は、「center」や「inherit」などのキーワード、または(200 ピクセル)、50vw(ビューポート幅の 50 パーセント)、80% (親要素の幅の 80 パーセント) などの数値になります。
色の値は、キーワード(例: " red")、16進数値(例: 、略称:)、0~255のRGB値(例: )、色とアルファ透明度の両方を指定するRGBA値(例: )、またはHSL値またはHSLA値(例: 、 )で指定できます。[ 14 ]#FF0000#F00rgb(255,0,0)rgba(255,0,0,0.8)hsl(0100%50%)hsl(0100%50%/0.8)
線形測定を表すゼロ以外の数値には、長さの単位を含める必要があります。長さの単位は、 または のように200px、アルファベットのコードまたは略語、50vwあるいは のように、パーセント記号です。センチメートル(センチメートル)、インチ(ミリメートル)、パイカ(パイカ)、ポイント(ポイント)など80%の一部の単位は絶対単位であり、レンダリングされる寸法はページの構造に依存しません。一方、エム( em ) 、エクセル( ex ) 、ピクセル(ピクセル)などの他の単位は相対単位であり、親要素のフォントサイズなどの要因がレンダリングされる測定値に影響を与える可能性があります。これらの 8 つの単位は CSS 1 [ 15 ]の機能であり、その後のすべての改訂で保持されています。提案されている CSS 値および単位モジュール レベル 3 が W3C 勧告として採用された場合、さらに、、、、、の7 つの長さの単位が提供されます。[ 16 ]cminmmpcptemexpxchQremvhvmaxvminvw
CSSが登場する前は、HTMLドキュメントのほぼすべての表示属性はHTMLマークアップ内に含まれていました。つまり、フォント色、背景スタイル、要素の配置、境界線、サイズなど、すべての属性をHTML内で明示的に(多くの場合、繰り返し)記述する必要がありました。CSSの登場により、作成者はこれらの情報の多くを別のファイルであるスタイルシートに移すことができるため、HTMLが大幅に簡素化されました。さらに、レスポンシブWebページにアクセス可能なデバイスが増えるにつれて、さまざまな画面サイズやレイアウトが登場し始めています。デバイスサイズに合わせてWebサイトをカスタマイズするのはコストがかかり、ますます困難になっています。CSSのモジュール性により、サイト内のさまざまな部分、あるいは複数のサイト間でスタイルを再利用できるため、一貫性と効率性が向上します。
例えば、見出し(h1要素)、小見出し(要素h2)、さらに小見出し(要素)などは、HTMLを用いて構造的に定義されます。印刷物や画面上では、これらの要素のフォント、サイズ、色、強調表示h3の選択は、プレゼンテーション的な要素となります。
CSSが登場する以前は、例えばすべての見出しにこのようなタイポグラフィ特性を割り当てたい文書作成者はh2、その見出しの種類ごとにHTMLのプレゼンテーションマークアップを繰り返す必要がありました。これにより、文書はより複雑で大きくなり、エラーが発生しやすくなり、保守が困難になりました。CSSはプレゼンテーションと構造を分離することを可能にします。CSSは色、フォント、テキストの配置、サイズ、境界線、間隔、レイアウトなど、多くのタイポグラフィ特性を定義でき、画面表示と印刷表示で独立して定義できます。CSSは、音声テキストリーダーの読み上げ速度や強調など、視覚に訴えないスタイルも定義します。W3Cは現在、すべてのプレゼンテーションHTMLマークアップの使用を非推奨としています。 [ 17 ]
たとえば、CSS 以前の HTML では、赤いテキストで定義された見出し要素は次のように記述されます。
< h1 >< font color = "red" >第1章</ font ></ h1 >CSS を使用すると、同じ要素を HTML プレゼンテーション属性の代わりにスタイル プロパティを使用してコーディングできます。
< h1 style = "color: red;" >第1章</ h1 >この利点はすぐには理解できないかもしれませんが、スタイルプロパティを内部スタイル要素、あるいはさらに良い方法として外部CSSファイルに記述することで、CSSの威力はより明らかになります。例えば、ドキュメントに次のスタイル要素が含まれているとします。
<スタイル> h1 {色:赤; } </スタイル>h1明示的なコードを必要とせずに、ドキュメント内のすべての要素が自動的に赤色に変わります。作成者が後でh1要素を青色にしたい場合は、スタイル要素を次のように変更します。
<スタイル> h1 {色:青; } </スタイル>面倒な作業でドキュメントを調べて、個々のh1要素ごとに色を変更するのではなく、
スタイルは、以下に示すように外部 CSS ファイルに配置し、次のような構文を使用して読み込むこともできます。
< link href = "path/to/file.css" rel = "stylesheet" type = "text/css" >これにより、HTML ドキュメントからスタイル設定がさらに分離され、共有された外部 CSS ファイルを編集するだけで複数のドキュメントのスタイルを変更できるようになります。
CSS(カスケーディング スタイル シート)は、ブラウザのデフォルト、ユーザー設定、またはウェブ デザイナーが作成したスタイルを使用して、ウェブ コンテンツのスタイルを柔軟に定義できます。これらのスタイルは、HTML ドキュメント内でインラインで適用することも、外部の .css ファイルを通じて適用して一貫性を高めることもできます。これにより、再利用性と保守性が向上し、ウェブ開発が簡素化されるだけでなく、ブラウザがキャッシュできる専用の .css ファイルにスタイルをオフロードできるため、サイトのパフォーマンスも向上します。さらに、スタイルを読み込めない場合や無効になっている場合でも、この分離によってコンテンツのアクセシビリティと可読性が維持され、障碍のあるユーザーを含むすべてのユーザーがサイトを利用できるようになります。セレクタの詳細度、ルールの順序、メディア タイプなどを考慮した多面的なアプローチにより、ウェブサイトはさまざまなデバイスやユーザーのニーズに対して視覚的に一貫性があり、適応性に優れたものとなり、設計意図とユーザー アクセシビリティのバランスが保たれます。
複数のスタイルシートをインポートできます。使用する出力デバイスに応じて異なるスタイルを適用できます。例えば、画面表示版と印刷版では表示内容が大きく異なる場合があり、作成者はそれぞれのメディアに合わせて適切なプレゼンテーションを調整できます。
最も優先度の高いスタイルシートがコンテンツの表示を制御します。最も優先度の高いソースで設定されていない宣言は、ユーザーエージェントスタイルなどの優先度の低いソースに渡されます。このプロセスはカスケーディングと呼ばれます。
CSS の目標の 1 つは、ユーザーがより細かくプレゼンテーションを制御できるようにすることです。赤い斜体の見出しが読みにくいと感じる人は、異なるスタイルシートを適用するとよいでしょう。ブラウザーと Web サイトに応じて、ユーザーはデザイナーが提供するさまざまなスタイルシートを選択することも、追加されたスタイルをすべて削除してブラウザーの既定のスタイルを使用してサイトを表示したり、赤い斜体の見出しスタイルのみを上書きして他の属性を変更したりすることもできます。StylishやStylusなどのブラウザー拡張機能は、このようなユーザー スタイルシートの管理を容易にするために作成されています。大規模なプロジェクトでは、開発者が優先順位が競合するサードパーティのスタイルを統合する場合に、カスケーディングを使用してどのスタイルの優先順位が高いかを判断し、さらにそれらの競合を解決することができます。さらに、カスケーディングはテーマ別のデザインを作成するのにも役立ちます。これにより、デザイナーは全体的なレイアウトを損なうことなく、デザインのさまざまな側面を微調整することができます。
| 優先度 | CSSソースタイプ | 説明 |
|---|---|---|
| 1 | 重要性 | 「」注釈は以前の優先度タイプを上書きします !important |
| 2 | 列をなして | HTMLの「style」属性を介してHTML要素に適用されるスタイル |
| 3 | メディアタイプ | メディア固有のCSSが定義されていない限り、プロパティ定義はすべてのメディアタイプに適用されます。 |
| 4 | ユーザー定義 | ほとんどのブラウザにはアクセシビリティ機能があります。ユーザー定義のCSS |
| 5 | セレクタの詳細度 | 特定のコンテキストセレクタ()は一般的な定義を上書きします #headingp |
| 6 | ルールの順序 | 最後のルール宣言は優先度が高い |
| 7 | 親の継承 | プロパティが指定されていない場合は、親要素から継承されます。 |
| 8 | HTML文書におけるCSSプロパティの定義 | CSSルールまたはCSSインラインスタイルがデフォルトのブラウザ値を上書きします |
| 9 | ブラウザのデフォルト | 最低優先度: ブラウザのデフォルト値はW3Cの初期値仕様によって決定されます |
詳細度とは、様々なルールの相対的な重み付けを指します。[ 18 ]複数のルールが適用可能な場合に、どのスタイルが要素に適用されるかを決定します。仕様によると、単純なセレクタ(例:H1)の詳細度は1、クラスセレクタの詳細度は1,0、IDセレクタの詳細度は1,0,0です。詳細度の値は10進法のように繰り越されないため、カンマで「数字」を区切ります[ 19 ](11個の要素と11個のクラスを持つCSSルールの詳細度は121ではなく11,11になります)。
したがって、次のルールのセレクターは、示された詳細度をもたらします。
| セレクター | 特異性 |
|---|---|
h1{color:white;} | 0、0、0、1 |
pem{color:green;} | 0、0、0、2 |
.grape{color:red;} | 0、0、1、0 |
p.bright{color:blue;} | 0、0、1、1 |
p.brightem.dark{color:yellow;} | 0、0、2、2 |
#id218{color:brown;} | 0、1、0、0 |
style=" " | 1、0、0、0 |
次の HTML フラグメントを検討してください。
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < style > # xyz { color : blue ; } </ style > </ head > < body > < p id = "xyz" style = "color: green;" >詳細度を示す</ p > </ body > </ html >上記の例では、属性の宣言のstyle方が<style>詳細度が高いため、要素の宣言が上書きされ、段落が緑色で表示されます。
特異性を示す
継承は CSS の重要な機能であり、祖先と子孫の関係に基づいて動作します。継承とは、プロパティが特定の要素だけでなくその子孫にも適用されるメカニズムです。[ 18 ]継承はドキュメント ツリーに依存します。ドキュメント ツリーは、ネストに基づくページ内のXHTML要素の階層です。子孫要素は、それを囲む祖先要素から CSS プロパティ値を継承できます。一般に、子孫要素はテキスト関連のプロパティを継承しますが、ボックス関連のプロパティは継承されません。継承できるプロパティは、color、font、letter spaces、line-height、list-style、text-align、text-indent、text-transform、visibility、white-space、word-spacing です。継承できないプロパティは、background、border、display、float と clear、height、width、margin、min-height、max-height、-width、outline、overflow、padding、position、text-decoration、vertical-align、z-index です。
継承を使用すると、スタイルシートで特定のプロパティを何度も宣言する必要がなくなり、CSS を短くすることができます。
CSSにおける継承は、クラスベースのプログラミング言語における継承とは異なります。クラスベースのプログラミング言語では、クラスBを「クラスAに似ているが、変更が加えられている」と定義することが可能です。[ 20 ] CSSでは、「クラスAに似ているが、変更が加えられている」という要素のスタイル設定が可能です。しかし、そのようなCSSクラスBを定義することは不可能であり、そのクラスBを使用して、変更を繰り返すことなく複数の要素のスタイル設定を行うことはできません。
次のスタイルシートがあるとします。
p {色:ピンク; }内部に強調要素 ( <em>) を持つ ap 要素があるとします。
< p > これは< em >継承 を説明するため</ em >です</ p >em要素に色が割り当てられていない場合、強調された単語「illustrate」は親要素pの色を継承します。スタイルシートpの色はピンクなので、em要素も同様にピンクになります。
これは継承を説明するためのものである
プロパティとセレクタ間の空白は無視されます。このコードスニペット:
body {オーバーフロー:非表示;背景: #000000 ;背景画像: url ( images/bg.gif );背景繰り返し:繰り返しなし;背景位置:左上; }機能的には次のものと同等です:
body {オーバーフロー:非表示;背景色: #000000 ;背景画像: url ( images/bg.gif );背景繰り返し:繰り返しなし;背景位置:左上; }CSSを読みやすくフォーマットする一般的な方法の一つは、各プロパティをインデントし、それぞれに独立した行を設けることです。CSSを読みやすくフォーマットするだけでなく、ショートハンドプロパティを使用することでコードをより速く記述でき、レンダリング時の処理も高速化されます。[ 21 ]
body {オーバーフロー:非表示;背景: #000 url ( images/bg.gif )繰り返しなし左上; }場合によっては、複数のプロパティ値が独自の行にインデントされることがあります。
@ font-face {フォントファミリー: 'Comic Sans' ;フォントサイズ: 20px ; src : url ( 'first.example.com' ), url ( 'second.example.com' ), url ( 'third.example.com' ), url ( 'fourth.example.com' ); }CSS 2.1 では、次の 3 つの配置スキームが定義されています。
プロパティには5つの値がありますposition。アイテムが 以外の方法で配置されている場合static、オフセットと位置を指定するためにtop、bottom、left、などのrightプロパティが使用されます。位置が静的に設定されている要素は top、bottom、 、leftなどの rightプロパティの影響を受けません。
デフォルト値は、アイテムを通常のフローに配置します。
アイテムは通常のフローに配置され、その後、その位置からシフトまたはオフセットされます。後続のフローアイテムは、アイテムが移動されていないかのようにレイアウトされます。
絶対位置を指定します。要素は、最も近い非静的な祖先要素を基準にして配置されます。
文書の残りの部分がスクロールされても、項目は画面上の固定位置に絶対的に配置される[ 22 ]
このfloatプロパティは3つの値のいずれかを持ちます。絶対位置または固定位置に配置されたアイテムはフロートできません。他の要素は通常、プロパティによってフロートが禁止されていない限り、フロートされたアイテムの周囲に配置されますclear。
clear:leftclear:rightclear:both
CSSは1994年10月10日にHåkon Wium Lieによって初めて提案されました。[ 24 ]当時、LieはCERNでTim Berners-Leeと働いていました。[ 25 ]ウェブ用の他のスタイルシート言語も同時期にいくつか提案され、公開メーリングリストやワールドワイドウェブコンソーシアム内での議論の結果、1996年に最初のW3C CSS勧告(CSS1)[ 26 ]がリリースされました。特に、 Bert Bosの提案は影響力があり、彼はCSS1の共同著者となり、CSSの共同作成者と見なされています。[ 27 ]
スタイルシートは、1980年代の標準汎用マークアップ言語( SGML )の誕生以来、何らかの形で存在しており、CSSはウェブ用のスタイルシートを提供するために開発されました。 [ 28 ]ウェブスタイルシート言語の要件の一つは、ウェブ上の様々なソースからスタイルシートを取得できることでした。そのため、DSSSLやFOSIといった既存のスタイルシート言語は適していませんでした。一方、CSSは「カスケーディング」スタイルによって、文書のスタイルを複数のスタイルシートの影響を受けやすくしました。[ 28 ]
HTML が発展するにつれ、ウェブ開発者の要求を満たすため、より幅広いスタイルの機能が含まれるようになりました。この進化により、デザイナーはサイトの外観をより細かく制御できるようになりましたが、HTML はより複雑になりました。ViolaWWWやWorldWideWebなどのウェブブラウザの実装の多様性により、[ 29 ]サイトの外観の一貫性が難しくなり、ユーザーはウェブコンテンツの表示方法をあまり制御できませんでした。ティム・バーナーズ=リーが開発したブラウザ/エディタには、プログラムにハードコードされたスタイルシートがありました。そのため、スタイルシートをウェブ上の文書にリンクすることはできませんでした。[ 25 ]同じく CERN のRobert Cailliauは、異なるスタイルシートで印刷、画面ベースのプレゼンテーション、エディタごとに異なるプレゼンテーションを記述できるように、構造とプレゼンテーションを分離したいと考えました。[ 29 ]
ウェブプレゼンテーション機能の向上は、ウェブコミュニティの多くの人々の関心事であり、www-style メーリングリストでは 9 つの異なるスタイルシート言語が提案されました。[ 28 ]これらの 9 つの提案のうち、2 つが CSS の基盤に特に影響を与えました。それは、カスケーディング HTML スタイルシート[ 24 ]とストリームベース スタイルシート提案 (SSP) です。[ 27 ] [ 30 ] 2 つのブラウザーが最初の提案のテストベッドとして機能しました。Lie はYves Lafonと協力して、 Dave RaggettのArenaブラウザーに CSS を実装しました。[ 31 ] [ 32 ] [ 33 ] Bert Bos は、独自の SSP 提案をArgoブラウザーに実装しました。[ 27 ]その後、Lie と Bos は協力して CSS 標準を開発しました (これらのスタイルシートは HTML 以外のマークアップ言語にも適用できるため、名前から 'H' が削除されました)。[ 25 ]
Lie の提案は、1994 年にイリノイ州シカゴで開催された「 Mosaic and the Web 」会議 (後に WWW2 と呼ばれる) で発表され、1995 年には Bert Bos と共に再び発表されました。 [ 25 ]この頃、W3C が既に設立され、CSS の開発に興味を示していました。W3C はその目的のために、Steven Pembertonを議長とするワークショップを開催しました。この結果、W3C は HTML 編集レビュー委員会 (ERB) の成果物に CSS に関する作業を追加しました。Lie と Bos は、このプロジェクトの主要な技術スタッフであり、 Microsoft のThomas Reardonなどの追加メンバーも参加しました。1996 年 8 月、Netscape Communication Corporation はJavaScript Style Sheets (JSSS)と呼ばれる代替スタイルシート言語を発表しました。[ 25 ]この仕様は完成することなく、非推奨となっています。[ 34 ] 1996 年末までに CSS は公式になる準備が整い、12 月に CSS レベル 1 勧告が発行されました。
HTML、CSS、DOMの開発はすべて、HTML Editorial Review Board (ERB) という一つのグループで行われていました。1997年初頭、ERBは3つのワーキンググループに分割されました。W3CのDan Connolly氏が議長を務めるHTMLワーキンググループ、 SoftQuadのLauren Wood氏が議長を務めるDOMワーキンググループ、そしてW3CのChris Lilley氏が議長を務めるCSSワーキンググループです。
CSS ワーキング グループは、CSS レベル 1 で対処されなかった問題に取り組み始め、その結果、1997 年 11 月 4 日に CSS レベル 2 が作成されました。これは、1998 年 5 月 12 日に W3C 勧告として公開されました。1998 年に開始された CSS レベル 3 は、2014 年現在も開発中です。
2005年、CSSワーキンググループは標準規格の要件をより厳格に適用することを決定しました。これにより、CSS 2.1、CSS 3セレクタ、CSS 3テキストといった既に公開されている標準規格は、勧告候補からワーキングドラフトレベルに引き下げられました。
CSS 1 仕様は 1996 年に完成した。同年、 Microsoft のInternet Explorer 3 [ 25 ]がリリースされ、限定的に CSS をサポートした。IE 4とNetscape 4.x ではサポートが強化されたが、概して不完全で、多くのバグがあったため CSS が実用的に採用されることはなかった。ウェブブラウザがこの仕様をほぼ完全に実装するまでには 3 年以上かかった。2000年 3 月に出荷されたMacintosh版のInternet Explorer 5.0 は、CSS 1 を完全 (99 % 以上) にサポートした最初のブラウザとなり[ 35 ] 、15 か月前に CSS サポートを導入して以来トップに立っていたOperaを追い抜いた。その後すぐに他のブラウザも追随し、その多くが CSS 2 の一部も実装した。
しかし、その後の「バージョン5」ウェブブラウザがCSSのかなり完全な実装を提供するようになったにもかかわらず、依然として特定の領域では不正確でした。矛盾、バグ、その他の奇妙な動作が蔓延していました。Windows版のMicrosoft Internet Explorer 5.xは、全く異なるMacintosh版IEとは対照的に、 CSSボックスモデルの実装に欠陥があり、CSS標準とは対照的でした。このような矛盾や機能サポートのばらつきにより、デザイナーはCSSハックやフィルターと呼ばれる回避策を使わずに、ブラウザやプラットフォーム間で一貫した外観を実現することが困難でした。IEのWindows版ボックスモデルのバグは非常に深刻だったため、Internet Explorer 6のリリース時に、MicrosoftはCSS解釈の下位互換性モード(「Quirksモード」)と、修正された代替モード「標準モード」を導入しました。Microsoft以外のブラウザもモード切り替え機能を提供していました。そのため、HTMLファイルの作成者は、CSSが標準に準拠して正しく解釈されることを意図していることを示すために、特別な「標準準拠CSSを意図」マーカーをHTMLファイルに必ず含める必要がありました。これは、作成者がCSSが標準に準拠して正しく解釈されることを意図しており、今では時代遅れとなったIE5/Windowsブラウザ向けではないことを示すためです。このマーカーがないと、「Quirksモード」切り替え機能を持つウェブブラウザは、CSS標準に従うのではなく、Windows版IE5のようにウェブページ内のオブジェクトのサイズを調整してしまいます。
CSSの不完全な採用と元の仕様におけるエラッタの問題により、W3CはCSS 2標準をCSS 2.1へと改訂しました。これは、HTMLブラウザにおける現在のCSSサポートの作業スナップショットに近づきました。どのブラウザでも正常に実装されていないCSS 2プロパティの一部は削除され、いくつかのケースでは、定義された動作が変更され、標準が既存の主要な実装と一致するようにしました。CSS 2.1は2004年2月25日に勧告候補となりましたが、2005年6月13日にワーキングドラフトに引き戻され、[ 36 ]、2007年7月19日にようやく勧告候補に戻りました。[ 37 ]
これらの問題に加えて、この拡張子はPowerPointファイルをコンパクトスライドショーファイルに.css変換するソフトウェア製品で使用されていたため、 [ 38 ] 、一部のウェブサーバーでは、すべてを[ 39 ]ではなくMIMEタイプ[ 40 ]として提供していました。 .cssapplication/x-pointplustext/css
個々のブラウザベンダーは、標準化や汎用化に先立ち、新しいパラメータを導入することがあります。将来の実装を妨げないよう、ベンダーはパラメータに固有の名前を付けることがあります。例えば、Mozilla Firefox-moz-の場合はApple Safariのブラウジングエンジンにちなんで名付けられ、Opera ブラウザの場合はMicrosoft Internet Explorerと EdgeHTML を使用する初期バージョンのMicrosoft Edgeの場合はそのように付けられます。 -webkit--o--ms-
-moz-radial-gradient場合によっては、やなどのベンダープレフィックス付きのパラメータは、-webkit-linear-gradientベンダープレフィックスなしのパラメータと比べて構文が若干異なる場合があります。[ 41 ]
プレフィックス付きプロパティは、標準化の時点では廃止されます。古いブラウザ向けにプレフィックスを自動的に追加したり、プレフィックス付きパラメータの標準化されたバージョンを提示したりするプログラムが利用可能です。プレフィックスは一部のブラウザに限定されているため、プレフィックスを削除することで他のブラウザでもその機能を使用できます。ただし、一部の廃止された-webkit-プレフィックス付きプロパティは例外です。これらのプロパティはウェブ上で非常に一般的で永続的であるため、他のブラウザファミリーは互換性のためにそれらをサポートすることを決定しています。[ 42 ]

CSSには様々なレベルとプロファイルがあります。各レベルのCSSは前のレベルを基盤として構築されており、通常は新しい機能が追加され、CSS 1、CSS 2、CSS 3、CSS 4と表記されます。プロファイルは 通常、特定のデバイスまたはユーザーインターフェース向けに構築された1つ以上のレベルのCSSのサブセットです。現在、モバイルデバイス、プリンター、テレビ用のプロファイルがあります。プロファイルは、CSS 2で追加されたメディアタイプと混同しないでください。
CSS仕様書として初めてW3Cの公式勧告となったのは、1996年12月17日に公開されたCSSレベル1である。Håkon Wium LieとBert Bosが最初の開発者として認められている。[ 44 ] [ 45 ]その機能の中には、
W3CはもはやCSS 1勧告の保守を行っていない。[ 46 ]
CSSレベル2仕様はW3Cによって開発され、1998年5月に勧告として公開されました。CSS1のスーパーセットであるCSS2には、要素の絶対位置、相対位置、固定位置、z-index、メディアタイプの概念、聴覚スタイルシート(後にCSS3音声モジュールに置き換えられました)[ 47 ]と双方向テキストのサポート、影などの新しいフォントプロパティなど、多くの新しい機能が含まれています。
W3CはもはやCSS 2勧告を維持していない。[ 48 ]
CSS レベル 2 リビジョン 1(CSS 2.1 とも呼ばれる)は、CSS 2 のエラーを修正し、サポートが不十分であったり相互運用性が不十分な機能を削除し、既に実装されているブラウザ拡張機能を仕様に追加しています。技術仕様の標準化における W3C プロセスに準拠するため、CSS 2.1 は長年にわたり、ワーキングドラフトの状態と勧告候補の状態の間を行き来していました。CSS 2.1 は2004年2月25日に初めて勧告候補となりましたが、2005年6月13日にさらなる検討のためにワーキングドラフトに戻されました。2007年7月19日に再び勧告候補となり、その後2009年には2回の改訂が行われました。しかし、変更と明確化が行われたため、2010年12月7日に再び最終ワーキングドラフトの状態に戻りました。
CSS 2.1は2011年4月12日に勧告案となった。[ 49 ] W3C諮問委員会によるレビューを経て、最終的に2011年6月7日にW3C勧告として公開された。[ 50 ]
CSS 2.1 はレベル 2 の最初のかつ最後の改訂版として計画されていましたが、CSS 2.2 の低優先度作業は 2015 年に開始されました。
様々な機能を定義する単一の大きな仕様であるCSS 2とは異なり、CSS 3は「モジュール」と呼ばれる複数の個別のドキュメントに分割されています。各モジュールは、CSS 2で定義された新機能を追加したり、機能を拡張したりすることで、後方互換性を維持しています。CSSレベル3の作業は、最初のCSS 2勧告の公開とほぼ同時期に開始されました。最初のCSS 3ドラフトは1999年6月に公開されました。[ 51 ]
モジュール化により、モジュールごとに安定性やステータスが異なります。[ 52 ]
一部のモジュールは勧告候補(CR)ステータスにあり、中程度の安定性があると考えられています。CR段階では、実装においてベンダープレフィックスを削除することが推奨されます。[ 53 ]
| モジュール | 仕様タイトル | 状態 | 日付 |
|---|---|---|---|
| CSS3 背景 | CSS 背景と境界線モジュール レベル 3 | 候補者推薦 | 2023年2月 |
| CSSボックス3 | CSS ボックスモデルモジュール レベル 3 | おすすめ | 2023年4月 |
| CSSカスケード3 | CSS カスケードと継承レベル 3 | おすすめ | 2021年2月 |
| css-カラー-3 | CSS カラーモジュール レベル 3 | おすすめ | 2022年1月 |
| CSS3コンテンツ | CSS 生成コンテンツ モジュール レベル 3 | ワーキングドラフト | 2019年8月 |
| css-フォント-3 | CSS フォントモジュール レベル 3 | おすすめ | 2018年9月 |
| CSS3-GCPM | ページメディアモジュールのCSS生成コンテンツ | ワーキングドラフト | 2014年5月 |
| CSS3レイアウト | CSS テンプレートレイアウトモジュール | 注記 | 2015年3月 |
| CSS3メディアクエリ | メディアクエリ | おすすめ | 2012年6月 |
| メディアクエリ-4 | メディアクエリ レベル4 | 候補者推薦 | 2021年12月 |
| CSS3-マルチコル | マルチカラムレイアウトモジュールレベル1 | 候補者推薦 | 2021年10月 |
| CSS3ページ | CSS ページメディアモジュール レベル 3 | ワーキングドラフト、一部はcss3-breakに移行 | 2018年10月 |
| CSS3ブレーク | CSS フラグメンテーション モジュール レベル 3 | 候補者推薦 | 2018年12月 |
| セレクター3 | セレクター レベル 3 | おすすめ | 2018年11月 |
| セレクター-4 | セレクター レベル 4 | ワーキングドラフト | 2022年11月 |
| CSS3 UI | CSS 基本ユーザーインターフェースモジュールレベル 3 (CSS3 UI) | おすすめ | 2018年6月 |
CSS4仕様は存在しない。[ 55 ] [ 56 ] CSSは独立したレベルの多くの個別のモジュールに分割されているためである。
CSSレベル2を基に構築されたモジュールはレベル3から始まりました。そのうちのいくつかはすでにレベル4に到達しているか、すでにレベル5に近づいています。Flexbox [ 57 ]などの完全に新しい機能を定義する他のモジュールはレベル1に指定されており、そのいくつかはレベル2に近づいています。
CSSワーキンググループは、ブラウザ開発者が実装できるほど安定していると考えられるモジュール全体や他のドラフトの一部をまとめた「スナップショット」を時折公開しています。これまでに、2007年、[ 58 ] 2010年、[ 59 ] 2015年、 [ 60 ] 2017年、[ 61 ] 2018年の5つの「最新ベストプラクティス」文書がNotesとして公開されています。[ 62 ]
これらの仕様スナップショットは主に開発者向けであるため、Can I Use... [ 63 ]やMDN Web Docs [ 64 ] などのサイトで文書化されている相互運用可能な実装の状態を示す、作成者を対象とした同様のバージョン管理されたリファレンスドキュメントの需要が高まっています。W3Cコミュニティグループは、そのようなリソースを議論および定義するために2020年初頭に設立されました。[ 65 ]実際のバージョン管理の種類も議論の余地があり、作成されたドキュメントは「CSS4」と呼ばれない可能性があります。
各WebブラウザはWebページをレンダリングするためにレイアウトエンジンを使用していますが、CSS機能のサポートはブラウザ間で一貫していません。ブラウザはCSSを完全には解析しないため、特定のブラウザを対象とした複数のコーディング手法が開発され、回避策が提供されています(一般にCSSハックまたはCSSフィルターと呼ばれています)。CSSの新機能の採用は、主要ブラウザでのサポート不足によって妨げられる可能性があります。たとえば、Internet Explorerは多くのCSS 3機能のサポート追加に時間がかかり、そのためそれらの機能の採用が遅れ、開発者の間でのブラウザの評判が悪くなりました。さらに、filter一部のバージョンでは、ベンダープレフィックスのないプロパティに独自の構文が使用されていました。[ 66 ]ユーザーに一貫したエクスペリエンスを提供するために、Web開発者は複数のオペレーティングシステム、ブラウザ、ブラウザバージョンでサイトをテストすることが多く、開発時間と複雑さが増大しています。BrowserStackなどのツールは、これらの環境を維持する複雑さを軽減するために構築されています。
これらのテストツールに加えて、CanIUseやMDN Web Docsなど、多くのサイトで特定のCSSプロパティのブラウザーサポートのリストが管理されています。さらに、CSS 3では機能クエリが定義されています。これは、@supports開発者がCSS内で直接特定の機能をサポートするブラウザーをターゲットにできるようにするディレクティブを提供します。[ 67 ]古いブラウザーでサポートされていないCSSは、ブラウザーの動作を一貫して行うように設計されたJavaScriptコードであるJavaScriptポリフィルを使用してパッチを当てることもできます。これらの回避策とフォールバック機能をサポートする必要性は、開発プロジェクトを複雑にする可能性があるため、企業はサポートするブラウザーバージョンとサポートしないブラウザーバージョンのリストを定義することがよくあります。
ウェブサイトが古いブラウザと互換性のない新しいコード標準を採用すると、これらのブラウザはウェブ上の多くのリソースにアクセスできなくなる可能性があります(時には意図的に)。[ 68 ]しかし、インターネット上で最も人気のあるサイトの多くは、CSSのサポートが不十分なために古いブラウザでは視覚的に劣化するだけでなく、主にJavaScriptやその他のウェブ技術の進化により、まったく機能しません。
CSS の現在の機能に関する注目すべき制限には次のようなものがあります。
z-index などのプロパティのスコープ指定ルールは、position: absolute 属性または position: relative 属性を持つ最も近い親要素を参照します。この奇妙な組み合わせは望ましくない影響を及ぼします。例えば、要素の位置を調整する必要がある場合、新しいスコープの宣言を避けられず、親要素の目的のスコープを使用できなくなります。
CSSは、条件に応じて代替スタイルを適用することで、ある程度のユーザーフィードバックを可能にする擬似クラスを実装しています。CSS擬似クラスの一つである「」は動的(JavaScriptの「onmouseover」に相当)であり、誤用される可能性があります(例:カーソル近接ポップアップの実装)[ 69 ]。しかし、CSSにはクライアントがこれを無効化する機能(「disable」のようなプロパティがない)や、その効果を制限する機能(各プロパティに「nochange」のような値がない)はありません。 :hover
CSS ルールに名前を付ける方法はありません。名前を付けると、セレクタが変更されても (たとえば) クライアント側スクリプトがルールを参照できるようになります。
CSSスタイルは、望ましい効果を得るために複数のルールで複製しなければならないことが多く、追加のメンテナンスとより徹底したテストが必要になります。この問題を解決するためにいくつかの新しいCSS機能が提案されましたが、後に放棄されました。[ 70 ] [ 71 ]代わりに、 Sass、Less、Stylusなど、CSSにコンパイルされるより洗練されたスタイルシート言語を使用することで、この能力を得ることができます。
疑似要素のほかに、プレースホルダー要素を使用せずに特定の範囲のテキストをターゲットにすることはできません。 ::first-letter
CSSは、様々なパラメータに基づいてスタイルを調整することで、コンテンツを複数のプレゼンテーション形式で公開することを容易にします。これらのパラメータには、明示的なユーザー設定(テーマやフォントサイズなど)、様々なWebブラウザとの互換性、コンテンツの表示に使用するデバイスの種類(デスクトップ、タブレット、モバイルデバイスなど)、画面解像度、ユーザーの所在地など、様々な変数が含まれます。また、CSSはレスポンシブデザインも可能にし、コンテンツがさまざまな画面サイズや画面の向きに動的に適応することで、幅広い環境におけるアクセシビリティとユーザーエクスペリエンスを向上させます。
CSSを継承と「カスケーディング」の観点から効果的に使用すると、グローバルスタイルシートを使用してサイト全体の要素に適用し、スタイルを設定できます。要素のスタイルを変更または調整する必要がある場合は、グローバルスタイルシートのルールを編集することで変更できます。CSSが導入される前は、このようなメンテナンスはより困難で、コストと時間がかかりました。
内部スタイルシートまたは外部スタイルシートは、要素、タイプ、または他の要素との関係によって選択された一連のHTML要素に対して、一度だけスタイルを指定しますclass。これは、要素が出現するたびにスタイル情報をインラインで繰り返すよりもはるかに効率的です。外部スタイルシートは通常、ブラウザのキャッシュに保存されるため、複数のページで再読み込みすることなく使用できるため、ネットワーク経由のデータ転送量をさらに削減できます。
たった1行の変更で、同じページに異なるスタイルシートを適用できます。これにより、アクセシビリティが向上するだけでなく、ページやサイトを様々なターゲットデバイスに合わせてカスタマイズできるようになります。さらに、スタイルを理解できないデバイス(古いブラウザなど)でもコンテンツを表示できます。
CSS がない場合、Web デザイナーは通常、視覚障害のあるユーザーのアクセシビリティを妨げる HTML テーブルなどの手法を使用してページをレイアウトする必要があります ( 「テーブルレス Web デザイン § アクセシビリティ」を参照)。
CSSフレームワークは、カスケーディングスタイルシート言語を使用して、ウェブページのスタイル設定をより簡単に、より標準に準拠したものにするために用意されたライブラリです。CSSフレームワークには、 Blueprint、Bootstrap、Foundation、Materializeなどがあります。プログラミング言語やスクリプト言語のライブラリと同様に、CSSフレームワークは通常、HTMLで参照される外部.cssシートとして組み込まれます。これらは、ウェブページのデザインとレイアウトのための数多くの既成のオプションを提供します。これらのフレームワークの多くは公開されていますが、一部の作成者は、主にラピッドプロトタイピングや学習のために使用し、サイトのスタイル設定で多くの未使用の機能を持つことによる設計、保守、ダウンロードのオーバーヘッドなしに、公開された各サイトに適したCSSを「手作り」することを好みます。[ 72 ]<head>
プロジェクトで使用されるCSSリソースの規模が大きくなるにつれて、開発チームはそれらを整理するために共通の設計手法を決定する必要が生じることがよくあります。その目標は、開発の容易さ、開発中の共同作業の容易さ、そしてブラウザに展開されたスタイルシートのパフォーマンスです。一般的な手法としては、OOCSS(オブジェクト指向CSS)、ACSS(アトミックCSS)、CSS(オーガニックカスケードスタイルシート)、SMACSS(スケーラブルでモジュール化されたCSSアーキテクチャ)、BEM(ブロック、要素、修飾子)などがあります。[ 73 ]
JavaScript は、すべての Web 開発者が習得しなければならない 3 つの技術のうちの 1 つです。3 つの技術とは、Web ページのコンテンツを指定するための HTML、Web ページの表示方法を指定するための CSS、および Web ページの動作を指定するための JavaScript です。