<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta name="description" content="Cascading Style Sheets　の Cascade とは順序立てられたリストのスタイルシートという意味から名付けられたもので、スタイルシートが段階的に継承していく働きを表しています。そして、順序立てられたリストの中で記述されている位置やセレクタの違いにより、段階化の順序（スタイル情報が反映される優先順位）は異なります。" />
<meta name="keywords" content="cascade,順序,優先順位,制作者スタイルシート,ユーザースタイルシート,デフォルトスタイルシート,段階化,cascading order" />
<title>段階化の順序 CSS 前提知識</title>
<link rel="stylesheet" type="text/css" href="http://w3g.jp/style/default" /><link rel="alternate" type="application/rss+xml" href="http://w3g.jp/index.xml" title="RSS update information" />
<link rel="alternate" type="application/rss+xml" title="SiteMap" href="http://w3g.jp/sitemap.xml" />
<link rel="start" href="http://w3g.jp/" title="World Wide Web Guide" />
<link rel="contents" href="http://w3g.jp/css/" title="CSS" />
<link rel="index" href="http://w3g.jp/css/guide/" title="前提知識" />
<link rel="prev" href="http://w3g.jp/css/guide/pseudo" title="疑似クラスと疑似要素" />
<link rel="next" href="http://w3g.jp/css/guide/target" title="適用要素" />
<link rev="made" href="mailto:ryo.ueda@gmail.com" />
<script src="/script/jquery" type="text/javascript"></script>
</head>
<body>
<p id="skip"><a href="#information">Go to information</a></p>
<h1>段階化の順序</h1>
<script type="text/javascript" src="/script/adsense"></script>
<p>ユーザーは <a href="../../others/data/user_agent">User Agnet（ユーザーエージェント）</a>の設定で制作者スタイルシート, ユーザースタイルシート, デフォルトスタイルシートの中から好みのレイアウトを選択することができます。<abbr title="User Agent">UA</abbr> の中でも視覚環境のものはデフォルトのスタイルシートを内蔵しており、(X)HTML文書をレンダリング（描画）する際にそのスタイル情報を当てはめています。そして、制作者スタイルシートやユーザースタイルシートは、その UA のデフォルトのスタイルシートを上書きすることができます。どのスタイルシートも<a href="selector">セレクタ</a>と宣言ブロックのルールセットがいくつも並べられた、順序立てられたリストの構成になっています。Cascading Style Sheets の Cascade とは順序立てられたリストのスタイルシートという意味から名付けられたもので、スタイルシートが段階的に継承していく働きを表しています。そして、順序立てられたリストの中で記述されている位置やセレクタの違いにより、段階化の順序（<strong>スタイル情報が反映される優先順位</strong>）は異なってきます。</p>
<h2>3種類のスタイルシートの優先順位</h2>
<p>CSS には制作者スタイルシート, ユーザースタイルシート, デフォルトスタイルシートの3つがあるのが特徴です。視覚環境の <a href="../../others/data/user_agent">UA</a> の環境設定では、どのスタイルシートを文書のレイアウトに当てはめるかを設定することができますが、特に指定がなければデフォルトではユーザスタイルシートよりも制作者スタイルシートの方が優先順位が上で、さらに制作者スタイルシートとユーザースタイルシートは、視覚環境の UA が内蔵しているデフォルトスタイルシートよりも優先順位が高くなります。つまり、3種類のスタイルシートを同時にレイアウトに当てはめた場合、制作者スタイルシート, ユーザースタイルシート, デフォルトスタイルシートの順でそれぞれの指定を上書きして反映します。</p>
<p>たとえば、デフォルトスタイルシートの文字色が <code>black</code> でも、ユーザースタイルシートで <code>white</code> が指定されている場合、デフォルトスタイルシートの <code>black</code> の指定は、ユーザースタイルシートの <code>white</code> の指定によって上書きされます。さらに、そこに制作者が文書内にスタイルシートを組み込んでいて、文字色に <code>red</code> の指定を行っている場合、ユーザースタイルシートの <code>white</code> の指定は、制作者スタイルシートの <code>red</code> の指定によって上書きされ、最終的な文字色は <code>red</code> が反映されることになります。</p>
<h2>スタイルシートの適用タイプによる優先順位</h2>
<p><a href="outline">CSS概論</a>では、CSS のスタイル情報を (X)HTML文書に適用する方法として主な3通りの方法を紹介しましたが、ここではさらに <code>@import</code> を使った方法を紹介します。計4つの方法の中で、スタイルの指定が上書きされる優先順位は次の通りです。</p>
<ol>
<li>適用させる要素に対して、<a href="../../xhtml/dic/style"><code>style</code>属性</a>を追加して直接スタイル情報を指定する（優先順位：最高）</li>
<li>適用させる文書の <code>head</code>要素内に、<a href="../../xhtml/dic/head_style"><code>style</code>要素</a>を使ってスタイル情報を記述する（優先順位：高い）</li>
<li><a href="../../xhtml/dic/link">link要素</a>で (X)HTML文書とスタイルシートのファイルとを連結させる（優先順位：低い）</li>
<li><code>style</code>要素やスタイルシートのファイルの中で <a href="at_rule#import">@import</a> を使って、別のスタイルシートのファイルを参照させる（優先順位：最低）</li>
</ol>
<p>たとえば、<code>link</code>要素で参照した CSSファイルの中に <code>@import</code> でさらに別の CSSファイルを参照しており、そこに <code>body</code>要素型名を<a href="selector">セレクタ</a>に文字色を <code>black</code> に指定していても、<code>link</code>要素で参照した CSSファイルに文字色を <code>white</code> にする指定がある場合、<code>@import</code> で参照した CSSファイルにある <code>black</code> の指定は、<code>link</code>要素で参照した CSSファイルの <code>white</code> の指定によって上書きされます。さらに、文書内に <code>style</code>要素で直接スタイル情報を組み込んでいて、文字色を <code>red</code> に指定している場合、<code>link</code>要素で参照したスタイルシートの <code>white</code> の指定は、<code>style</code>要素内に記述されている <code>red</code> の指定によって上書きされます。そして、さらに <code>body</code>要素に対して直接、<code>style</code>属性で文字色が <code>blue</code> に指定されている場合、<code>style</code>要素内に記述されている <code>red</code> の指定は、<code>body</code>要素に直接指定されている <code>style</code>属性の <code>blue</code> の指定によって上書きされ、当該文書における最終的な文字色は <code>blue</code> が反映されることになります。</p>
<h2>セレクタ（selector）による優先順位</h2>
<p><a href="selector">セレクタ（selector）</a>が具体的であればあるほど、スタイル情報は上書きして反映されます。通常の要素型名だけをセレクタにした場合よりも、特定の要素の子要素としてセレクタにした場合や、<code>class</code>属性や <code>id</code>属性で同じ要素型名でも詳細な区分けが行われたセレクタほど優先順位が高くなります。次の例では、<code>ul</code>要素と <code>li</code>要素は文字色が <code>black</code> になっていますが、<code>ul</code>要素の子要素である <code>li</code>要素に対して <code>red</code> の指定があるため、通常の <code>li</code>要素には <code>red</code> が反映されることになります。また、<code>ex</code> というクラス名で具体化することによって、<code>li.ex</code>要素には <code>green</code> が反映されます。続いて、<code>li</code>要素がつけられていない <code>ex</code> だけのクラス名のセレクタがありますが、<code>li.ex</code> で指定する方が具体的であるため、<code>li.ex</code> の指定が優先して反映されます。ID名の部分も同じで、<code>li#ex</code>要素は <code>maroon</code> が優先して反映されます。</p>
<dl class="sample">
<dt>記述例</dt>
<dd><pre>
ul    { color : black ; }
li    { color : black ; }
ul li { color : red ; }
li.ex { color : green ; }
.ex   { color : blue ; }
li#ex { color : maroon ; }
#ex   { color : gray ; }
......
&lt;ul&gt;
&lt;li&gt;ul li { color : red ; } が反映される&lt;/li&gt;
&lt;li class=&quot;ex&quot;&gt;li.ex { color : green ; } が反映される&lt;/li&gt;
&lt;li id=&quot;ex&quot;&gt;li#ex { color : maroon ; } が反映される&lt;/li&gt;
&lt;/ul&gt;
</pre></dd>
<dt>表示例</dt>
<dd>
<script type="text/javascript" src="../../sample/css/cascading_order.js" charset="utf-8"></script>
<noscript><p>サンプルの参照には JavaScript の設定を有効にしてください。</p></noscript>
</dd>
</dl>
<p>このようにセレクタは具体的であればあるほど、そのセレクタが優先されるのですが、正確には以下の詳細度という値によって決められます。</p>
<ul>
<li>要素に直接指定されている <code>style</code>属性を a とする</li>
<li><a href="selector#ID">IDセレクタ</a>を数え上げて、その数を b とする</li>
<li><a href="selector#Class">クラスセレクタ</a>と<a href="selector#Attribute">属性セレクタ</a>、<a href="pseudo">疑似クラス</a>を数え上げて、その数を c とする</li>
<li>要素型名と<a href="pseudo#first-letter">疑似要素</a>を数え上げて、その数を d とする</li>
</ul>
<p>そして、この a, b, c, d の4つの数を順に連結して詳細度とし、その値が大きいほど優先順位が高くなり、指定は上書きされます。</p>
<pre>
*            {}  /* a=0, b=0, c=0, d=0, 詳細度 =  0000 */
p            {}  /* a=0, b=0, c=0, d=1, 詳細度 =  0001 */
p a          {}  /* a=0, b=0, c=0, d=2, 詳細度 =  0002 */
.class       {}  /* a=0, b=0, c=1, d=0, 詳細度 =  0010 */
p.class      {}  /* a=0, b=0, c=1, d=1, 詳細度 =  0011 */
p a[href]    {}  /* a=0, b=0, c=1, d=2, 詳細度 =  0012 */
a[href]:link {}  /* a=0, b=0, c=2, d=1, 詳細度 =  0021 */
#id          {}  /* a=0, b=1, c=0, d=0, 詳細度 =  0100 */
p#id         {}  /* a=0, b=1, c=0, d=1, 詳細度 =  0101 */
style=&quot;&quot;         /* a=1, b=0, c=0, d=0, 詳細度 =  1000 */
</pre>
<p>これは、CSS2.1 の詳細度であり、現在リリースされている <a href="../../others/data/user_agent">UA</a> で、この通りに正確に計測する UA はまだないようです。<a href="selector#Universal">全称セレクタ</a>の詳細度は 0000 ですが、通常の要素型名だけの指定では上書きされることから多くの UA の実装は 0002 以上で計測しているようです。</p>
<h2>リストの中での位置による優先順位</h2>
<p>Cascading Style Sheets の Cascade とは順序立てられたリストという意味であるように、セレクタと宣言ブロックのルールセットをいくつも並べたリストの中で、同一のセレクタがある場合は、リスト内であとに並べられているものほど優先され、その指定が上書きされます。つまり、リストの中で位置があとになっている指定ほど、優先順位が高くなります。</p>
<pre>
h1 { color : black ; }
h1 { color : red ; }
h1 { color : blue ; }
</pre>
<p>この例では、一番後に記述されている &quot;<code>h1 { color : blue ; }</code>&quot; の指定が優先され、<code>h1</code>要素の文字色は最終的に <code>blue</code> が上書きされて、表示に反映されます。</p>
<h2>強制的に優先順位をあげる「!important」</h2>
<p>セレクタの詳細度による優先順位やスタイル情報を記述したルールセットがいくつも並べられたリストの中での位置における優先順位に関係なく、強制的に指定のスタイル情報を優先させたい場合には、宣言の値（value）をセミコロン（<code>;</code>）で閉じる前の部分に &quot;<code>!important</code>&quot; の文字列を前置します。これをユーザースタイルシートに使うことで、制作者スタイルシートよりも優先させることもできます。</p>
<pre>
ul,li { color : black <em>!important</em>; }
ul li { color : red ; }
li.ex { color : green ; }
.ex   { color : blue ; }
li#ex { color : maroon ; }
#ex   { color : gray ; }
h1 { color : black <em>!important</em>; }
h1 { color : red ; }
h1 { color : blue ; }
</pre>
<p>通常の要素型名だけのセレクタに比べて、詳細度の高い具体的なセレクタになる <code>li.ex</code>要素や <code>li#ex</code>要素が存在しても、また <code>h1</code>要素もセレクタやリストの中での位置に関係なく、どちらも宣言の値に &quot;<code>!important</code>&quot; をもつ <code>black</code> の文字色が強制的に反映されます。ユーザースタイルシートに &quot;<code>!important</code>&quot; を使うことで、制作者スタイルシートで指定されているスタイル情報を上書きすることもできます。</p>
<script type="text/javascript" src="/script/adsense2"></script>
<ul class="link">
<li class="prev"><a href="http://w3g.jp/css/guide/pseudo" rel="prev" accesskey="P">疑似クラスと疑似要素</a><kbd>P</kbd></li>
<li class="gotop"><a href="#skip">Go to top</a></li>
<li class="next"><kbd>N</kbd><a href="http://w3g.jp/css/guide/target" rel="next" accesskey="N">適用要素</a></li>
</ul>
<dl id="information">
<dt>現在位置</dt>
<dd id="location"><ol>
<li class="first"><a href="http://w3g.jp/"><abbr title="World Wide Web Guide">W3G</abbr></a></li>
<li><a href="http://w3g.jp/css/">CSS</a></li>
<li><a href="http://w3g.jp/css/guide/">前提知識</a></li>
<li>段階化の順序</li>
</ol></dd>
<dt>ナビゲーション</dt>
<dd id="nav"><ul><li><a href="/xhtml/">XHTML</a></li><li><a href="/css/" class="selected">CSS</a></li><li><a href="/javascript/">JavaScript</a></li><li><a href="/webstandards/">Web標準</a></li><li><a href="/seo/">SEO</a></li><li><a href="/others/">Others</a></li><li><a href="/blog/">Blog</a></li></ul><address><a href="http://w3g.jp/">World Wide Web Guide</a></address></dd>
<dt class="status">ステータス情報</dt>
<dd><dl>
<dt>作者</dt><dd><a href="/author">上田 遼</a></dd>
<dt>公開</dt><dd><span class="date">2006-01-29T16:30:11+09:00</span></dd>
<dt>更新</dt><dd><span class="date">2008-12-29T04:30:36+09:00</span></dd>
<dt><abbr title="Uniform Resource Identifier">URI</abbr></dt><dd><code class="URI">http://w3g.jp/css/guide/cascading_order</code></dd>
</dl></dd>
<dt>検索</dt>
<dd id="search">
<form action="/srch/msearch.cgi" accept-charset="utf-8"><p>
<input type="text" size="35" name="query" value="" tabindex="1" accesskey="I" />
<kbd>I</kbd>
<input type="submit" value="Search" tabindex="2" accesskey="S" />
<kbd>S</kbd>
<input type="hidden" name="hint" value="ひらがな" />
<input type="hidden" name="index" value="" />
<input type="hidden" name="config" value="" />
</p></form>
</dd>
</dl>
<p class="promotion">直近の制作実績等：<a href="http://www.ohs.ac.jp/">大阪人間科学大学</a> <strong>New!</strong> / <a href="http://www.kun-ei.ac.jp/">大阪薫英女子短期大学</a> <strong>New!</strong> / <a href="https://www.816photo.jp/okuni/">セキスイハイム みんなのお国じまん</a> <strong>New!</strong></p>
<script type="text/javascript" src="/script/count" charset="utf-8"></script>
<script type="text/javascript">
var bid = 3;
var title = 'W3G'
var oid = '198';
var at = 'entry';
</script>
<script type="text/javascript" src="http://w3g.jp/tracking.js"></script>
<noscript>
<img src="http://w3g.jp/tracking/access.php?bid=3&amp;oid=198&amp;at=entry&amp;title=W3G" width="1" height="1" alt="" />
</noscript>
</body>
</html>
