* 仕様書

[REFS[
- [18] '''[CITE@en[CSS Positioned Layout Module Level 3]] ([TIME[2013-09-10 13:12:54 +09:00]] 版) <http://dev.w3.org/csswg/css-position/#clip-property>'''
- [19] [CITE@en-US[Quirks Mode Standard]] ([TIME[2013-06-27 10:39:37 +09:00]] 版) <http://quirks.spec.whatwg.org/#the-unitless-length-quirk>
]REFS]

* 実装

[1]
[SAMP(CSS)[clip:rect(0%, 101%, 101%, 0%);]] [PP10]

[2] [CODE(DOMi)@en[Layer]].[CODE(DOMa)@en[[[clip]]]]
,[CODE(DOMa)@en[[[bottom]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])
,[CODE(DOMa)@en[[[height]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])
,[CODE(DOMa)@en[[[left]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])
,[CODE(DOMa)@en[[[right]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])
,[CODE(DOMa)@en[[[top]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])
,[CODE(DOMa)@en[[[width]]]]	,[CODE(DOMi)@en[[[Layer]]]] ([[JavaScript 1.2]])

[3]
[[WinIE 6]] [[構文解析]]:
= 零文字以上の[[空白]]を読み飛ばす。
= 次の[[字句]]が [CODE(CSS)@en[[[IDENT]]]] [CODE(CSS)@en[[[rect]]]]
でなければ、[[宣言]]全体を[[無視]]し、終わり。
== 他の[[特性]]同様、[[大文字]]や[[escape]]や[[注釈]]を途中で使えます。
= 零個以上の[[空白]]を読み飛ばす。
= 次の[[字句]]が [CODE(CSS)[(]] でなければ、[[宣言]]全体を[[無視]]し、
終わり。
== 例によって [CODE(CSS)[(]] は [CODE(CSS)[\(]] でもおk。
== 前後に[[注釈]]があってもおk。
= 零個以上の[[空白]]を読み飛ばす。
= 次の[[字句]]を [CODE(CSS)@en[<[[length]]>]]、
[CODE(CSS)@en[<[[percentage]]>]]、または
[CODE(CSS)@en['[[auto]]']] として解釈を試みる。
== 例によって、 [[CSS 2.1]] の定義ではなく、 [[WinIE]] 
の解釈による。
== [[奇癖モード]]や [CODE(CSS)[[[0]]] の場合には]]
[CODE(CSS)@en[<[[number]]>]] の単位は [CODE(CSS)[[[px]]]]
であったかのように扱われる。
== 解釈可能であれば、4辺にその値を設定する。
== 解釈可能でなければ、[[宣言]]全体を[[無視]]し、終わり。
= 1個以上の[[空白]]を読み飛ばすことができれば:
== 次の[[字句]]を先程同様に解釈を試みる。
=== 解釈可能であれば、左辺・右辺にその値を設定する。
== 1個以上の[[空白]]を読み飛ばすことができれば:
=== 次の[[字句]]を先程同様に解釈を試みる。
==== 解釈可能であれば、下辺にその値を設定する。
=== 零個以上の[[空白]]を読み飛ばす。1個以上の[[空白]]を読み飛ばした場合:
==== 次の[[字句]]を先程同様に解釈を試みる。
===== 解釈可能であれば、
====== 左辺にその値を設定する。
====== 零個以上の[[空白]]を読み飛ばす。
===== 解釈可能でなければ、
====== 次の[[字句]]が [CODE(CSS)[[[)]]]] なら
([CODE(CSS)[\)]] でもおk)、最後の段階へ。
====== そうでなければ、[[宣言]]全体を[[無視]]し、終わり。
= [CODE(CSS)[[[)]]]] ([CODE(CSS)[\)]] でもk) がなければ、
[[宣言]]全体を[[無視]]し、終わり。
= 零個以上の[[空白]]を読み飛ばす。[[特性値]]の末尾でなければ、
[[宣言]]全体を[[無視]]する。終わり。

([[名無しさん]])

[4]
[[WinIE 6]] [[構文解析]]:
= 零文字以上の[[空白]]を読み飛ばす。
= 次の[[字句]]が [CODE(CSS)@en[[[IDENT]]]] [CODE(CSS)@en[[[rect]]]]
でなければ、[[宣言]]全体を[[無視]]し、終わり。
== 他の[[特性]]同様、[[大文字]]や[[escape]]や[[注釈]]を途中で使えます。
= 零個以上の[[空白]]を読み飛ばす。
= 次の[[字句]]が [CODE(CSS)[(]] でなければ、[[宣言]]全体を[[無視]]し、
終わり。
== 例によって [CODE(CSS)[(]] は [CODE(CSS)[\(]] でもおk。
== 前後に[[注釈]]があってもおk。
= 零個以上の[[空白]]を読み飛ばす。
= 次の[[字句]]を [CODE(CSS)@en[<[[length]]>]]、
[CODE(CSS)@en[<[[percentage]]>]]、または
[CODE(CSS)@en['[[auto]]']] として解釈を試みる。
== 例によって、 [[CSS 2.1]] の定義ではなく、 [[WinIE]] 
の解釈による。
== [[奇癖モード]]や [CODE(CSS)[[[0]]] の場合には]]
[CODE(CSS)@en[<[[number]]>]] の単位は [CODE(CSS)[[[px]]]]
であったかのように扱われる。
== 解釈可能であれば、4辺にその値を設定する。
== 解釈可能でなければ、[[宣言]]全体を[[無視]]し、終わり。
= 1個以上の[[空白]]を読み飛ばすことができれば:
== 次の[[字句]]を先程同様に解釈を試みる。
=== 解釈可能であれば、左辺・右辺にその値を設定する。
== 1個以上の[[空白]]を読み飛ばすことができれば:
=== 次の[[字句]]を先程同様に解釈を試みる。
==== 解釈可能であれば、下辺にその値を設定する。
=== 零個以上の[[空白]]を読み飛ばす。1個以上の[[空白]]を読み飛ばした場合:
==== 次の[[字句]]を先程同様に解釈を試みる。
===== 解釈可能であれば、
====== 左辺にその値を設定する。
====== 零個以上の[[空白]]を読み飛ばす。
===== 解釈可能でなければ、
====== 次の[[字句]]が [CODE(CSS)[[[)]]]] なら
([CODE(CSS)[\)]] でもおk)、最後の段階へ。
====== そうでなければ、[[宣言]]全体を[[無視]]し、終わり。
= [CODE(CSS)[[[)]]]] ([CODE(CSS)[\)]] でもk) がなければ、
[[宣言]]全体を[[無視]]し、終わり。
= 零個以上の[[空白]]を読み飛ばす。[[特性値]]の末尾でなければ、
[[宣言]]全体を[[無視]]する。終わり。

([[名無しさん]])

[5]
テスト用
<http://suika.fam.cx/gate/2007/cssom/viewer?c=p%20%7B%0D%0A%20%20clip%3A%20rect(1px%2C%20auto%2C%20-3em%206.77pc)%3B%0D%0A%7D;h=%3Cbutton%20type%3Dbutton%20onclick%3D%22%0D%0A%20%20var%20el%20%3D%20document.getElementsByTagName%20('p')%5B0%5D%3B%0D%0A%20%20d%20%3D%20getComputedStyle%20(el%2C%20null)%3B%0D%0A%20%20w%20(d.clip)%3B%0D%0A%22%3E%3Ccode%3EgetComputedStyle%3C%2Fcode%3E%3C%2Fbutton%3E%20%3Cbutton%20type%3Dbutton%20onclick%3D%22%0D%0A%20%20var%20el%20%3D%20document.getElementsByTagName%20('p')%5B0%5D%3B%0D%0A%20%20d%20%3D%20el.currentStyle%3B%0D%0A%20%20w%20(d.clip)%3B%0D%0A%22%3E%3Ccode%3EcurrentStyle%3C%2Fcode%3E%3C%2Fbutton%3E%0D%0A%3Cp%3Exxxxxxxxxxxxxxx;p=n;x=style-element;i=html-div>
([[名無しさん]])

[6]
[CODE(CSS)@en[[[rect]]()]] の[[引数]]に [CODE(CSS)@en[[[auto]]]] が指定されたときの[[算出値]]は
[[CSS 2.1]] の文面からは不明瞭です。
([[名無しさん]])

[7]
[CODE(CSS)@en[<[[shape]]>]] の説明には算出の方法が載っていますが、
幅や高さの[[算出値]]がどうとかいうよくわからない定義になっています。
[[CSS 2.1]] でいうところの[[特性]]の[[算出値]]は
[CODE(CSS)@en[[[auto]]]] のような計算できない値だったりするので、
[[使用値]]のつもりで書いているのでしょうか。
([[名無しさん]])

[8]
[[Firefox]] 2 [[構文解析]]:
- [[CSS 2.1]] 通り
- [CODE(CSS)@en[[[-moz-initial]]]] が使える
- [[引数]]の区切りには零個以上の[[空白]]、
高々1個の [CODE(CSS)@en[[[,]]]]、
零個以上の[[空白]]の列が使える

([[名無しさん]])

[9]
[[Opera]] 9 [[構文解析]]:
>>8 と同じ ([CODE(CSS)@en[[[-moz-initial]]]] 以外)
([[名無しさん]])

[10]
[[WinIE 6]] [[直列化]]:
他の[[特性]]と同じ感じで。
[[引数]]の[[区切り]]は1 [CODE(charname)@en[[[SPACE]]]]。
([[名無しさん]])

[11]
[[Firefox]] 2 [[直列化]]: 他の[[特性]]と同じ感じで。
[CODE(CSS)@en[[[auto]]]] は
[CODE(CSS)@en[[[rect]]([[auto]], [[auto]], [[auto]], [[auto]])]]
に。
([[名無しさん]])

[12]
[[Opera]] 9 [[直列化]]: 他の[[特性]]と同じ感じで。
([[名無しさん]])

[13]
[[Opera]] 9 [[直列化]]: 他の[[特性]]と同じ感じで。
([[名無しさん]])

[14]
[[Opera]] 9 [[直列化]]: 他の[[特性]]と同じ感じで。
([[名無しさん]])

[15]
[[WinIE 6]] [CODE(DOMa)@en[[[currentStyle]]]]:
[CODE(DOMa)@en[[[clip]]]] は存在しない。
([[名無しさん]])

[16]
[[Firefox]] 2 [CODE(DOMm)@en[[[getCurrentStyle]]]]:
元々 [CODE(CSS)@en[[[auto]]]] や
[CODE(CSS)@en[[[rect]]([[auto]], [[auto]], [[auto]], [[auto]])]]
だったものは [CODE(CSS)@en[[[auto]]]] に。
[CODE(CSS)@en[[[rect]]()]] の[[引数]]は、それぞれの[[算出値]]
([CODE(CSS)@en[[[px]]]]) に
(ここでの [CODE(CSS)@en[[[auto]]]] の[[算出値]]は
[CODE(CSS)@en[[[auto]]]] のまま)。

([[名無しさん]])


[17]
[[Opera]] 9 [CODE(DOMm)@en[[[getComputedStyle]]]]、
[CODE(DOMa)@en[[[currentStyle]]]]:
[CODE(CSS)@en[[[auto]]]] は
[CODE(CSS)@en[[[rect]]([[auto]], [[auto]], [[auto]], [[auto]])]]
と見なした上で、それぞれの[[引数]]について
- [CODE(DOMm)@en[[[getComputedStyle]]]] では[[算出値]]
([CODE(CSS)@en[[[px]]]])、
[CODE(DOMa)@en[[[currentStyle]]]] では[[指定値]]
- ただし、 [CODE(CSS)@en[[[auto]]]] の場合は
[CODE(DOMm)@en[[[getComputedStyle]]]] では
[CODE(CSS)@en[0[[px]]]]、
[CODE(DOMa)@en[[[currentStyle]]]] では
[CODE(CSS)[[[0]]]]。

[20] [CODE(CSS)@en[[[rect()]]]] の中の区切りは [CODE(CSS)[[[,]]]] のほか [[<whitespace>]]
でも良いようですが、 [[CSS3]] でも [[Firefox]] でも [[Chrome]] でも混在は認められていません。 [TIME[2013-09-11T14:25:52.100Z]]

[21] [[Chrome]] でも [[Firefox]] でも、区切りがまったくなしでもいいようです。 [TIME[2013-09-11T14:26:09.000Z]]

[22] [[直列化]]のときに [[Firefox]] は [CODE(CSS)@en[[[,]]]] を補いますが [[Chrome]]
は元のままです。 [TIME[2013-09-11T14:31:06.0Z]]

[23] [CITE[OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 1: OpenDocument Schema]]
([TIME[2011-09-29 13:00:00 +09:00]] 版)
<http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#a20_179fo_clip>