【h2v.js】 バージョン3.4.1 の公開です。

PC版へ 2014年08月31日

縦書きレイアウトを実現するJavaScript・h2v.jsの新しいバージョンです。

スタイルシート・letter-spacingプロパティを適切に処理できるようにしてみました。スタイルに letter-spacingを指定することで、文字の上下間隔を調節することができます。

例えば、下のような具合。

日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。

日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。

日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。

この部分のHTMLソースはこんな感じ。

<!-- 縦書きエリアに適用するスタイル -->
<style>
p.j{text-align:justify;}
.ls1{ letter-spacing:1em; }
.ls10{ letter-spacing:10px;color:red; }
</style>

<!-- 縦書きエリア -->
<div id="tg20140830">
<p class="j">日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。 </p>
<p class="j ls1">日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。</p>
<p class="j">日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、<span class="ls10">国際紛争を解決する手段としては</span>、永久にこれを放棄する。</p>
</div>
<!-- 縦書きエリア ここまで -->

要するに、例えば letter-spacing:1em; を指定してやれば文字間隔が 1em(ひと文字)分空くというわけです。上記の例のように、均等割付 text-align:justify; と併用もできるので、計算誤差や表示誤差といった解決しづらい問題はあるものの、まぁ概ね意図した感じで表示できるのではないかと。

今回のアップデートで変更された点を列記すると…

…と、こんな具合になります。

以前のバージョンをお使いの人は、h2v-min.js・h2v.css などを新しいものと入れ替えるだけで動作します。パラメータなどを特に弄る必要はありません。

2014年8月30日の午後、一瞬だけアップロードされた ver3.4.0 をダウンロードされた人は、すぐさま 3.4.1 にアップデートして下さい。
3.4.0 には「要素の margin / padding を正しく計算できない場合がある」という恥ずかしい不具合が存在しています。お手数をお掛けします。

というわけで、お気づきの点があればご連絡下さい。

関連記事

コメント

tyu

justify + letter-spacing のとき、行最後の文字の下にスペースを空けないという処理はできますか?
読点の追い込みもぶら下げのほうが違和感ないような……?

hillomi2

いつもお世話になっています。
こちらのページ、safariで見ると、縦書きでは、うまくいっていませんが、safariは、対象外でしょうか。
それから、私のホームページでは、古事記の真福寺本をそのままのレイアウトで、出来るだけ書き下そうとしています。古い本なので、各行の文字数が一定ではありません。それで、 letter-spacingだけでもおかげさまでかなり良くなったのですが、justifyと一緒に、あるいはjustifyだけでもっと綺麗にならないかなと思ったのですが、どうもjustifyだけでは、何も変化せず、justify + letter-spacingでは、letter-spacingだけの時と変わりません。
実際には、
p.j{text-align:justify;} .sp015{ letter-spacing:0.15em; }    ・ .sp020{ letter-spacing:0.20em; }    ・

(縦書きエリア)
大梁月踵侠鍾清原大宮昇即天位道軼軒后徳跨周王

經幾年其旨欲滅斯乃邦家經緯王化之鴻基焉故

のように最大行に合わせて、各行にletter-spacingを個別に設定しました。今回justifyを設定したのですが、ほとんど変りません。justifyだけでも、両端揃えということですので、うまくいくのでは、と思ったのですが、それは横書きでもダメです。両端揃えに関する理解が違うのでしょうか。
今のままでも、ある意味十分なのですが、よろしくお願いいたします。

hillomi2からtyzへの返信

tyzさん、ありがとうございます。
解説拝見しました。すごく分かりやすかったです。ありがとうございます。今の方法でやっていきます。

safariの件ですが、OSはWin7 Service Pack 1としか分かりません。Safariは、5.1.7(7534.57.2)です。
みえ方は、第1と、第2段落はまったく同じで、第3段落の赤字部分にletter-spacingが入っていません。横書きではどの段落も、問題ありません。
もし、safariが古かったのでしたら、それが原因でしたら、申し訳ありません。更新はどのブラウザも、相手に任しているので自分から確認しに行っていなかったので。

画像で、メールを送信いたします。

よろしくお願いいたします。

hillomi2

ありがとうございます。hillomi2です。
うまくいきました。ブラウザによってそんな違いがあるとは思っても見ませんでした。


申し訳ありません。お手数をおかけしました。

今後ともよろしくお願いいたします。