#?SuikaWiki/0.9
* fieldset 要素型 (HTML, XHTML 1)
[5] [DFN[[CODE(HTMLe)[fieldset]] 要素]]は、
form control や label を集団化します。
集団化すると利用者は control や label
の目的を理解しやすくなります。
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:[[内容模型]] (HTML 4):[CODE(SGML)[([[空白]], [CODE(HTMLe)[[[legend]]]], (%[[flow]])*)]]
:内容模型 (ISO‐HTML):
[CODE(SGML)[(空白, [CODE(HTMLe)[legend]], (%[[block]] | %[[inline]] | [CODE(HTMLe)[[[address]]]])+) −([CODE(HTMLe)[fieldset]])]]
:出現可能文脈:[CODE(SGML)[%[[block]]]] が出現できる場所。
ただし、 [CODE(HTMLe)[[[button]]]] 要素の子孫を除く。
:[[属性]]:
,[CODE(HTMLa)[[[class]]]] , , ,[[級]] ,"[HTML4] %[[coreattr]], [ISO-HTML] %[[core]], [XHTML 1] [[Core]]"
,[CODE(HTMLa)[[[dir]]]] , , ,[[書字方向]] ,"[HTML4] %[[i18n]], [ISO-HTML] %i18n, [XHTML 1] [[Bi-directional Text]]"
,[CODE(HTMLa)[[[id]]]] , , ,一意識別子 ,"[HTML4] %coreattr, [ISO-HTML] %core, [XHTML 1] Core"
,[CODE(HTMLa)[[[lang]]]] , , ,[[自然言語]] ,"[HTML4] %i18n, [ISO-HTML] %i18n"
,[CODE(HTMLa)[[[xml]]:lang]] , , ,自然言語 ,[XHTML 1] [[I18N]]
,[CODE(HTMLa)[[[onclick]]]] , , , ,"[HTML4] %[[events]], [XHTML 1] [[Intrinsic Events]]"
,[CODE(HTMLa)[[[ondblclick]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onkeydown]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onkeypress]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onkeyup]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onmousedown]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onmouseout]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onmousemove]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onmouseover]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[onmouseup]]]] , , , ,"[HTML4] %events, [XHTML 1] Intrinsic Events"
,[CODE(HTMLa)[[[style]]]] , , ,スタイル情報 ,"[HTML4] %coreattr, [XHTML 1] [[Style Attribute]]"
,[CODE(HTMLa)[[[title]]]] , , ,注釈的題 ,"[HTML4] %coreattr, [ISO-HTML] %core, [XHTML 1] Core"
仕様書:
[[#comment]]
** 内容模型
[6] [[HTML 4]] の [[DTD]] では、 [CODE(HTMLe)[fieldset]]
要素型の内容模型は [CODE(SGML)[(#[[PCDATA]], [CODE(HTMLe)[LEGEND]], ([VAR[%flow]])*)]]
とされていますが、注釈で、 [CODE(SGML)[#PCDATA]]
は[[混合内容]]問題を解決するためで、
[[空白]]のみが許される、とされています。
もし内容模型が [CODE(SGML)[([CODE(HTMLe)[legend]], ([VAR[%flow]])*)]]
であったとすると、
[PRE(HTML)[
]PRE]
のように [CODE(HTMLe)[legend]] の開始タグの前に空白がある時に、
(この内容模型は [CODE[[VAR[%flow]]]] 内に [CODE(SGML)[#PCDATA]] が含まれているため、混合内容であり、)
その空白が [CODE(SGML)[#PCDATA]] に該当する[[データ]]とされてしまいます。
しかし、 [CODE(HTMLe)[fieldset]] 要素内にはデータより先に
[CODE(HTMLe)[legend]] 要素が必要ですから、非[[妥当]]にされてしまいます。
この問題には、
- [CODE(HTMLe)[legend]] 要素の開始タグは必ず
[CODE(HTMLe)[fieldset]] 要素の開始タグの直後に書く
(字下げは諦める)
- [CODE(HTMLe)[[[textflow]]]] 要素型や [CODE(HTMLe)[[[bodytext]]]] 要素型のようなダミーを用意する
- [CODE(SGML)[#PCDATA]] を許してしまう
(厳密性を諦める)
の三つの解法があります。 HTML 4 は最終的には三番目の解法を
選択しました。
[7] ところで、 HTML 4 DTD 注釈には
[Q[per specification only whitespace is allowed there]]
と書いてありますけど、仕様書のどこに書いてあるのでしょうか?
(HTML 4 DTD 内の注釈は[RUBYB[参考] [informative]]だし、
心許ないなあ。でも ISO‐HTML の注釈は[RUBYB[規定][normative]]だ。)
[10]
[[XHTML 1]] では、 [[XML]] の制約から、
更に自由な内容模型 [CODE(XML)[(#PCDATA | %[CODE(HTMLe)[legend]].qname; | %[[Flow.mix]];)*]] になってしまっています。
だけど混合内容問題を解決するために〜という注釈は残ったままなので意味不明になっています。 ([CODE(HTMLe)[fieldset]] 内は全く要素か空白しか入れられないように読めてしまう。)
たとえば:
[11]
HTML 4 でも XHTML 1 でも、 [CODE(HTMLe)[form]] 要素の子孫に [CODE(HTMLe)[form]] 要素を入れることはできませんから、 [CODE(HTMLe)[form]] 要素の子孫である [CODE(HTMLe)[fieldset]] 要素の子孫として [CODE(HTMLe)[form]] 要素を入れることはできません。しかし、
[CODE(HTMLe)[form]] 要素の子孫ではない [CODE(HTMLe)[fieldset]] 要素の子孫に [CODE(HTMLe)[form]] 要素を入れることは可能のようです。
[15] ISO‐HTML では [CODE(HTMLe)[fieldset]]
要素の入れ子は禁止されています。
[[#comment]]
** 他の要素型等との関係
[12] [CODE(HTMLe)[[[legend]]]] 要素型は、必ず
[CODE(HTMLe)[fieldset]] 要素型とセットで使用します。
[13] [CODE(HTMLe)[[[input]]]] 要素や
[CODE(HTMLe)[[[button]]]] 要素 ([CODE(HTMLa)[[[type]]]]
が [CODE(HTML)[[[reset]]]]) を [CODE(HTMLe)[fieldset]]
要素内で使用すると、適用範囲 (初期化される範囲)
は [CODE(HTMLe)[fieldset]] 要素内に限定されます。
[14] [CODE(HTMLe)[input]] 要素 ([CODE(HTMLa)[type]]
が [CODE(HTML)[[[file]]]]) は典型的に
[CODE(HTMLe)[fieldset]] により (ブラウザ内部的に)
構造化されると [[ISO-HTML]] 利用者の指針
に書いてあります。
[[#comment]]
** レンダリング
[8] HTML 4 仕様書は、視覚 UA は[[タブ]]付け誘導が可能、
発話 UA は発話誘導が可能だと言っています。
HTML 4 (というか HTML 3 Form) の最初期の草案ではもろにタブをマークする方法も検討されていたこともあったようですが、
最終的にレンダリングに中立な集団化に留まったのでしょう。
しかし、同じ [CODE(HTMLe)[[[form]]]] 内の近隣の
[CODE(HTMLe)[[[fieldset]]]] をまとめてタブ集合として表示する
UA なんて見たことがありません。
[9] [[WinIE]] や [[Gecko]] などは、
[PRE[
+- LEGEND ------------------------+
| Label: Control........ |
| Label: Control........ |
+---------------------------------+
]PRE]
のような既定スタイルを持っています。枠線は“窪み”です。
(Windoze の設定 dialog box などでよくでてくる、
集団化のためのあれと同じ style です。)
[[#comment]]
** メモ
[1]
''地獄変00:blockquoteはもう古い〜fieldsetの伝説(legend)!!''
([[名無しさん]] [WEAK[2004-03-23 02:15:27 +00:00]])
[2]
>>1 は[[引用]]のために (特定 [[UA]] の見た目の理由から) [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[[[legend]]]] を使おうと提案して叩かれた例。
;; 著者が一日でこんなに叩かれましたと出してる URI がほとんど某方面なのが藁える。
([[名無しさん]])
[3]
だけど、 >>1 みたいなことを考える人が出てくるのって、
- [[HTML 3]] の [CODE(HTMLe)[[[credit]]]] や表の [CODE(HTMLe)[[[caption]]]] に相当する要素型が無い
- [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[legend]] の典型的レンダリング(謎)を CSS で気軽に(謎)実現する方法がない
のが原因でしょ。それが解決されない限りまた繰り返されるだろうなあ。
(Form control 以外の集団化・見出し付けのために [CODE(HTMLe)[fieldset]] + [CODE(HTMLe)[legend]] を使うというネタはたしか外出だし。)
[4]
''iCabのぺ〜じ - A氏からの手紙(FIELDSETの扱いについて)''
[[#comment]]
* メモ