<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>石井宏治 &#8211; HTML5Experts.jp</title>
	<atom:link href="/kojii/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>CSSでバーティカルリズムを実現しよう！line-height-stepを使ってみる</title>
		<link>https://html5experts.jp/kojii/24718/</link>
		<pubDate>Tue, 14 Nov 2017 01:00:42 +0000</pubDate>
		<dc:creator><![CDATA[石井宏治]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[line-height-step]]></category>
		<category><![CDATA[バーティカルリズム]]></category>

		<guid isPermaLink="false">/?p=24718</guid>
		<description><![CDATA[「バーティカルリズム」（Vertical Rhythm）と呼ばれるデザイン手法があります。最近は関連記事も増えてきたので聞いたことがある、という方もいらっしゃるかもしれません。日本語本来のタイポグラフィでは「行取り」と呼...]]></description>
				<content:encoded><![CDATA[<p>「バーティカルリズム」（Vertical Rhythm）と呼ばれるデザイン手法があります。最近は関連記事も増えてきたので聞いたことがある、という方もいらっしゃるかもしれません。日本語本来のタイポグラフィでは「行取り」と呼ばれる類似の手法があり、ほぼ全ての印刷物やワープロで使われています。</p>

<p>「行取り」あるいは「バーティカルリズム」とは、要素の配置に一定のリズムを取り入れることで、デザイン上の安定感や、可読性の向上などの効果が見込るデザイン手法です。通常は、本文の行の高さをリズムの単位として、要素間の余白を調整します。ノートの罫線や、原稿用紙をイメージするとわかりやすいと思います。</p>

<div style="text-align: center">
<img src="/wp-content/uploads/2017/11/rhythm-off-1-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-24722" srcset="/wp-content/uploads/2017/11/rhythm-off-1-300x169.png 300w, /wp-content/uploads/2017/11/rhythm-off-1-207x117.png 207w, /wp-content/uploads/2017/11/rhythm-off-1.png 328w" sizes="(max-width: 300px) 100vw, 300px" />
<img src="/wp-content/uploads/2017/11/rhythm-on-300x132.png" alt="" width="300" height="132" class="alignnone size-medium wp-image-24721" srcset="/wp-content/uploads/2017/11/rhythm-on-300x132.png 300w, /wp-content/uploads/2017/11/rhythm-on-207x91.png 207w, /wp-content/uploads/2017/11/rhythm-on.png 328w" sizes="(max-width: 300px) 100vw, 300px" />
</div>

<p>上の例のように、CSSで<code>line-height</code>や<code>margin</code>を適切に設定すれば実現可能ですが、メンテナンスが煩雑になる、レスポンシブにするのが難しい、見出しが複数行になるとうまくいかない、などの課題が残ります。</p>

<p>現在W3Cでは、この問題を改善するために、<code>line-height-step</code>という新しいプロパティを議論しています。まだ異論や技術的課題が残っていますが、Chrome、Edge、Safariは賛同しており、Chromeでは試験運用機能として実装もされています。この記事では、このプロパティを使って、バーティカルリズムを実装する方法について解説します。</p>

<h2>二つのスタイル：強いリズムと弱いリズム</h2>

<p>まずは、どこにどのように適用するかを考えます。「バーティカルリズム」にもメリットとデメリットがあります。メリットとデメリットを理解して、適切に適用する方法を考えてみましょう。</p>

<p>一つ目のメリットは、行や要素が一定の間隔を持つことで、デザイン上の安定感が生まれることです。規則的に並んでいるデザインは、洗練、安定、安心、といった印象を与えます。</p>

<p>二つ目のメリットは、脳が一定のリズムをパターン認識することで、可読性を上げることです。目線が次の行頭に移動する時は、可読性が一番妨げられる時でもあります。脳が次の行頭位置を予測することで、目線の移動を助け、より早く、より楽に読めることで、内容の理解力も高まるとされています。</p>

<p>残念ながら、デメリットもあります。一つ目は、スペースを消費することです。余白を広げて調整するため、適用しない場合と比べて、より広いスペースが必要になります。モバイルでは画面の大きさが限られているため、本文の行の高さの半分をリズムの単位にするなどの工夫もあるようです。</p>

<p>デメリットの二つ目は、余白が一定でなくなることです。これはちょっとわかりにくいので、例を挙げて説明します。</p>

<p>画像や表、引用文、コード、コラムなど、大き目のブロックが入った場合を考えてみます。「バーティカルリズム」を適用するなら、これらのブロックの高さを本文行の高さの整数倍に揃えることになります。雑誌などデザイン重視の印刷物では、通常は画像や表の大きさを調整して揃えますが、Webでは画像のサイズを変えたくないため、余白で調整することになります。この結果、画像が複数ある時に、画像と本文の間の余白が一定にならない、という副作用が生まれます。</p>

<p>二つの画像の間に、一行の本文がある場合がわかりやすいかと思います。</p>

<p><img src="/wp-content/uploads/2017/11/image-space-uneven-300x126.png" alt="" width="300" height="126" class="aligncenter size-medium wp-image-24723" srcset="/wp-content/uploads/2017/11/image-space-uneven-300x126.png 300w, /wp-content/uploads/2017/11/image-space-uneven-207x87.png 207w, /wp-content/uploads/2017/11/image-space-uneven.png 363w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>一定のリズムを作るデザインを心がけているのに、この余白が一定で無いのは残念です。また、大きなブロックをまたいだ場合、上に挙げたメリットは小さくなってしまいます。脳が画像をまたいでパターン認識するのは困難ですし、目線が画像の次の行頭を見つけるのは簡単です。</p>

<p>この点から、大きな画像や表に対しては、画像をリサイズできない場合には「バーティカルリズム」を適用せず、余白を一定にする手法が一般的に使われる、と「<a href="https://www.w3.org/TR/jlreq/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本語組版処理の要件</a>」および、JIS X 4051「日本語文書の行組版方法」では定めています。</p>

<p>W3Cでの議論を見ると、この点が、英語圏由来の「バーティカルリズム」と、日本語本来の「行取り」では大きく違うようで、英語圏由来の「バーティカルリズム」は、余白の調整は断念し、常に適用する場合が多いようです。対して「日本語組版処理の要件」では、<a href="https://www.w3.org/TR/jlreq/ja/#processing_of_gyoudori" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">行取りの処理例</a>は、見出しの説明の中でのみ出てきます。日本語は、文字の高さが一定のため、画像と本文の余白を、英語の場合よりも気にするのかもしれません。</p>

<p>本記事では、適用する場合と、空白を揃える場合の両方のパターンを使って、本文と見出しにのみ適用してみます。</p>

<h2>CSSコーディング</h2>

<p>提案中の <code>line-height-step</code> プロパティを設定すると、行の高さが設定値の倍数になるように切り上げられます。これを使って、CSSを書いてみましょう。便宜上、見出しは <code>&lt;h2&gt;</code> と <code>&lt;h3&gt;</code>、本文は <code>&lt;p&gt;</code>、画像やコラムは <code>&lt;div&gt;</code> タグを使っているとします。</p>

<p><code>line-height-step</code> プロパティはまだChromeの試験運用機能でしか使えないので、まずは <code>@supports</code> で囲みます。ブラウザで表示を確認する場合には、Chromeのアドレスバーに「chrome://flags」と入力し、表示された画面で「Experimental Web Platform features」を有効にしてください。
</p><pre class="crayon-plain-tag">article {
  font-size: 16px;
}

@supports (line-height-step: 1px) {
  article {
    --grid: 24px;
    line-height-step: var(--grid);
  }
}</pre><p></p>

<p>日本語の行間は、フォントサイズの1.5倍から1.8倍くらいが読みやすいとされていますので、ここでは <code>font-size</code> を1.5倍にした <code>24px</code> を基本のリズムとします。この値は他でも使うので、<a href="https://developer.mozilla.org/ja/docs/Web/CSS/Using_CSS_variables" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Custom Properties</a> で定義して、<code>line-height-step</code> プロパティを設定します。</p>

<p>基本のリズムを設定したら、本文の設定をします。
</p><pre class="crayon-plain-tag">article &gt; p {
    line-height: 1.2;
    margin: 0;
  }
  article &gt; p + p {
    margin: var(--grid) 0 0 0;
  }</pre><p> 
<code>line-height-step</code> を使う時には、<code>margin</code> をリズムの整数倍に揃える必要があります。個人的には日本語の段落間の空きはない方が好みなのですが、Webでは空ける場合も多いため、ここでは段落間を一行空きに設定しています。後で出てきますが、margin collapsingが使えない場合があるため、隣接セレクターを使っています。</p>

<p>また、<code>line-height-step</code> が行間を一定に揃えてくれるため、誤って余分な空白が入らないように <code>line-height</code> を小さめに設定しています。通常は問題ありませんが、複数のフォントが使われた時などには、CSSの仕組み上、行間が広がってしまう場合があるためです。</p>

<p>次に、画像や表は適用外とします。<code>margin</code> は見た目を確認しながら適当に設定してください。
</p><pre class="crayon-plain-tag">article &gt; div, article &gt; table {
    line-height-step: 0;
    margin: .2em 1em;
  }</pre><p> 
最後に、見出しを「行取り」で揃えてみましょう。
</p><pre class="crayon-plain-tag">article &gt; h2, article &gt; h3 {
    display: inline-block;
    width: 100%;
    line-height-step: 0;
    line-height: 1.2;
    margin: var(--grid) 0 0 0;
  }</pre><p> 
ちょっとおまじないが出てきました。実は、<code>line-height-step</code> は行の高さを揃えるだけで、ブロックを揃えることができません。ブロックを揃えるための仕様も議論には上がっているのですが、行の議論でもう二年近く経っているので、ブロックの議論や実装は残念ながらまだ先です。このため、現段階でブロックを揃えるには、ブロックを <code>inline-block</code> にして行の中に収め、その行を揃える、という手法を取ります。<code>width</code> は、この <code>inline-block</code> を含む行を幅いっぱいにするためです。</p>

<p>これで <code>&lt;h2&gt;</code> や <code>&lt;h3&gt;</code> の高さは常に <code>24px</code> の倍数になるように上下に余白が入ります。</p>

<p>モバイルなどの狭い画面では、見出しが複数行になる機会もあるので、このブロックの中では <code>line-height-step</code> をオフにし、小さめの <code>line-height</code> を設定します。見出しは、短めで、フォントも大きいので、通常は行間を詰めた方が見やすくなります。</p>

<p>最後に、見出しの上部の空きを、下部の空きより大きくするため、<code>margin-top</code> のみを一行分に設定します。これも好みですが、実際の空きは、「行取り」の調整のためにこれよりも大きくなるため、確認しつつ適切な値を探してみてください。上下の <code>margin</code> の合計値は <code>24px</code> の倍数になるようにする必要があります。また、<code>inline-block</code> にしたため、隣接したブロックとの間でmargin collapsingが働きません。<code>&lt;p&gt;</code> で隣接セレクターを使ったのはこのためです。</p>

<p>これで完成です。試験運用機能を有効にしたChromeで確認できるはずです。<a href="http://kojiishi.github.io/css-rhythm/sample.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">サンプルはこちら</a>にあります。確認が終わったら、試験運用機能は無効に戻しておいてください。</p>

<h2>最後に</h2>

<p>多くの方が、試されて最初に感じるのは「あんまり変わらないね」ということではないかと思います。ほぼすべての日本語ワープロにこの機能が入っていますが、気がついている人は多くはないのではないでしょうか。「行取り」「バーティカルリズム」のみならず、多くのタイポグラフィの改善は、一つ一つは非常に小さな変化ですが、積み重ねることで確実に読みやすくなります。ぜひ、お試しください。</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
