小説用HTML/CSS

基本的に文章ばかりのページを作っておりまして,HTMLの可読性というのはすごく気になるところです.物書き人間はそういう人が多いよね,と勝手に思ったので,私の小説(めっきり二次小説ばかりですが)ページで使っているCSSをちょっと解説します.

デザインの部分は横において,構造的な部分とか可読性でみたCSSの解説になります

テキストをHTMLファイルに仕立てる

書き上げた小説がすでにあるとします.

青空文庫形式のテキスト文書を前提としています.すなわち,

ほかにも決まり事はいろいろありますが,主なところはこんな感じ.

これをHTMLにするわけですが,ルビを使いたいので,XHTML1.1にします.

サンプルとして夢野久作『縊死体』を使います.(サンプルにその文章を使うのが何か間違っている気がする)

<?xml version="1.0" encoding="Shift_JIS"?>
↑文字コードがシフトJISだった場合.私はWindows使いなのでシフトJISのことが多いのですが,たまに欧文の特殊文字がたくさんあったり,特殊な漢字を使ったときはUTF-8にしています.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" dir="ltr">
↑XHTML1.1で和文を書くときの定型文と思ってほぼ間違いありません.
<head>

<title>縊死体</title>

<link rev="made" href="mailto:xxx@foo.com" />
↑ドキュメントの作者を示すもの.慣用的にmailto:でメールアドレスを書くことが多いですが,昨今の状況から見てSPAMが死ぬほど来るようになるのでとてもお薦めできません.hrefの中はトップページのURIを書いておくのが無難だと思います.あるいはHTMLの勧告書を読んでも出てこないので,無くてもいい要素なのかも.
<link rel="contents" href="doc_css.html" />
↑ナビゲーション用のLINK要素.これは真面目に書こうとすると大変だと思います.今はあまり関係ないところなので説明は割愛します.

</head>

<body>

<h1>縊死体</h1>
↑タイトルなので見出しのレベルは一番だろうということで,h1にしています.
<div class="author">夢野久作</div>
↑迷ったのですが,意味づけするとしたらこんなものかと.自分の文章なら書かない事の方が多いでしょう.

<div class="section">
↑これも迷いましたが,敢えて意味づけしておきました.空行をかましたくなった時に必要になるかと.ただ,長いセクションをくくると表示が遅くなるような気はします.
<p> どこかの公園のベンチである。</p>
↑HTMLのp要素はParagraph(段落)のp.だから,文章をHTML化するならばこの書き方が正しいのだろうと.pで挟まないで改行のところでbrを入れている人の方が多いと思いますが.スタイルシートでインデントを制御できることを考えると全角空白を入れたままにするかどうかは難しいところ.空白を取るとしたら,冒頭にかっこが来た場合との区別が必要になります.
<p> 眼の前には一条の噴水が、夕暮の青空高く高くあがっては落ち、あがっては落ちしている。</p>
<p> その噴水の音を聞きながら、私は二三枚の夕刊を拡げ散らしている。そうして、どの新聞を見ても、私が探している記事が見当らないことがわかると、私はニッタリと冷笑しながら、ゴシャゴシャに重ねて押し丸めた。</p>
(中略)
</div>

</body>
</html>

このHTMLだけのファイルがどう見えるかはこちらこの小説は新聞記事が途中にあって,その部分のタグはどうしておこうか困ったのですが,今回の趣旨とはあまり関係のないところで悩んでもしょうがないので,スタイルを既に埋めちゃいました.

段落をpタグで囲んだりルビを処理したりは自動的な部分なので,私はマクロで一気にファイルを作っています.(秀丸エディタでHTMLベタ書きしているもので)

CSSを使う準備

CSSを使ってこのHTMLの見栄えを整えるわけですが,使い回すのが楽なのと,変更した時の簡便性から考えて,別ファイルを読み込む形式にした方がいいと思います.

ので,ヘッダーの部分に<link rel="stylesheet" href="外部スタイルシートのファイル名" type="text/css" />というコードを埋め込みます.

ファイル数が多くなってしまうので,サンプルではHTMLにCSSを直接書いています.

いよいよ整形

読みやすくする

多分,段落をpタグで囲った時の不満は多くのブラウザでその前後に空行が入ることでしょう.とりあえず,p要素のマージンをとってしまいます.
p{ margin: 0px; }マージンを無くした例

見にくくなったねけ〜!!(富山弁)と思った人のために,多くの文字書きがCSSを使うに当たっての最大の利点(と私は思っている),行間調整を追加してみましょう.
p{ margin: 0px; line-height: 2em; }行間を調整した例
だいたいこれで1行空きになります.これで劇的に読みやすくなったかと.

あと,ウィンドウの端と文章との間に隙間があると見やすくなります.
body{ margin-right: 10%; margin-left: 10% }余白を設定した例

節を示すためにその上下との間隔を大きくします.
.section{ margin-top: 3em; margin-bottom: 3em; }
節をくくるdivタグにclass="section"と書いているのはこの空行を設けるためです.あとは,まあ,筆者の名前は右寄せかな,と.
.author{ text-align: right;}セクション上部の空行を設定した例
実は問題点が1つ.それは,この方法だとCSSに対応していないブラウザでは節の始まりが分からないことです.う〜む.

やらないほうがいいこと

これでおしまいなわけで,あとは好きにデザインしていきましょうということになるのですが,その時にやらない方がいいと思う事.

大きさを絶対値で指定する.

文字の大きさを小さめにすると小ぎれいに仕上がるからか,文字の大きさ等を指定する人が多々いるんですが(あるいは作成ソフトが勝手にそうしてしまうのか?),環境によって大きさが変わるのと,読み手が必ずしも目がいいとは限らないので(……),文字の大きさは指定しないでほしい.

指定するのならせめて相対値(パーセント指定や,現在の文字の大きさを基準とするem,exなど)でしてほしい.

背景と文字色が似たような色.

白い背景に薄い灰色など.明度差があまりないページは上品に見えるので,使っている人は多いですけど,長文だと辛い.

色の話をすると,主観によるのかもしれませんが,この頃,背景色が濃い色だと目が辛くなってきました.昔は平気だったのになあ.

やらないほうがいいと分かりつつやっていること

こっから話の雲行きが怪しくなるのですが.(苦笑)

シリアスは文字を明朝(それに類する書体)にしたくなっちゃうんだ.そうするとモニタでは読みにくいのは分かっているんだ.でもする.
body *{ font-family: serif; }文字をセリフ体にした例
書体はブラウザの設定によります.

縦書き

私は縦書きを愛する者です.よって,縦書きにしたい.したがって縦書きにしてみる.

現在,CSSだけで縦書きを実現できるのはIEの5.5以上(およびレンダリングエンジンにそれを使っている物)だけです.

ちなみに,私の常用ブラウザはFirefoxです.したがって,縦書きにしても自分じゃさっぱり恩恵にあずかれません.

さて,縦書きの指定はwriting-modeでやるのですが,これはbody要素には適用できないので,ページ全体をdivで括ってやるしかありません.<div class="story">(bodyの中身全体)</div>等と書き足します.

以下が縦書きのためのスタイルシートの記述.何でそう書くかは,縦ルビなどを参照してください.

body{
 margin-right: 10%;
 margin-left: 10%;
 direction: rtl;
 overflow-x: scroll;
 overflow-y:auto;
}
.story{
 writing-mode:tb-rl;
 direction:ltr;
}

縦書きにした例.(IEの5.5以上で見ないと縦書きにはなりません)

縦書き表示なんですが,主に書き手である人は縦書きにしたがるように思います.特にリアルでも本が好きな人は.が,主に読み手である人にはあまり評判が良くない.まあ,コンピューターの世界は横書き基準で操作性も横書きを想定しているんですから仕方がありません.

よって,縦書きは自己満足と心得ましょう(苦笑).

GeckoでもOperaでもルビ

ルビを使いたいという物書きさんはとても多いと思いますが,ルビに対応しているのはIE5.5以降だけ.

そこで,IE以外でも,CSSでルビを実現してしまおうと,以下のコードをruby.cssとして読ませています.

ruby {
  display:inline-table;
  text-align:center;
  white-space:nowrap;
  text-indent:0;
  margin:0;
  vertical-align:text-bottom;
  line-height:1;
}

ruby>rb{
  display:table-row-group;
  line-height:1.0;
}

ruby>rt{
  display:table-header-group;
  font-size:71%;
  line-height:1.0;
  letter-spacing:0;
}

rp { display:none; }

2008.7.20修正:以前は「曉に死す」の徒書2003年3月16日の記述を利用していたのですが,

ので,いじくっているうちにこうなりました.副産物としてSafariでもルビ表示できました.(Macで見たら表示されてた)

ルビ対応のサンプル

素晴らしくブラウザ依存なので,これも自己満足です.

おまけ

以上をまとめてテンプレートにしたファイル.→doc_css.zip(2KB)

秀丸エディタな人は,プレーンテキストファイルを上述のようなHTMLにするマクロ.→storyto_mac.lzh(4KB/言葉の組み合わせによってはうまく変換しきれません.だいたいはうまくいくはずなので,手動で補完してください)

激しく使う人を選ぶ物ばかりだな.(果たして今時タグをベタ打ちしていて,しかもVailedなHTMLを書きたい物書きがどれだけいるというのだろう?)