<pre>...</pre> に囲まれたスペースや改行はそのまま出力される。これはソースコードなどを表示する時に便利に使える。しかし、自動改行されなくなってしまうため、ブラウザの表示幅を狭くすると右側にはみ出てしまう。何とか自動改行するようにできないか考える。
通常のブロック要素内容文字列では、改行、空白、タブという空白文字が連続した場合、半角スペース1つに置換される。また、行頭の空白文字は無視される。<pre>...</pre> で囲む pre 要素は、整形済みテキスト(preformatted text)として解釈され、空白文字は置換されずにそのまま出力される。これはソースコードを表示するのに適している。インデントがそのまま反映されるからである。しかし、これを使うことによる欠点もある。ブラウザが自動的に改行してくれなくなってしまうのである。そのため、1行が長いと右側にはみ出てしまう。はみ出すのを防ぐのに横スクロールバーを出すという実装もあるが、気が進まない。
この pre 要素を何とか自動改行できないかを考える。しかし、自動改行しないのは HTML の仕様であるから、無理な話ではある。そこで、「もともと何がしたかったのか」に立ち戻って考えてみると、次のような要件であることに気がついた。
そこで、pre 要素に固執することはやめて、単純なブロック要素で考えることにする。普通のブロック要素であれば自動改行されるからである。
スペースを表示するには、空白文字「 」の他に「 」という文字参照が使える。しかし、「 」を連続させると、1つの長い文字列として認識されてしまうため自動改行されないのである。
散々考えた揚句、最終的にたどり着いたアイデアは、『「 」と「 」を交互に使う』であった。まず、「<pre>」と「</pre>」を「<div>」と「</div>」に置き換え、その内側では次のような表現とする。空白文字である「タブ」は使用しない方がよいとされているので(Another HTML-lint : Explanation: Tab in Pre)、ついでにスペースに変換してしまうことにする。
これは HTML での一般的な書式として有効。あまり見かけないが、予想以上に上手くいく。MovableType なら、プラグインを組み込んでサイト全体を再構築すればよい。
2005年10月30日追記:
プラグインで実装し (nlog(n): PRE 要素変換プラグイン 0.9),解説を書きました (nlog(n): PRE 要素変換プラグイン 0.9 解説)。
Master Archive Index
Total Entry Count: 1957
こんにちは。
ちょっと違うけど、別なアプローチでどうでしょう。
http://www.zakimi.com/archives/2004/06/25/011142.php
見た目は
http://www.zakimi.com/archives/2004/06/25/005649.php
Posted by: zRyu at October 21, 2004 16:23情報ありがとうございました。スクロールバーが出る方法ですね。苦手なんです。このサイトの記事はプラグインで再構築しました。
Posted by: n at October 21, 2004 21:09http://nlogn.ath.cx/archives/000309.html
で見た目の確認ができると思います。