[2] 本項では [[CSS]] における[[基底URL]]と [[URLの解決]]について扱います。

* 仕様書

[REFS[
- [5] '''[CITE@en[CSS Values and Units Module Level 3]] ([TIME[2013-08-23 23:29:23 +09:00]] 版) <http://dev.w3.org/csswg/css-values/#url>'''
- [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-08-22 05:23:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-style-element>
- [7] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-08-22 05:23:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#dynamic-changes-to-base-urls>
]REFS]

* 基底 URL

[6] [[CSSスタイルシート]]の[[基底URL]]は[[スタイルシート]]自体の[[基底URL]]であって、
参照元の[[文書]]の[[基底URL]]ではありません [SRC[>>5]]。

[3] [[HTML]] [CODE(HTMLe)@en[[[style]]]] [[要素]]の[[スタイル言語]]の[[処理器]]がみつけた [[URL]]
は、[[要素の基底URL]]に対して (あるいは[[スタイル言語]]の規定するところにより) [[解決]]し[['''なければなりません''']] [SRC[>>1]]。

;; [4] [CODE(HTMLa)@en[[[style]]]] [[属性]]その他の埋め込み・参照方法の[[基底URL]]についての規定はありません。

[8] [CODE(HTMLe)@en[[[style]]]] [[要素]]や [CODE(HTMLa)@en[[[style]]]] [[属性]]は[[基底URL変更の影響]]を受けません [SRC[>>7]]。

[EG[
[9] 例えば [CODE(DOMm)@en[[[pushState]]]] によって[[文書基底URL]]が変化しても、それ以前からあった 
[CODE(HTMLe)@en[[[style]]]] [[要素]]の[[スタイルシート]]の[[基底URL]]は変化しません。
その後、たとえば [CODE(HTMLe)@en[[[style]]]] [[要素]]の [CODE(DOMa)@en[[[textContent]]]]
[[属性]]に値を設定すると、新しい[[基底URL]]で改めて[[スタイルシート]]が評価されるため、
新しい[[基底URL]]に変化します。
]EG]

[10] >>5 によれば [CODE@en[[[<url>]]]] の[[指定値]]は元の値、[[算出値]]は[[解決]]した値ということになっていますが、
[[Chrome]] の [[CSSOM]] に現れるのは[[解決]]した値です
([[Firefox]] と [[WinIE9]] では元の値)。[[構文解析]]の時点で[[絶対URL]]に[[解決]]されているものと思われます。 [TIME[2013-08-26T02:55:12.700Z]]

[11] [[Chrome]] も [[Firefox]] も、 [CODE(HTMLe)@en[[[style]]]] [[要素]]から作られた[[スタイルシート]]は作成時点での[[要素]]の[[基底URL]]をコピーしていて、
その後変化しても追随しないようです。一方 [CODE(HTMLa)@en[[[style]]]] [[属性]]は[[基底URL]]を持っておらず、
値を設定するとその時点での[[要素]]の[[基底URL]]を使って[[解決]]し、[[解決]]済みの値は[[基底URL]]が変わっても保持し続けるようです。
[TIME[2013-08-26T03:00:50.000Z]]

[12] [CODE(CSS)@en[[[@import]]]] では [[URL]] は構文に関わらず [[Chrome]] でも [[Firefox]]
でも元々の値が [[CSSOM]] に現れます。