これはなに
CSSの text-wrap
プロパティは、テキストの折返しを制御します。
この text-wrap
プロバティで、Chrome114以降で text-wrap: balance;
がサポートされました。
日本語だけの場合、よしなに調整できることが多いですが、海外に向けた言語対応も行っているサービスの場合、このCSSプロパティが活躍するイメージが持てました。
この記事では、text-wrap: balance;
の挙動を確かめてみたいと思います。
text-wrap: balance;
とは
複数行のテキストがある場合、1行あたりの文字数を同じ文字数になるようにバランスを取ります。
デモ
See the Pen text-wrap: balance by gilly135 (@gilly135) on CodePen.
サポートブラウザ
2023年12月現在では、Can I useを見ると、Safariのサポートが追いついていないようです。
Safariでこの記事を読んでいる方は、きっと上記のデモの text-wrap: balance;
がうまく動作せずに、そのまま文字が流れていると思います。
注意点
6行の制限
text-wrap - CSS: Cascading Style Sheets | MDN を見てみると、行数について記述がありました。
the Chromium implementation uses six wrapped lines or less
どうやら計算コストが高いようです。
Chromiumでは6行以下の折返しがある行に対しのみ使えるようなので、例えば見出し要素 h1, h2, h3, h4, h5, h6
など、一部で利用する方が良さそうです。
バランスを調整しても要素のインラインサイズは変わらない
text-wrap: balance;
で調整されて、見た目上はwidthが縮んでいますが、DevToolsなどのインスペクタで見ると、要素の幅は変わっていません。
CSS テキストの折り返し: バランス | CSS and UI | Chrome for Developers でAdam Argyle氏は、カード内の見出し(または枠線やシャドウが付いたコンテナ)内の見出しでの利用は良くないと言及しています。
white-spaceと競合する
6行の制限でも触れましたが、6行以下の折返しがある行に対しのみ使えます。
なので、 white-space: nowrap;
で文字が折返しが制限されている場合、 text-wrap: balance;
は使えません。
white-space: unset;
などで、折返しの制限を解除する必要があります。