この文書の最新版は「ばけらの HTML リファレンス」に移転しています (FRAMESET, FRAME, NOFRAMES, IFRAME) 。以下の文章は古くなっているかも知れません。
HTML4.0 では、フレーム分割を設定するための特殊な文書型定義が用意されています。それが Frameset DTD で、その HTML を HTML4.0 Frameset と呼びます。
HTML4.0 Frameset は HTML4.0 Transitional とほぼ同じですが、以下のような違いがあります。
フレーム設定に関係ない要素もたくさんありますが、これらは NOFRAMES の中に代替文書を記す時に用いられます。
以下、この Frameset にのみ定義されている要素を紹介します。
フレームの構造を形作る要素……FRAMESET
個々のフレームを定義する要素……FRAME
フレーム非対応環境の代替表示……NOFRAMES
行内フレーム……IFRAME
要素名 | 適用バージョン | 開始タグ | 終了タグ | 分類 | 中身 | |||
---|---|---|---|---|---|---|---|---|
FRAMESET | - | - | - | (4.0) | 必須 | 必須 | HTML か FRAMESET の子要素 | FRAMESET か FRAME を一つ以上と NOFRAMES |
属性 | 適用バージョン | 属性値 | 既定値 | 備考 | |||
---|---|---|---|---|---|---|---|
cols | - | - | - | (4.0) | 長さ比率列挙 | (依存) | 横分割の比率 |
rows | - | - | - | (4.0) | 長さ比率列挙 | (依存) | 縦分割の比率 |
他に指定できる属性……id, class, title, style(中心属性), onload, onunload (イベント) |
HTML4.0Frameset の FramesetDTD においてのみ定義される要素です。フレーム設定文書において BODY 要素の代わりに使われます。rows と cols で縦横にどう分割するかを指定します。
中身は FRAME 要素だけでなく、別の FRAMESET 要素を入れ子にすることもできます。また、NOFRAMES は必須ではありませんが必ず使うようにしましょう。
要素名 | 適用バージョン | 開始タグ | 終了タグ | 分類 | 中身 | |||
---|---|---|---|---|---|---|---|---|
FRAME | - | - | - | (4.0) | 必須 | 禁止 | FRAMESET の子要素 | 空 |
属性 | 適用バージョン | 属性値 | 既定値 | 備考 | |||
---|---|---|---|---|---|---|---|
name | - | - | - | (4.0) | CDATA | (依存) | フレーム枠のターゲット名 |
longdesc | - | - | - | (4.0) | URI | (依存) | 解説文書へのリンク |
src | - | - | - | (4.0) | URI | (依存) | フレーム内に表示する文書 |
noresize | - | - | - | (4.0) | (noresize) | (依存) | サイズ変更を不可に |
scrolling | - | - | - | (4.0) | (auto | yes | no) | auto | スクロールバー表示の有無 |
frameborder | - | - | - | (4.0) | (1 | 0) | 1 | 区切り枠の表示 |
marginwidth | - | - | - | (4.0) | ピクセル数 | (依存) | 左右の余白 |
marginheight | - | - | - | (4.0) | ピクセル数 | (依存) | 上下の余白 |
他に指定できる属性……id, class, title, style(中心属性) |
あるフレーム枠とその表示方法を規定します。src 属性でフレーム内に表示する文書を指定しますが、IMG の src と異なり、この属性は必須ではありません。
FRAME にはその内容が分かるように title 属性をつけてください。また、name 属性には意味の分かる名前を付けるようにして下さい。これらの属性を読み上げることでフレームをリンクとして扱うブラウザが存在するからです。この二つは必須とはされていませんが、必ず指定するようにしましょう。
なお、name 属性の値は CDATA とされていますが、その名前はアルファベットで始まらなければならないとされています。NAME でなく CDATA になっているのは、target 属性の側とのバランスを取るためでしょうか?(target属性には _ ではじまる予約名を指定することもあるので、NAME ではまずいのです。)
noresize 属性は枠を固定してサイズ変更が利かないようにします。が、画面サイズの関係で文書が読みにくい時、ちょっと枠を移動させられると便利です。固定するのは出来る限り避けましょう。
scrolling はスクロールバーの描画有無を指定しますが、これもあまり指定する必要はないでしょう。
frameborder は枠線描画の有無を示します。これは FRAMESET ではなく FRAME の属性で、個々のフレームごとに指定します(FRAMESET にこれを指定することは出来ませんが、ブラウザは独自に対応しているようです)。
marginwidth と marginheight にはフレーム枠と文書との間隔を指定します。単位はピクセルで、1 より大きい値を指定せよ……となっていましたが、正誤表で 0 以上で良いと訂正されています。
要素名 | 適用バージョン | 開始タグ | 終了タグ | 分類 | 中身 | |||
---|---|---|---|---|---|---|---|---|
NOFRAMES | - | - | - | (4.0) | 必須 | 必須 | FRAMESET の子要素 | BODY, ただし NOFRAMES を除く |
固有の属性は特にありません。指定できる属性……id, class, title, style(中心属性), lang, dir(i18n), onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup (イベント)
HTML4.0 Frameset で使われる NOFRAMES は、Transitional の BODY 内で使われる NOFRAMES とは性質が異なります。
この要素は FRAMESET の中で使い、フレームに対応していないブラウザのための代替文書を記します。その中身は、HTML4.0 Transitional の BODY そのものです。NOFRAMES の中に文書本体を丸ごと書くことができるのです。ただし、この中で NOFRAMES 要素を使うことは出来ません。
そもそもフレームに対応していないブラウザでは、<FRAMESET> や <NOFRAMES> が全て無視されて、NOFRAMES の中身が表示されることになります。フレーム機能をオフにしている場合も同様です。
普通は、NOFRAMES の中にはフレーム化した文書へのリンクを作っておきます。たとえばこのように。
<FRAMESET COLS="128,*"> <FRAME src="menu.html" NAME="menu" title="ナビゲーションメニュー" longdesc="../descript/leftframe.html"> <FRAME src="bakera.html" NAME="main" title="メイン画面" longdesc="../descript/rightframe.html"> <NOFRAMES> <BODY> <H1>BakeraNow!</H1> <H2>作家・水無月ばけらのサイト</H2> <UL> <LI><A HREF="menu.html">メニュー</A> <LI><A HREF="bakera.html">Bakera Now! 本文</A> </UL> </BODY> </NOFRAMES> </FRAMESET>
間違っても、「フレームが使えない人は帰って下さい」なんて書かないようにして下さい。
どういうわけか、市販の解説本の多くは、この要素を NOFRAME と解説しています(Sなし)。ついでに言うと、この要素を HTML 直下に書くものと解説している本もたくさんあります。いずれも大嘘ですので気をつけましょう。
文書内にフレーム枠を作る要素です。これは HTML4.0 Transitional でも使うことが出来ます。詳しくはインライン要素 - IFRAME を参照して下さい。