[3]
:[[局所名]]:[CODE(HTMLe)[frameset]]
:[[名前空間名]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]]
:[[開始タグ]]:必須
:[[終了タグ]]:必須
:出現できる文脈:[CODE(HTMLe)[[[html]]]] の子供で [CODE(HTMLe)[[[head]]]] の後
:[[内容模型]]:[CODE(SGML)[([CODE(HTMLe)[frameset]] | [CODE(HTMLe)[[[frame]]]])+, [CODE(HTMLe)[[[noframes]]]]?]]
:[[属性]]:
,属性名,属性値,既定値,説明,状態,出典
,[CODE(HTMLa)[[[border]]]],,,境界線,非標準
,[CODE(HTMLa)[[[bordercolor]]]],,,境界線色,非標準
,[CODE(HTMLa)[[[class]]]],,(なし),級,[HTML 4] [CODE(SGML)[%[[coreattrs]]]]
,[CODE(HTMLa)[[[cols]]]],[CODE(SGML)[%[[MultiLengths]]]],[CODE(HTML)[100%]],横分割,[HTML 4] 枠
,[CODE(HTMLa)[[[id]]]],[CODE(SGML)[[[ID]]]],(なし),固有識別子,[HTML 4] [CODE(SGML)[%[[coreattrs]]]]
,[CODE(HTMLa)[[[frameborder]]]],,,境界線,非標準
,[CODE(HTMLa)[[[framespacing]]]],,,枠間隔,非標準
,[CODE(HTMLa)[[[layout]]]],,,,非標準
,[CODE(HTMLa)[[[onload]]]],[CODE(SGML)[%[[Script]]]],(なし),読込み時,[HTML 4] 枠
,[CODE(HTMLa)[[[onunload]]]],[CODE(SGML)[%[[Script]]]],(なし),Unload 時,[HTML 4] 枠
,[CODE(HTMLa)[[[rows]]]],[CODE(SGML)[%[[MultiLengths]]]],[CODE(HTML)[100%]],縦分割,[HTML 4] 枠
,[CODE(HTMLa)[[[style]]]],[CODE(SGML)[%[[StyleSheet]]]],(なし),スタイル,[HTML 4] [CODE(SGML)[%[[coreattrs]]]]
,[CODE(HTMLa)[[[title]]]],[CODE(SGML)[%[[Text]]]],(なし),注釈的題,[HTML 4] [CODE(SGML)[%[[coreattrs]]]]
,[CODE(XMLa)[[[xmlns]]]],[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] 固定,==,[[名前空間名]],W3C 勧告,[[XHTML m12n]]
[CODE(HTMLa)[cols]] と [CODE(HTMLa)[rows]] は、
両方指定しても指定しなくても、一方だけ指定しても構いません。
[[#comment]]
** 出現できる文脈
[4] 通常 [CODE(HTMLe)[[[body]]]] 内に出現する要素は
([CODE(HTMLe)[head]] の弟の) [CODE(HTMLe)[frameset]] より前に現れてはなりません
[SRC[HTML 4 16.2]]。
といってもこれは内容模型的に当たり前のことです。
[[#comment]]
** 内容
[8] [CODE(HTMLe)[frameset]] 要素は枠の配置を定義しますが、
実際のその枠の名前や初期状態などは、 [CODE(HTMLe)[[[frame]]]]
要素を使って定義します。更に分割する際には [CODE(HTMLe)[noframes]]
を入れ子に使います。
[CODE(HTMLe)[frame]] や [CODE(HTMLe)[noframes]] は、
[CODE(HTMLa)[rows]] と [CODE(HTMLa)[cols]] によって定義した枠1つに対応します。
[[文書順]]に、1行1列, 1行2列, ..., 1行[VAR[n]]列,
2行1列, 2行2列, ..., 2行[VAR[n]] 列, ...,
[VAR[n]]行1列, [VAR[n]]行2列, ..., [VAR[n]]行[VAR[n]]列と対応します。
[SRC[HTML 4 16.2.1.1]]
[9]
また、枠に対応していない UA や枠を使わない設定の場合などのために、
[CODE(HTMLe)[[[noframes]]]] 要素で[[代替内容]]を記述しておくべきです。
[[#comment]]
** フレーム集合の状態
[11] [CODE(HTMLe)[frameset]] 要素の内容や属性が定義するのは、
フレーム集合の初期状態に過ぎません。フレーム集合の内容は、
利用者の操作 (リンクを辿るとか、枠の大きさを変えるとか)
によって変更され得ます。 (但し、フレーム集合定義は不変です。)
[SRC[HTML 4 16.3 Note]]
[12]
フレーム集合の初期状態は、フレーム集合定義文書そのものとして
[[URI]] で表現可能ですが、変更されたフレーム集合のある状態はそうではありません。
[SRC[HTML 4 16.3 Note]]
この URI で表現できないという問題は、フレームの大きな欠点の一つとしてしばしばとりあげられます。
[13]
この問題の解決策は幾つか提示されてきました。
著者側での解決方法の一つは、
想定される組合せだけフレーム集合文書を用意しておくというものですが、
これはフレームの利点を殺すようなものです。
また、 URI の [CODE(ABNF)[[[query]]]] などを利用して、
フレーム集合文書を機械的に用意するという方法も行われています。
(鯖側で [[CGI]] や同種の仕組みを使って実現する他に、
クライアント側スクリプトで [CODE(HTMLa)[[[src]]]]
を書き換えるなど強引な解決方法を採っていることもあります。)
[14] 比較的新しい UA の中には、[[栞]]を挟むときに、
URI とは別にフレームの状態の情報を保存できるものもあります。
また、[[素片識別子]]にフレームの状態を記述すればよいという提案もあります。
HTML のフレームの後継規格である [[XFrames]]
もその方向で策定が進められています。
[15] また、フレームを使うと履歴機能などによる利用者の操作が難しくなるという問題があります
[SRC[HTML 4 16.3 Note]]。
古い実装には、フレーム内でリンクを辿って一部のフレームの状態が変わっても履歴に反映されなかったようなものもありました。
実装・利用経験から少しずつ操作性は改善されていますが、
根本的な解決にはなっていません。
(そもそもは、フレームによって頁移動が非線形になったのに多くの UA
の履歴機能が線形なのが問題です。)
[[#comment]]
** 他との関係
[7] [CODE(HTMLe)[frameset]] 文書の [CODE(HTMLe)[head]]
で [CODE(HTMLe)[[[object]]]] 要素を使って、
子フレーム間でデータを共有することができます [SRC[HTML 4 16.2.1.3]]。
>>6 の例を参照してください。
[[#comment]]
** 例
[5] 入れ子の例 [SRC[HTML 4 16.2.1.2]]
[PRE(HTML)[
]PRE]
この例では、窓全体を横3つにほぼ均等に分け、
左から2つ目をたてに2つに分けています。
[6] フレーム間データ共有の例 [SRC[HTML 4 16.2.1.3]]
[PRE(HTML)[
This is a frameset with OBJECT in the HEAD
]PRE]
利用する側の例:
[PRE(HTML)[
Bianca's page
...the beginning of the document...
...the rest of the document...
]PRE]
実際の文書では、 [SAMP(URI)[bianca.html]]
がフレーム無しで単独で読み込まれることが十二分にあり得ますから、
スクリプト内でその場合の対処を行う必要があります。
[10] フレーム集合文書の例 [SRC[HTML 4 16.1]]
[PRE(HTML)[
A simple frameset document
This frameset document contains:
]PRE]
レンダリング例:
[PRE(HTML)[
---------------------------------------
| | |
| | |
| Frame 1 | |
| | |
| | |
|---------| |
| | Frame 3 |
| | |
| | |
| | |
| Frame 2 | |
| | |
| | |
| | |
| | |
---------------------------------------
]PRE]
[[#comment]]
** メモ
[[#comment]]
* メモ