Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【CSS Modules】@documentアットルールの使い方

@documentアットルールの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

@documentオブジェクトは、特定のURLパターンに合致するウェブドキュメントに対してのみ、その内部に記述されたCSSスタイルを適用するためのat-ruleを表すオブジェクトです。この機能を使用することで、ウェブサイト内の特定のページや、特定のドメインにのみ独自のスタイルを適用するといった柔軟なスタイリングが可能になります。

@documentルールは、主にurl()url-prefix()domain()regexp()といった関数を用いて条件を指定します。例えば、@document url("https://example.com/page.html") { /* スタイル */ } のように記述することで、指定されたURLに完全に一致するページにのみスタイルが適用されます。また、@document domain("example.com") { /* スタイル */ } と記述すれば、example.comドメイン内のすべてのページにスタイルが適用されます。複数の条件をカンマで区切って記述することも可能です。

ただし、@documentは現在、主要なウェブブラウザのほとんどでサポートされておらず、Web標準からも非推奨または廃止された機能です。そのため、新しいプロジェクトでの利用は推奨されません。クロスブラウザ対応を必要とする場合は、JavaScriptを使用してURLに基づいてクラスを動的に追加するか、CSSのセレクタや他のat-rule(例:@media)で対応することが一般的です。

公式リファレンス: @document

構文(syntax)

1@document domain("example.com") {
2  /* スタイルルールを記述 */
3}

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

@documentでドメイン別スタイルを適用する

1/*
2 * @document ルールは、指定された条件に一致するウェブページにのみ
3 * 囲まれたCSSスタイルを適用するために使用されます。
4 *
5 * この例では、"example.com" ドメインのページにスタイルを適用します。
6 */
7@document domain("example.com") {
8  /*
9   * "example.com" ドメインにアクセスした際に適用されるスタイル定義。
10   */
11  body {
12    background-color: #f0f8ff; /* ページの背景色をアリスブルーに設定 */
13    font-family: Arial, sans-serif; /* フォントをArialに設定 */
14    color: #333; /* 文字色を濃いグレーに設定 */
15  }
16
17  h1 {
18    color: #0056b3; /* 見出しの色を濃い青に設定 */
19    text-align: center; /* 見出しを中央揃えにする */
20    margin-bottom: 20px; /* 見出しの下に余白を追加 */
21  }
22
23  p {
24    font-size: 16px; /* 段落のフォントサイズを設定 */
25    line-height: 1.5; /* 行の高さを設定し、読みやすくする */
26  }
27
28  a {
29    color: #007bff; /* リンクの色を青に設定 */
30    text-decoration: none; /* リンクの下線を削除 */
31  }
32
33  a:hover {
34    text-decoration: underline; /* ホバー時にリンクに下線を表示 */
35  }
36}

CSSの@documentルールは、特定の条件に合致するウェブページにのみ、その中に記述されたスタイルを適用するためのものです。これは、通常のCSSがWebサイト全体に適用されるのとは異なり、指定したページでのみスタイルを有効にしたい場合に非常に有用です。

このサンプルコードでは、@document domain("example.com")という条件を指定しています。これにより、ドメイン名が「example.com」であるウェブページにアクセスした場合にのみ、波括弧 {} 内に定義されたCSSスタイルが適用されます。例えば、bodyセレクタでページの背景色をアリスブルーに設定したり、フォントをArialにしたりするスタイルは、「example.com」ドメインのページだけで有効になります。また、h1セレクタで見出しの色を濃い青に設定し中央揃えにすることや、pセレクタで段落のフォントサイズや行の高さを調整することも、この条件に合致するページに限定されます。リンクのスタイルも同様に、この特定のドメインにのみ適用され、ホバー時に下線が表示されるようになります。

@documentルール自体には、プログラミング言語における関数のような引数や戻り値の概念は存在しません。代わりに、domain(), url(), url-prefix() といった関数形式の記述を用いて、スタイルを適用するページを詳細に指定する条件を定義します。このように、ウェブサイトの一部にのみ異なるデザインを適用したい場合に、柔軟かつ効率的にスタイルを制御できるのが@documentルールの特徴です。

@documentルールは、特定のウェブページ条件に基づいてスタイルを適用する機能です。しかし、この仕様は現在W3CのCSS Modulesワーキンググループの勧告候補から削除されており、主要なウェブブラウザではほとんどサポートされていません。そのため、一般的なウェブサイト開発での利用は推奨されません。サンプルコードのように条件分岐でスタイルを適用したい場合、通常のCSSセレクタやJavaScript、またはサーバーサイドの処理で制御するのが標準的な方法です。互換性や将来性を考慮し、このルールを実運用で使うことは避けてください。ブラウザ拡張機能など特殊な用途以外での利用は、意図通りに動作しない可能性が高いです。

CSS @document ルールでドキュメントを要求する

1/*
2 * @document は、特定のURL、ドメイン、または正規表現に一致するドキュメントにのみ
3 * CSSルールを適用するためのアットルールです。
4 *
5 * 【重要】この @document アットルールは、現在主要なブラウザではサポートされていません。
6 * 提案されましたが、ブラウザベンダーによる実装が見送られ、W3Cの勧告から削除されました。
7 * そのため、このコードは実際のWebページでは機能しません。
8 *
9 * システムエンジニアを目指す方が、このようなルールが存在したこと、
10 * そしてその目的を理解するための参考コードとして提供します。
11 * 主な目的は、特定の「ドキュメント」に対して特定のスタイルを「要求」することでした。
12 */
13@document
14  /* 特定のドメインにのみスタイルを適用する場合の例 */
15  domain("example.com"),
16  /* 特定のURLプレフィックス(URLの始まり)を持つページにのみスタイルを適用する場合の例 */
17  url-prefix("https://www.example.com/products/")
18{
19  /*
20   * このブロック内のCSSルールは、上記の条件に一致するドキュメントが
21   * 読み込まれた場合にのみ適用されることを意図していました。
22   */
23  body {
24    /* ドキュメントの背景色を薄い青色に設定 */
25    background-color: #e0f2f7;
26    /* ドキュメントのテキストの色を濃い青色に設定 */
27    color: #004d40;
28    /* ドキュメントのフォントをサンセリフ体に設定 */
29    font-family: 'Roboto', sans-serif;
30  }
31
32  h1 {
33    /* h1要素のテキストを中央揃えにする */
34    text-align: center;
35    /* h1要素のテキストの色をさらに濃い青色に設定 */
36    color: #002d33;
37    /* h1要素の下部に太い線を引く */
38    border-bottom: 2px solid #002d33;
39    padding-bottom: 10px;
40  }
41}

CSSの@documentは、特定のドメインやURL、または正規表現に一致するウェブページ(ドキュメント)に対してのみ、その内部に記述されたCSSのスタイルルールを適用することを目的としたアットルールです。このルール自体に渡す引数や、何らかの値を返す戻り値はありません。

しかしながら、この@documentルールは、現在主要なウェブブラウザではサポートされていません。かつて提案されましたが、ブラウザベンダーによる実装が見送られ、W3Cの勧告からも削除されました。そのため、このサンプルコードを実際のウェブページで使用しても、記述されたスタイルが適用されることはありません。システムエンジニアを目指す方々には、過去に特定の条件に基づいてスタイルを適用するというこのようなルールが存在し、その目的がどのようなものであったかを理解するための参考として提供しています。

サンプルコードでは、domain("example.com")と記述することで「example.com」ドメインのページに、url-prefix("https://www.example.com/products/")と記述することで特定のURLで始まるページにスタイルを適用する例を示しています。これらの条件に一致するドキュメントが読み込まれた場合に、ブロック内に記述されたbodyh1要素に対する背景色、文字色、配置などのCSSルールが適用されることを意図していました。これは、特定の「ドキュメント」に対して「要求」に応じたスタイルを柔軟に適用するための仕組みでした。

@documentルールは、現在、主要なブラウザではサポートされていません。そのため、このサンプルコードを実際のWebページに適用しても、記述されたスタイルは機能しませんのでご注意ください。

かつては特定のURLやドメインに限定してCSSルールを適用する目的で提案されましたが、ブラウザベンダーによる実装が見送られ、W3Cの勧告からも削除されました。システムエンジニアを目指す方には、このような機能が過去に検討され、特定の「ドキュメント」に対してスタイルを「要求」するという発想があったことを理解するための学習材料としてご活用いただくのが適切です。実際のWeb開発で利用するものではありません。

関連コンテンツ

関連IT用語