Section 11 : フレーム化(2)

 ここでは,実際にフレームを組んでみる。さらに,どうやってフレームの中に表示するファイルを切り替えるのかについても解説する。

フレームの例

 Section 10 を参考に,次のように <FRAMESET>...</FRAMESET> を書いてみる。

<FRAMESET ROWS="100,*">
  <FRAME NAME="frame1" SRC="header.htm" SCROLLING="no" NORESIZE>
  <FRAMESET COLS="30%,*">
    <FRAME NAME="frame2" SRC="contents.htm">
    <FRAME NAME="frame3" SRC="fr-top.htm">
  </FRAMESET>
  <NOFRAMES>
    <BODY>
      <P>これは,フレーム分割のサンプルです。残念ですが,対応していないブラウザは図で結果をご確認ください。</P>
    </BODY>
  </NOFRAMES>
</FRAMESET>

 この外側にはヘッダが書かれる。

フレーム分割のブラウザ出力例。
図 11.1 [D]

 1 行めの <FRAMESET> では,縦方向に 100 ピクセルと残り全部に 2 分割している。2 行めでその上半分に“frame1”と名前をつけ,内部に“header.htm”というファイルを表示させ,スクロールバーは非表示,フレームのサイズ変更は許さない。

 分割された下半分を,さらに 3 行めの <FRAMESET> で左から 30% とその残り(つまり 70%)とに分割する。左には“frame2”と名前をつけ,“contents.htm”を表示させる。いっぽう,右は“frame3”と名づけ,“fr-top.htm”を表示させる。

 すなわち,まず <FRAMESET ROWS="..."> で縦に分割しておいて,その下部を横方向に分割するために <FRAMESET COLS="..."> を入れ子にして使い,画面を T 字型に 3 分割する。

フレーム内に表示される HTML

 フレーム内に表示させる HTML はふつうの HTML とほとんど変わらないというのははじめに述べたが,“ジャンプ先の文書を指定したフレームに表示させる”という記述を含めることができる。

<A HREF="..." TARGET="...">

 <A HREF="...">...</A> はおなじみのジャンプであるが,ここに追加された TARGET 属性で,<FRAME> の NAME 属性で定義したフレームの名前を入れることにより,“どこにジャンプさせるか”を指定することができる。

 たとえば,先ほどの例で contents.htm に

<A HREF="fr-01.htm" TARGET="frame3">Chapter 1</A>

と書いておくと,“Chapter 1”の句をクリックすることで右下のフレームが fr-01.htm に切り替わる。

 フレーム内には,まったく別のサイトの文書を表示させることも可能である。この状態だと,ジャンプした文書がことごとく自分のフレームの中に収まってしまう。しかし,これは著作権上場の問題が生じる可能性が高いので,避けるべきである。

 ちなみに,フレーム内の HTML が,<FRAMESET> でさらにフレーム分割を行うものでも構わない。

フレームの解除

 ほかのサイトへのジャンプを記述するのにフレームを解除する必要も出てくる。これも <A> の TARGET 属性で記述する。このとき与えるのはフレームの名前でではなく,以下のようなキーワードである。

_top
すべてのフレームを解除する。
_parent
現在のフレームを割っている <FRAMESET> の部分を解除する。先ほどの例では,frame2 でこの記述を行うと frame2 と frame3 が解除され,結果として 2 分割になる。
_self
フレームの解除は行わない。特に“現在のフレーム”を指し示すキーワード。
_blank
フレームの解除は行わないが,新しいウィンドウを開いてそこに表示させることを指示する。

 これらのキーワードが,すべてアンダースコア「_」から始まることに注意してほしい。フレームを解除して非フレームのトップページなどに戻る時は次のようにする。

<A HREF="index.htm" TARGET="_top">トップページに戻る</A>

 外部にリンクを張るときは必要に応じてフレームを解除するのを忘れないようにしたい。フレーム内では表示領域が相対的に小さくなるので文書を見にくくすることもある。

 _blank は,フレーム化されていない HTML 文書でも使うことができる(ただし,厳格な HTML 4.0 では用いない)。

 フレームは,同時に複数の文書を表示できるという利点もある一方,分割に時間がかかったり,同時に複数のファイルを読むため表示に手間どるという短所もある。また,まだフレームに対応していないブラウザもあることを常に気にとめておく必要がある。


◆Summary

 <FRAME> の NAME 属性で名づけておいた名前を,ジャンプの TARGET-属性で指定することによって,そのフレームに新しい文書を表示させる。フレームを解除するときにも TARGET 属性を使う。