HTML講座

手打ちのHTML講座その7~フレーム編その1~

どうもこんばんは!

今回はフレームについて説明していきましょう。

1.フレームってなーんだ?

フレームとは画面を上下(あるいは左右)に分割し、1つの画面に2つ以上のページを表示するものです。
タブブラウザで複数のタブを並べて表示したもの、といえばわかりますでしょうか?

文章で説明するよりも実際に見た方が早いと思ったので、予めフレームを使用した模擬的なホームページを用意しておきました。

https://lightning-web.com/html/frame/test.html

これがフレームを利用したページです。
間に縦に線が入っていて、その線を境目に左右にページが分かれているのがわかりますでしょうか?

そして左側のリンクを押すと、右側のページだけが変わります。
(「押すとバグる」はとりあえず無視してください)

ではいつものようにこのフレームページを表示するためのHTMLタグから

<frameset cols="20%, 80%">
<frame src="01.html" name="left">
<frame src="02.html" name="right">
</frameset>
<noframes>
このページはフレーム対応のブラウザでご覧ください。
</noframes>

これだけです。非常にシンプルですね。
では順番に説明していきましょう。

2.<frameset></frameset>画面を分割する

<frameset cols="20%, 80%">
<frame src="01.html" name="left">
<frame src="02.html" name="right">
</frameset>

その1からその3にかけてテーブルをやりましたが、その最初と最後には<table></table>というタグを使いましたね。
テーブルは<tr><td>タグがないとテーブルになりませんが、<table>タグもなければテーブルになりませんでした。

今回のフレームも同様です。
この<frameset>がなければ画面を分割することが出来ません

2-1.【属性】横(cols)に分割するか、横(rows)に分割するか

 上で<frameset>は<table>と同様、と書きました。
しかし<table>は何の属性を指定しなくても動きますが
<frameset>は属性を指定しなければ機能しないという違いがあります。

それが画面を縦に分割するか、横に分割するかという属性です。

横に分割するには

<frameset cols="20%, 80%">

縦に分割するには

<frameset rows="20%, 80%">

となります。

それぞれ属性値に「20%, 80%」と入力していますがこれは画面全体を100%として
1つ目に指定するページを画面の20%2つ目に指定するページを80%で表示する、というものです。

この属性を指定しなかったらHTML側は「画面を分割するのは横か縦か、配分はどうするのか」がわからないのだからそりゃ機能しませんよね。

3.<frame> は表示させるページの設定

<frameset cols="20%, 80%">
<frame src="01.html" name="left">
<frame src="02.html" name="right">
</frameset>

<frameset>タグの属性で画面を横(cols)に20%と80%に分割する、と指定しました。
<frame>タグではその20%と80%に分割したフレームそれぞれに何を表示させるかを指定します

2つのページを表示させるために<frame>タグを2つ用意し、そこに表示させるページの設定をするわけです。

重要な属性は「src」と「name」の2つ。
フレームにおいてこの2つの属性はかなり重要です

「src」は表示させたいページのアドレス。
この例だと20%側に01.htmlを、80%側に02.htmlを表示するように指示しているわけです。

そして「name」はその通り名前。
名前の付け方自体は任意ですが、今回は分かり易く左をleft、右をrightとしています。

名前の何が大事なの? と思うかもしれませんので次で説明しましょう。

3-1.【属性】nameの重要さ

<frameset cols="20%, 80%">
<frame src="01.html" name="left">
<frame src="02.html" name="right">
</frameset>

今回左右に分割したフレームは、20%側のフレームに01.htmlを表示させ、名前をleft
80%側のフレームには02.htmlを表示させ、名前をrightと設定しました。

1-1で述べたように画面の分割設定がないとわからないし、表示するページを設定しないと意味がないのはわかるでしょう。

ではnameは何が大事なのでしょうか?

ここで再びサンプルページへと戻ってみましょう。

https://lightning-web.com/html/frame/test.html

「プロフィール」「イラスト」「トップページ」は理想通りに動きます。
しかし「押すとバグる」「押すとバグる2」はどう見ても挙動がおかしいですよね?
これはリンクの貼り方に問題があるからです
01.htmlの記述を少し見てみましょう。

<a href="./profile.html" target="right">プロフィール</a>
<br><a href="./illust.html" target="right">イラスト</a>
<br>メール
<br><a href="./02.html" target="right">トップページ</a>
<br>
<br><a href="./01.html" target="right"><small>押すとバグる</small></a>
<br><a href="./02.html"  ><small>押すとバグる2</small></a>

わざわざこのフレームの講座を見ている人に<a href="">が何なのかなんて説明しなくてもわかると思います。
しかし「target」という属性を使用したことはあまりないでしょう
そんな「target」という属性を今回ほぼすべての<a>タグに使用しています。

3-2.左のフレームにleft、右のフレームにrightと設定した

<frameset>タグ内の<frame>タグのname属性で
ページの左側フレームにはleftという名前を、
右側のフレームにはrightという名前を設定しました。

そして<a>タグの設定した「プロフィール」「イラスト」「トップページ」ではtarget="right"と設定し、リンクをクリックすると
<frame>タグの属性でname="right"と設定した右側のフレームに表示されました。

そしてtarget属性を指定していない「押すとバグる」は本来右側のフレームに表示されるべきもの左のフレームで表示してしまいます。
またtarget="right"と設定した「押すとバグる2」も何故かname="right"である右側のフレームに表示されてしまいます。

3-3.<a>タグにおける属性「target」は表示先

説明せずとも大体わかったとは思いますが、target属性は表示先を意味しています。

<frame>タグで左側はname="left"右側はname="right"と設定しましたので、

上で「target="right"と設定した「押すとバグる2」も何故かname="right"である右側のフレームに表示されてしまいます」と書きましたがなんて事はない、実に正常な動作をしているわけです

そしてtarget属性を指定していない「押すとバグる」は自身が今表示されているページ(この場合name="left")に表示しているのです。

4.noframesは要らないのでは

<noframes>
このページはフレーム対応のブラウザでご覧ください。
</noframes>

さて、<noframes>ですがこれはもう、見ての通りフレーム対応していないブラウザで使うものですが、
今時フレーム対応していないブラウザもないでしょう。

ただし今後フレーム対応しないブラウザが出てくる可能性もないことはありません
というのもHTML5(HTML記述の最新バージョンと思ってください)において
ここまで説明してきた<frameset>自体が廃止されたためです。

5.<frameset>の注意点

さて、<frameset>タグについての説明は以上で終了です。
しかしこのタグを使う上で注意しておくことがあります。

それは原則他のHTMLタグ及びページの文章(bodyで記述するもの)と共存できないことです。
基本的にHTMLタグは記述のあるページに表示する為のものですが、<frameset>は他のページを呼び出す為のものです。
ですので<frameset>の後に色々書いてもその記述部分は表示されませんし、
一方で色々記述した後で<frameset>を記述しても今度はフレームは表示されません

<body></body>があると<frameset></frameset>は機能せず、
<frameset></frameset>があると<body></body>は機能しません。

 

さて、今回はこんなところで。
次回は何も考えていませんのでHTML講座はひと段落でしょうかね。

1

トレーナーからの呼び方については地の文ではフルネームが多いので、声に出す際の愛称があればそちらを優先して記載します

-HTML講座
-,