フレームの境界線(border)のデフォルト値と変更方法

古い日本語サイトを閲覧していると、画面を複数の領域に分けるフレーム構成に出会うことがあります。メニュー、本文、案内欄などを別々のHTMLとして読み込む仕組みで、境界線が表示されるかどうか、何ピクセルに見えるかは、HTML属性とブラウザーの解釈によって決まります。

とくにframesetとframeを使ったページでは、CSSだけを修正しても線が消えない場合があります。反対に、iframeや通常のブロック要素では、CSSのborderプロパティが基本になります。両者の違いを把握すると、古いページの見た目を保ちながら境界線を調整できます。

フレーム境界線が生まれる仕組み

フレームページでは、外側の<frameset>がウィンドウを行や列に分割し、その内部の<frame>が各HTML文書を表示します。境界線は、フレーム同士を仕切る分割線としてブラウザーが描画するため、本文側のHTMLにborderを書くだけでは制御できません。

代表的な指定には、frameborder、border、framespacingがあります。frameborderは境界線の表示・非表示を示す属性で、一般的には1で表示、0で非表示です。borderは線の幅をピクセル単位で指定するために使われ、framespacingも古いInternet Explorer系の実装で隙間の幅を調整する目的で利用されました。

ただし、これらは現在のHTML標準では古い仕様に属します。HTML5ではframesetとframeが廃止され、文書構造をCSSで組み立てる方法が推奨されています。古いサイトを修復する場合は、当時の属性を残して互換性を確保するのか、iframeやCSSレイアウトへ移行するのかを先に判断する必要があります。

デフォルト値は一律ではない

「境界線のデフォルト値は何ピクセルか」と尋ねられた場合、すべての環境に共通する一つの答えを出すのは困難です。古いブラウザーでは、framesetに境界線の指定がないと数ピクセル程度の分割線を表示することがありました。実装によっては、線の幅だけでなく、立体的な陰影や余白も加わります。

frameborderを省略したときの挙動も、ブラウザーやDOCTYPE、互換モードによって違います。ある環境では境界線が表示され、別の環境ではほとんど目立たないことがあります。さらに、属性が親のframesetにあるのか、個別のframeにあるのかによって、反映範囲が異なるケースもあります。

一方、CSSのborderには別の考え方があります。border-widthの初期値は通常medium、border-styleの初期値はnoneです。そのため、幅が設定されていてもスタイルがnoneなら線は見えません。border: 1px solid #999;のように幅、種類、色をまとめて指定して初めて、意図した境界線として表示されます。

frameborder属性で線を消す方法

古いフレームページの線を消すには、まずframesetとframeの関係を確認します。単純な構成なら、次のようにframeborder="0"を記述します。

<frameset cols="220,*" frameborder="0" border="0" framespacing="0">
  <frame src="menu.html" frameborder="0">
  <frame src="main.html" frameborder="0">
</frameset>

ここでは、列の境界線を表示しないことに加え、古いブラウザー向けにborder="0"とframespacing="0"も指定しています。現代のブラウザーだけを対象にするなら、すべての属性が必要とは限りません。しかし、文字コードやDOCTYPEが古いサイトでは、複数の指定を併記したほうが表示差を抑えやすいことがあります。

線を残したい場合は、frameborder="1"を使います。ただし、frameborderは細かな色や線種を選ぶ属性ではありません。灰色の実線、点線、二重線などに変えたいときは、フレーム境界そのものではなく、各フレーム内のHTML要素にCSSで線を付ける設計へ切り替えるほうが扱いやすくなります。

なお、frameborder="0"を書いても線が残る場合は、外側のframesetにborderやframespacingが残っていないか、ブラウザーの既定スタイルが影響していないかを確認します。ソース内に複数のframesetがあるページでは、最上位の設定が見た目を左右することもあります。

CSSのborderで見た目を整える

フレーム内部の文書に余白や仕切り線を表示したい場合は、bodyやラッパー要素へCSSを設定します。例えば、本文の左側に細い線を置くなら、次のように指定できます。

html,
body {
  margin: 0;
  padding: 0;
}

.main-content {
  min-height: 100vh;
  border-left: 1px solid #c8c8c8;
  box-sizing: border-box;
}

box-sizing: border-boxを使うと、指定した幅や高さの中に境界線の幅が含まれます。これを指定しない場合、要素の外側へ線の分だけ寸法が加わり、フレーム内で横スクロールが発生することがあります。古い固定幅レイアウトでは、わずか1ピクセルの追加が折り返しや画像のずれにつながるため注意が必要です。

線の太さは1pxや2px、色は16進数やrgb()で明示できます。表示領域をはっきり区切りたいならsolid、控えめな区切りならdottedや淡い色が適しています。境界線だけでなく、outline、box-shadow、背景色の差を使う方法もありますが、要素の寸法に影響を与えたくない場合はoutlineが便利です。

CSS境界線の仕様を確認するときは、境界線の資料のようなリファレンスも役立ちます。実際の画面では、親要素の幅、余白、スクロールバー、画像サイズが複合して見えるため、線そのものの指定とレイアウト全体の計算を分けて調べることが大切です。

iframeでは扱い方が変わる

iframeは、現在でも外部ページや別のHTMLを埋め込む用途で使われます。これは古いframesetとは異なり、通常のHTML要素として配置されるため、境界線はCSSで管理するのが基本です。

<iframe
  src="news.html"
  title="お知らせ"
  class="embedded-page">
</iframe>
.embedded-page {
  display: block;
  width: 100%;
  height: 360px;
  border: 1px solid #aaa;
}

線を完全に消すなら、border: 0;またはborder: none;を指定します。iframeにはブラウザーのユーザーエージェントスタイルシートによって枠が付くことがあるため、HTML属性だけでなくCSSも確認します。display: blockを加えるのは、インライン要素として扱われた際に生じる下側の隙間を避けるためです。

iframeの外側にある親要素にも境界線が付いていると、線が二重に見えることがあります。親のborder、padding、子のborderを開発者ツールで確認し、どの要素が線を描いているのかを特定します。埋め込み先のページを編集できない場合でも、iframe自体の枠線と周囲の余白は親ページ側から調整できます。

古いサイトを修正するときの確認手順

最初に、対象ページがframeset構成なのか、iframe構成なのか、単純なCSSレイアウトなのかを判別します。ブラウザーの開発者ツールでDOMを確認し、ページソースで<frameset>、<frame>、<iframe>、frameborder、framespacingを検索すると早く見つかります。見た目だけで判断すると、画像の縁や背景色を境界線と取り違えることがあります。

次に、外側から内側へ設定を追います。フレーム全体の分割線ならframesetの属性、個別フレームの表示ならframe属性、文書内部の線ならCSSを確認します。CSSでは、ブラウザーの開発者ツールを開き、計算済みスタイルのborder-width、border-style、border-colorを調べます。取り消し線が付いたルールは、別のセレクターや後から読み込まれたCSSに上書きされています。

修正後は、複数のブラウザーと画面幅で確認します。固定幅のフレームは狭い画面で横スクロールを生みやすく、境界線を太くすると本文の表示領域がさらに狭くなります。古い文字コードを使うページでは、線の変更とは無関係に文字化けが起きることもあるため、metaの文字コード、DOCTYPE、相対パスも併せて点検します。

公開当時の表示を保つ必要があるサイトでは、いきなり全面的に書き換えず、まずバックアップを作成して一つの属性だけを変更します。古いHTMLの挙動や表示崩れを共有したい場合は、旧サイトの相談窓口のような関連フォーラムで、ソースの該当部分とブラウザー名を示すと原因を整理しやすくなります。

framesetの境界線はブラウザー依存の部分が大きく、iframeやCSSの枠線とは調整方法が異なります。まず対象となる仕組みを見分け、古い属性で互換性を保つのか、CSS中心の構成へ移すのかを決めてから、幅・色・余白を個別に整えていきましょう。不要な線を消す場合も、frameborder="0"だけで終わらせず、borderとframespacing、親子要素のCSSまで確認すれば、表示環境による差を小さくできます。