Insert Caption under Photo

日記に挿入した画像の下にキャプションを入れたかったので、 CSSをいじってみた。 そもそもは img 要素の alt 属性の値として写真の説明を入れたいんだけど。 フォトライフ記法では対応していない。 何となれば、 フォトライフ記法がそのまま alt 属性の値に設定されてしまう。
例えば 「[][f:id:tsntsumi:20090720202337j:image:w160][]」 と記述すると、
ソースに alt="[]f:id:tsntsumi:20090720202337j:image:w160[]" と出力されてしまう。 カーソルを画像の上にロールオーバーするとツールチップが表示されるのでわかるはずだ。 しかしこんなのは、 はてなの開発者のデバッグにはいいかもしれないけれど、 本来の目的であるアクセシビリティから見てどうなんだと思う *1

まずスタイルシートに以下を追加する。

div.figure { margin: 0 1em 0.5em; padding: 0; }
div.section div.figure p {
    margin: 0 0 0.5em; line-height: 100%; text-indent: 0; text-align: center;
    font-style: italic; font-size: smaller; }

そして画像とキャプションを次のように挿入する。

><div class="figure" style="float:right; width:160px; margin-right:0em;"><
[f:id:tsntsumi:20090720202337j:image:w160]
Apple Wireless Mighty Mouse and Batteries
></div><

ここで stylewidth を指定しないとキャプションが長過ぎた時に折り返されないし、 画像サイズよりも小さすぎると画像が切り取られてしまう。

それに <div ...>、</div> の前後を p タグ停止記法の 「>...<」 で囲まないと、 前後に <p></p> が挿入されてしまうので注意。 挿入されても表示上は問題なく思われるが、 タグが入れ子になってしまうので、 ソースをみたときに気持ち悪い。

floatmargin-...style で 指定して、 CSS で指定していないのは float: rightfloat: left を時に応じて指定するため。 これが面倒なら、 CSSdiv.figure-rightdiv.figure-left を定義すればいいんじゃないかな。 例えば

div.figure-right { float: right; margin: 0 0 0 1em; padding: 0; }
div.figure-left { float: left; margin: 0 1em 0 0; padding: 0; }
div.section div.figure p, div.section div.figure-right p, div.section div.figure-left p {
    margin: 0 0 0.5em; line-height: 100%; text-indent: 0; text-align: center;
    font-style: italic; font-size: smaller; }

という感じ。

また、 [f:id:...:image:w160] のサイズを指定せずに、スタイルシート

div.figure img.hatena-fotolife { width: 100%; }

としてもいいのだが、 そうすると RSS を表示した時に画像のサイズが指定されなくなってしまうので、 サイズは指定した方がいいだろう。

*1: 7月26日追記。 調べてみたら、 はてなアイデアで以前から alt 属性をユーザが指定できるよう提案されていたらしい(d:id:masakanou:20080921:p2)。 しかし、却下されてしまっているのが悲しい。