フレーム集合

フレーム集合

[1] HTMLframeset 要素型の要素は、 UA の主要窓内の表示の配置を指定します。

代替

[19] 通常の HTML文書iframe 要素フレームを配置できます。 frameset 要素を使う必要はありません。

仕様書

[3]

開始タグ
必須
終了タグ
必須
出現できる文脈
html の子供で head の後
内容模型
(frameset | frame)+, noframes?
属性
属性名属性値既定値説明状態出典
border境界線非標準
bordercolor境界線色非標準
class(なし)[HTML 4] %coreattrs
cols%MultiLengths100%横分割[HTML 4] 枠
idID(なし)固有識別子[HTML 4] %coreattrs
frameborder境界線非標準
framespacing枠間隔非標準
layout非標準
onload%Script(なし)読込み時[HTML 4] 枠
onunload%Script(なし)Unload 時[HTML 4] 枠
rows%MultiLengths100%縦分割[HTML 4] 枠
style%StyleSheet(なし)スタイル[HTML 4] %coreattrs
title%Text(なし)注釈的題[HTML 4] %coreattrs
xmlnshttp://www.w3.org/1999/xhtml 固定名前空間名W3C 勧告XHTML m12n

colsrows は、 両方指定しても指定しなくても、一方だけ指定しても構いません。

出現できる文脈

[4] 通常 body 内に出現する要素は (head の弟の) frameset より前に現れてはなりません HTML 4 16.2

といってもこれは内容模型的に当たり前のことです。

構文

frameset-ok フラグ

[39] frameset-ok フラグを not ok に設定しない body 内の要素開始タグを使うことで、削除される body 要素スクリプトからアクセスできます。

[40] IE9 は frameset-ok フラグを正しく実装していないようで、 in body でどの開始タグでも not ok が設定されるように動作します。

内容

[8] frameset 要素は枠の配置を定義しますが、 実際のその枠の名前や初期状態などは、 frame 要素を使って定義します。更に分割する際には noframes を入れ子に使います。

framenoframes は、 rowscols によって定義した枠1つに対応します。 文書順に、1行1列, 1行2列, ..., 1行n列, 2行1列, 2行2列, ..., 2行n 列, ..., n行1列, n行2列, ..., nn列と対応します。 HTML 4 16.2.1.1

[9] また、枠に対応していない UA や枠を使わない設定の場合などのために、 noframes 要素で代替内容を記述しておくべきです。

[21] 内容中の noframes 要素の位置については、 noframes の項を参照。 (名無しさん [sage])

フレーム集合の状態

[11] frameset 要素の内容や属性が定義するのは、 フレーム集合の初期状態に過ぎません。フレーム集合の内容は、 利用者の操作 (リンクを辿るとか、枠の大きさを変えるとか) によって変更され得ます。 (但し、フレーム集合定義は不変です。) HTML 4 16.3 Note

[12] フレーム集合の初期状態は、フレーム集合定義文書そのものとして URI で表現可能ですが、変更されたフレーム集合のある状態はそうではありません。 HTML 4 16.3 Note

この URI で表現できないという問題は、フレームの大きな欠点の一つとしてしばしばとりあげられます。

[13] この問題の解決策は幾つか提示されてきました。 著者側での解決方法の一つは、 想定される組合せだけフレーム集合文書を用意しておくというものですが、 これはフレームの利点を殺すようなものです。

また、 URI の query などを利用して、 フレーム集合文書を機械的に用意するという方法も行われています。 (鯖側で CGI や同種の仕組みを使って実現する他に、 クライアント側スクリプトで src を書き換えるなど強引な解決方法を採っていることもあります。)

[14] 比較的新しい UA の中には、を挟むときに、 URI とは別にフレームの状態の情報を保存できるものもあります。

また、素片識別子にフレームの状態を記述すればよいという提案もあります。 HTML のフレームの後継規格である XFrames もその方向で策定が進められています。

[15] また、フレームを使うと履歴機能などによる利用者の操作が難しくなるという問題があります HTML 4 16.3 Note

古い実装には、フレーム内でリンクを辿って一部のフレームの状態が変わっても履歴に反映されなかったようなものもありました。 実装・利用経験から少しずつ操作性は改善されていますが、 根本的な解決にはなっていません。

(そもそもは、フレームによって頁移動が非線形になったのに多くの UA の履歴機能が線形なのが問題です。)

関連

[7] frameset 文書の headobject 要素を使って、 子フレーム間でデータを共有することができます HTML 4 16.2.1.3>>6 の例を参照してください。

[37] XFrames には group 要素があり、 frameset 要素と似た役割を果たしています。

[5] 入れ子の例 HTML 4 16.2.1.2

<FRAMESET cols="33%, 33%, 34%">
     ...contents of first frame...
     <FRAMESET rows="40%, 50%">
        ...contents of second frame, first row...
        ...contents of second frame, second row...
     </FRAMESET>
     ...contents of third frame...
</FRAMESET>

この例では、窓全体を横3つにほぼ均等に分け、 左から2つ目をたてに2つに分けています。

[6] フレーム間データ共有の例 HTML 4 16.2.1.3

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>This is a frameset with OBJECT in the HEAD</TITLE>
<!-- This OBJECT is not rendered! -->
<OBJECT id="myobject" data="data.bar"></OBJECT>
</HEAD>
<FRAMESET>
    <FRAME src="bianca.html" name="bianca">
</FRAMESET>
</HTML>

利用する側の例:

<!-- In bianca.html -->
<HTML>
<HEAD>
<TITLE>Bianca's page</TITLE>
</HEAD>
<BODY>
...the beginning of the document...
<P>
<SCRIPT type="text/javascript">
parent.myobject.myproperty
</SCRIPT>
...the rest of the document...
</BODY>
</HTML>

実際の文書では、 bianca.html がフレーム無しで単独で読み込まれることが十二分にあり得ますから、 スクリプト内でその場合の対処を行う必要があります。

[10] フレーム集合文書の例 HTML 4 16.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
<HEAD>
<TITLE>A simple frameset document</TITLE>
</HEAD>
<FRAMESET cols="20%, 80%">
  <FRAMESET rows="100, 200">
      <FRAME src="contents_of_frame1.html">
      <FRAME src="contents_of_frame2.gif">
  </FRAMESET>
  <FRAME src="contents_of_frame3.html">
  <NOFRAMES>
      <P>This frameset document contains:
      <UL>
         <LI><A href="contents_of_frame1.html">Some neat contents</A>
         <LI><IMG src="contents_of_frame2.gif" alt="A neat image">
         <LI><A href="contents_of_frame3.html">Some other neat contents</A>
      </UL>
  </NOFRAMES>
</FRAMESET>
</HTML>

レンダリング例:

 ---------------------------------------
|         |                             |
|         |                             |
| Frame 1 |                             |
|         |                             |
|         |                             |
|---------|                             |
|         |          Frame 3            |
|         |                             |
|         |                             |
|         |                             |
| Frame 2 |                             |
|         |                             |
|         |                             |
|         |                             |
|         |                             |
 ---------------------------------------

[16] NAP勉強会 -- フレームについて考える -- http://www.accessibility.org/workshops/Nov2002/frame.html (名無しさん [sage])

[17] 05/10/2003勉強会の記録 http://www.accessibility.org/workshops/May2003/minutes.html

[20] head 内に置いた例

<HTML DIR=LTR>
<HEAD> <!-- saved from url=(0014)about:internet -->
<TITLE>自宅でオフィスでネットワーク</TITLE><FRAMESET  ROWS="*,35">
    <FRAME NAME="body" SRC="connected_multiple.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="auto" FRAMEBORDER="0">
    <FRAME NAME="footer" SRC="footer.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="No" FRAMEBORDER="0">
</frameset></HEAD><BODY></BODY></HTML>

(名無しさん)

メモ

[22] Frame Implementation Notes (2007-02-28 00:35:27 +09:00 版) http://web.archive.org/web/19970613222258/www82.netscape.com/assist/net_sites/frame_implement.html (名無しさん)

[23] KOTOERI-HTML (2006-11-05 06:29:16 +09:00 版) http://www.tcp-ip.or.jp/~h-log/html/HTMLdic.html#frame

フレームを書くときは<BODY>を書かないことに注意!

あと、この文書は frameset最初子要素noframe (sic) にしている。 (名無しさん)

[25] こぶたのラッパ : HTML5でframeが使えなくなったらJavadocはどうなるの? (smilkobuta 著, 2008-03-09 21:55:17 +09:00 版) http://smil.exblog.jp/8063796/ (名無しさん)

[26] こぶたのラッパ : HTML5でもframeを使おう!<解決編> (smilkobuta 著, 2008-03-09 21:56:39 +09:00 版) http://smil.exblog.jp/8079680/ (名無しさん)

[27] >>25 不適合化が何も解決しないといういい例ですね。 (名無しさん 2008-03-09 12:58:51 +00:00)

[28] [JavaHouse-Brewers:6099] # bye (2001-11-24 19:25:59 +09:00 版) http://java-house.jp/ml/archive/j-h-b/006099.html (名無しさん)

[29] >>28 http://suika.fam.cx/~wakaba/-temp/test/html/frame/flow-tag-then-frameset/demo-1.html

[24] HTML5 IRC logs: freenode / #whatwg / 20070823 (2007-08-23 12:02:14 +09:00 版) http://krijnhoetmer.nl/irc-logs/whatwg/20070823#l-181

文書中に現れる要素型の数は正規分布に見えますが、数個のところに不自然な出っ張りがあります。単なるノイズではなく、複数の調査結果に現れています。

この出っ張りは、限られた数の要素型しか使用しないフレーム集合文書に由来するもののようです。 (名無しさん 2007-08-23 03:06:02 +00:00)

[30] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=2702&to=2703

[44] >>28, >>29Hixie に報告したら >>30frameset-ok フラグが導入されました。

[31] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=2986&to=2987

[32] Web Applications 1.0 r5534 Make a second (bogus) <body> reset the frameset-ok flag.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10630 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5533&to=5534

[33] Web Applications 1.0 r5730 Change how <input type=hidden> affects the frameset flag. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5729&to=5730

フレーム集合

[34]

The collection of frames in an XFrames document is referred to as a frameset.

仕様書

メモ

[36] この定義は frames 要素の説明に含まれていますが、 その説明文からは frames 要素フレーム集合との関係は明確になっていません。 HTML要素との関連では、むしろ group 要素の方が frameset 要素に近いように思えます。

[38] Web Applications 1.0 r6663 Fix the <frameset> rendering rule to trigger when 'the body element' is frameset, not just when the second child of the root element is. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6662&to=6663

[18] ISSUE-697/ACTION-1658: Fix glossary entry for "Role". · w3c/aria@9fac811 ( 版) https://github.com/w3c/aria/commit/9fac811f75ad7ef33ef5a704ec06d508c79ba468

[41] Editorial: Cross-reference DOM "child" where appropriate in rendering (zcorpan著, ) https://github.com/whatwg/html/commit/e8c91c05edc8d6cdb33fdd5452e052359d40490b

[42] ( ()) http://www.jspm.or.jp/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>

<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">

<meta name="GENERATOR" content="JustSystems Homepage Builder Version 17.0.15.0 for Windows">

<meta http-equiv="Content-Style-Type" content="text/css">

<TITLE></TITLE>

</HEAD>

<frameset cols="273,*">

<frame name="left" src="2leftpage.html">

<frame name="right" src="2rightpage.html">

<NOFRAMES>

<BODY>

<P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P>

</BODY>

</NOFRAMES>

</frameset>

</HTML>

[43] [JavaHouse-Brewers:51219] 重要 メールアドレス 変更@java-house.etl.go.jp -> @java-house.jp () https://web.archive.org/web/20090210145446/http://java-house.jp/ml/archive/j-h-b/051219.html

<title>[JavaHouse-Brewers:51219] 重要 メールアドレス

変更@java-house.etl.go.jp -&gt;

@java-house.jp</title>

<script language="JavaScript">

<!--

if (window.parent == window) {

document.write("<A NAME=_BODY>")

document.write("<FRAMESET rows='30%,70%'>")

document.write("<FRAME name=Subject src=threads-051200.html#051219>")

document.write("<FRAME name=Article src=051219.html?#_body>")

document.write("</FRAMESET>")

document.write("</A>")

document.write("<NOFRAMES>")

}

// -->

</script>

</head>

<body>

[45] Deprecations and removals in Chrome 69  |  Web  |  Google Developers () https://developers.google.com/web/updates/2018/09/chrome-70-deps-rems