HTML文書中の改行文字について

ここでは、HTML文書を書く際に改行文字をどのように入れれば 良いか、および、ブラウザが改行文字をどう扱う (べき) かを説明 します。

Netscape Navigator 4.xをお使いの方へ: ブラウザのバグのため、以下の文章の一部が正しく整形されず、結果として全 く文意の通じなくなる箇所があるようです。Navigator 4.xにはスタイルシー トに関して非常にバグが多いことが知られています。このブラウザをお使いの 方は、ブラウザの設定でスタイルシートを無効にしてご覧ください。(この件 についてご指摘くださったいしの氏に感謝いたします)

読みやすく改行すれば良い

HTML文書の中では――いわゆる「ソース」では――、テキスト ファイルとして読みやすいように適度に改行を入れます。電子メー ルと同じだと考えれば良いでしょう。HTML文書の実体はごく普通の テキストファイルであり、そのことが大きな特長なのですから、テ キストファイルとして読みやすいことを心がけるのが良いのです。 ちなみに筆者がHTML文書を書く際にはEmacsのauto-fill-modeをよ く使っています。

細かいことになりますが、テキストファイルでは1行の長さをど の程度にすれば読みやすいのかについて少々考えておきましょう。

一般的に、日本語の文書では1行を長くても30〜35文字程度に抑 えておくと読みやすくなります。英語の場合は10〜12語を超えない ようにすべきだそうで、1語あたり5文字で換算すると単語間の空白 文字も入れて1行あたり最大72文字程度となります (参考: 奥村晴 彦『LaTeX2ε美文書作成入門』)。日本文字の1文字は画面上で2桁 を占めることが多いので、その場合は1行あたり35文字とすると70 桁になり、これは英文の都合ともよく合致します。ですから、1行 を60〜70桁程度にしておけば日本語でも英語でもおかしくない表示 になります。もちろん、もっと短くしても構いません。

もっとも、HTMLの場合はブラウザで整形して読むことが多いの で (しかしHTMLは本質的にブラウザのためのものではありません)、 あまり神経質になる必要はないでしょう。80桁を超えない程度の適 当なところで改行しておけば結構です。それでも、読みやすさに気 を配っておけば何かと便利だということは覚えておくと良いでしょ う。これは改行の仕方に限ったことではありません。例えば、リス ト (OL要素やUL要素など) の内側を字下げするというのはよくある やり方です。

一方、ウェブブラウザの処理としては、日本語の文字の間の改 行文字を無視するのが正しいやり方です。RFC 2070 (HTMLの国際化) やHTML 4.0の仕様書 でもそういうことになっています。

HTML 2.0 (RFC 1866) では、改行文字は空白文字と同じに扱われるとされてい ました。そうなっていたのは、ラテン文字のことしか考慮されてい なかったからです。このような改行の扱いはあくまでラテン文字に 特化したやり方でしかありません。日本語や中国語のテキストに関 しては改行文字を単に無視するのが適切なやり方です。

念のため付け加えておくと、日本文字の間の改行文字を無視す るというのは、仕様書に書いてあるかどうかという以前に、日本語 文書を整形することを考えれば当然導かれる結論です。

例えば、次のようなテキストを考えます。(例文は夏目漱石『こ ころ』より)

私はその人を常に先生と呼ん
でいた。だから此所でもただ
先生と書くだけで本名は打ち
明けない。

これを、1行の文字数を多くして整形し直すと次のようになるで しょう。

私はその人を常に先生と呼んでいた。だから此所でもただ
先生と書くだけで本名は打ち明けない。

元のテキストでは、1行目の最後から2行目の頭にかけては「呼 ん<改行>で」のようになっています。この改行は文章にとっ てなんら意味を持ちません。ですから整形し直すときには単に無視 すれば良いのです。

英文のように、西洋の文字で書かれたテキストになると話は違 ってきます。(例文はLewis Carroll, Alice's Adventures in Wonderland より)

In another moment down went Alice
after it, never once considering
how in the world she was to get
out again.

先ほどと同じように、行をもっと長くして整形してみましょう。

In another moment down went Alice after it, never once
considering how in the world she was to get out again.

ここで、元のテキストの Aliceafter の間の改行を無視することはできません。こ の改行は単語を分ける働きを持っているからです。このように、改 行文字を見つけたらスペースで置き換えていけば英語の場合はうま くいくことが分かるでしょう。

このような改行文字の扱いは英語や日本語などといった「言語」 によってではなく、文章を表記する文字の体系 (スクリプト) によ って変わってきます。例えば日本語をラテン文字で表記することを 考えれば明らかです。

ウェブが世界中で使われるようになりつつある今、使われてい る文字の種類に応じて改行文字を適切に扱うことはウェブブラウザ の必須条件と言えるかもしれません。改行文字を空白として表示す るのと無視するのと (あるいはまた別な風に扱うのと)、いずれか が普遍的ということはありません。

(日本文字やラテン文字以外についてはまた別な やり方で改行文字を扱わなければならないかもしれませんが、筆者 の知識の範囲を超えるのでここでは触れません)

現在出回っているブラウザには、日本語の文字の間の改行文字 を空白として表示してしまうものも少なくありません。そのような ブラウザの表示結果を見たためか、文や段落が終わるまで改行を入 れずに延々と行を続けている人もいるようです。しかしそのような ことをする必要はありません。ブラウザが改善されるべきなのです。

なお、そのようなブラウザの処理を何かとても難しいことのよ うに思っている人もいますが、基本的には難しいことではありませ ん。何年も前から同様の処理を実現している日本語版TeX (有名な 組版プログラム) が行っていることは、日本文字の直後に続く改行 文字を無視することだけです。

ウェブブラウザとしては、例えばInternet Explorer 4.0が同様 の処理をほぼ実現しています。しかし、タグと改行が連続すると不 要な空白を空けてしまうという欠点があり、まだ少々詰めが甘いよ うです。

タグの中での改行、およびタグの前後の改行

タグの中でも改行することができます。タグの中で空白を入れ られる場所では改行することができ、また、空白を入れてはいけな い場所では改行できません。

属性値としてURLを書くとタグが長くなりがちですが、そのよう な場合は属性名の前で改行しておくと良いでしょう。例えば次のよ うに書きます。

より詳しい情報は、<A
href="http://www.long-name.co.jp/long-path/foo.html"
title="インターネットホームページパソコン・最新情報">
本家のページ</A>をご覧ください。

SGMLの規則により、開始タグの直後、および終了タグの直前に ある改行文字は無視されることになっています (HTML 4.0仕様書、 付録Bの3.1)。この例で言えば「本家」の直前 の改行が無視されるわけです。

以下の例の二通りの書き方は上の規則により等価です。ブラウ ザは全く同じように表示しなければなりません。

1.  <A><IMG></A>

2.  <A>
    <IMG>
    </A>

後者の書き方をすると画像の前後に余計な間隔を空けてしまう ブラウザもあります。そういうブラウザを見つけたら、ブラウザの 作者に報告しておくとバージョンアップの際に改良してもらえるか もしれません。この場合悪いのはHTMLではなくブラウザの方ですか ら、HTML文書の作者には改行を削除せよというような注意をすべき ではありません。

1998年3月8日 初版公開, 1998年3月19日 最終更新 (1999年2月1日 冒頭に注記追加)
矢野啓介 <yano@moon.email.ne.jp>