カクヨムでの縦組み表示の実装と、
縦書きWebの将来に向けて

自己紹介

カクヨム

図: カクヨムのトップページ

縦組み表示

図: 横組みでの小説ビューワの表示

図: 小説ビューワの表示設定ダイアログ。「組み方向」を「横組み」と「縦組み」から選べる

図: 縦組みでの小説ビューワの表示

デザイン

縦組みを実現しましょうとなったときに、本文のみを単純に縦にすれば良いのかというと、そうではないと思いました。

(略)

そこで、UIを含めた本文以外の要素もすべて縦にするのはどうか、というのがカクヨムの小説ビューワーにおける提案でした。

縦組みとCSS

html.writingDirection-vertical {
  writing-mode: vertical-rl;
}

図: 文章「Webは27周年 World Wide Web」の縦組みでの表示。「Web」は1文字ずつ縦に積まれ、「27」は縦中横で、「World Wide Web」は横に寝かせて表示される

.tatechuyoko1,
.tetechuyoko2 {
  text-combine-upright: all;
}
<span class="tatechuyoko1">W</span><span class="tatechuyoko1">e</span><span class="tatechuyoko1">b</span><span class="tatechuyoko2">27</span>周年
World Wide Web

縦中横の規則

縦組みWebの歴史

日時表示が横組みになる (IE)

対策

<div role="main">
  <time datetime="..."><span>2018年4月31日</span></time>
</div>

縦に積んだ文字の幅が広がる (IE, Edge)

図: 縦に積まれた「e」「b」の文字が横方向に引き伸ばされている

.tatechuyoko1, 
.tatechuyoko2 {
  text-combine-upright: all;
}
<span class="tatechuyoko1">W</span><span class="tatechuyoko1">e</span><span class="tatechuyoko1">b</span><span class="tatechuyoko2">27</span>周年

対策

_:-ms-lang(x),
.tatechuyoko1 {
  text-combine-upright: none;
  writing-mode: horizontal-tb;
  line-height: 1;
}

JSでのスクロール位置の取得 (IE, Edge)

図: 通常のブラウザのスクロール位置の座標系。初期位置の左上隅が原点であり、水平方向右向きがscrollX、垂直方向下向きがscrollYとなる

図: IE, Edgeのスクロール位置の座標系。初期位置の右上隅が原点であり、垂直方向下向きがscrollX、水平方向左向きがscrollYとなる

対策

let scrollOffset = (scrollX < 0) ? -scrollX : scrollY;

writing-modeを指定する要素 (Firefox, Chrome)

対策

Flexboxが崩れる (Firefox)

対策

固定配置要素の表示が乱れる (Chrome)

図: サイドバーの後半で他の要素の内容が重なっている

対策

固定配置要素の内容が消える (Chrome)

図: サイドバーの領域に何も表示されていない

対策

図: サイドバーの内容が表示され、その中のヘッダ部分と日時部分の2か所が赤線で囲まれている

横組みにしたときに崩れる (Safari)

対策

html.writingDirection-vertical {
  writing-mode: vertical-rl;
}
html:not(.writingDirection-vertical) {
  writing-mode: horizontal-tb;
}

固定配置要素の内容をスクロールできない (iOS Safari)

図: サイドバーが赤線で囲まれている

対策

マウスホイールでスクロールできない (IE, Chrome, Safari, Firefox)

対策

リリース

ちょっと待って!

未来のために

ブラウザが、自身のバグを見つけ修正できるようにしてやるのは、すべてのWeb開発者にとっての責任です。

John Resig - A Web Developer’s Responsibility

バグ報告の場

バグ報告

新たに報告したバグ

web-platform-tests

ページ内リンクのスクロール位置

まとめ

おまけ

図: FirefoxとThunderbirdの傘

図: IE 8の工具