CSSのoverflow-wrapとword-breakの違いを解説!

CSSのoverflow-wrap(旧名word-wrap)とword-breakプロパティは両者ともボックスをはみ出た部分に対して改行を入れるかどうかを制御できますが、両者の違いをサンプルコード付きで解説していきます。

コンテンツ [表示]

  1. 1CSSのoverflow-wrapとword-breakは混乱する
  2. 1.1word-wrapに関して
  3. 2CSSのoverflow-wrapとword-breakの違い
  4. 2.1overflow-wrap
  5. 2.2word-break
  6. 2.3一旦まとめ
  7. 3CSSのword-breakで設定できる値
  8. 3.1word-break: normal;
  9. 3.2word-break: keep-all
  10. 3.3word-break: break-all;
  11. 3.4word-break: break-word;
  12. 4CSSのoverflow-wrapで指定できる値
  13. 4.1overflow-wrap: normal;
  14. 4.2overflow-wrap: break-word;
  15. 5CSSのoverflow-wrapとword-breakを同時指定した場合

CSSのoverflow-wrapとword-breakは混乱する

CSSのoverflow-wrapword-breakword-wrapのような折り返しや改行を制御するプロパティは複数あり、それぞれがどういう意味なのか分かりづらく混乱している方も多いかと思います。

そこで今回はoverflow-wrapword-breakの違いを解説していきたいと思います。

Photo byjamesmarkosborne

word-wrapに関して

まずword-wrapプロパティに関してですが、このプロパティはMicrosoft拡張のプロパティでしたが、標準化と改名がされ、overflow-wrapという名称に変更されています。

overflow-wrapword-wrapは互換性があり、word-wrapでも現在利用可能で、古いブラウザへの対応を行うならむしろword-wrapの方が良い場合もあります。

今回は改名後のoverflow-wrapとして解説していきます。

CSSのoverflow-wrapとword-breakの違い

まずはoverflow-wrapword-breakのそれぞれの目的を見ていきましょう。

  • overflow-wrap: 分割できない文字列がボックスからはみ出る場合に、単語内で分割できるかどうかを指定。
  • word-break: 単語内で分割する方法(または分割するかどうか)を指定。

何ともややこしいですが、もう少し噛み砕いて見ていくと
  • overflow-wrap: ボックスからテキストがはみ出た場合(オーバーフロー時)にどうするか決める
  • word-break: 単語を改行しないとテキストがあふれる場合に改行するか決める
となります。

つまり見ている視点がoverflow-wrapはボックスの視点から見てテキストがあふれた時にどうするか、word-breakはテキストの単語の視点で見てボックスから突き抜けるか改行を入れるか、と別の意味で解釈出来ます。

一旦それぞれを別にして考えて意味を解釈してみましょう。
(厳密よりもわかりやすさ優先で見ていきます)

overflow-wrap

overflow-wrapの解釈
overflow-wrap(旧名word-wrap)はボックスからはみ出た部分をどうするかを決めるプロパティ。

word-break

word-breakの解釈
word-breakは単語がこのままだとはみ出るが、突き抜けるか・改行を入れるかを決めるプロパティ。

一旦まとめ

何ともややこしいoverflow-wrapword-breakですが、両者ともはみ出た場合に改行するかどうかを制御しているプロパティであることは共通です。

ただし、はみ出たと判断するのがボックス視点からかテキストの単語からの視点というところが異なります。

改行を入れるかどうかを指定するのは両者とも可能なため、いずれのプロパティを指定しても単語のはみ出た部分をどうするかは制御することが出来ます。つまりテキストがはみ出ているのを見つけたらoverflow-wrapでもword-breakでも、どちらを使っても解決可能です。

ただプロパティとして別々に存在しているため、overflow-wrapword-breakも同時に指定する事が可能になります。

それでは次の章でそれぞれのプロパティで設定できる値とその挙動を見ていきましょう。

Photo byPexels

CSSのword-breakで設定できる値

word-break: normal;

[日本語・中国語・韓国語の場合]
表示範囲にあわせて改行される。

[英語等]
単語の途中では改行されず、単語の切れ目(スペース区切りなど)で改行される。

つまりサンプルコードで見ると下記となります。

英語の場合は長い単語の場合でも単語の途中で改行が入ることはなく、そのままボックスをはみ出します。

一方で日本語(カタカナ)の場合は単語の途中であっても改行が入り枠内に収まっています。

このword-break: normalはデフォルト値のため、特に何もしていないサイトでは

  • 英単語:ボックス突き抜ける
  • 日本語:ちゃんと改行されて収まっている
という機会を目にする機会が多いかと思います。

word-break: keep-all

言語問わず単語の途中で改行はされず、単語の切れ目で改行される。つまり長い単語であればはみ出ることもある。

word-break: keep-allは言語問わず単語の途中で改行されることはないため、英語であろうが日本語でも単語は改行されず、長い単語はボックスをはみ出します。

word-break: break-all;

言語問わず表示範囲に合わせて改行される。つまり単語の途中でも改行されることがある。

word-break: break-all;が設定されると言語問わずボックスの中に収まるように、単語途中であろうと強制的に改行されます。つまり禁則処理が解除され、単語のどこでも改行される形になります。
※ブラウザによっては禁則処理が残る場合もあり

word-break: break-word;

word-breakのプロパティで紹介する最後の値がbreak-wordですが、上記のサンプルコードではこのプロパティと他のプロパティでの表示を比べてみました。

break-wordは、break-allのように英語・日本語の単語の途中でも改行が入っているのがわかるかと思います。また括弧の始まりが行頭に来ていることからも禁則処理としてはbreak-allより強くword-break: normalに近い性質を持っているようです。

あわせて読みたい
word-break
CSSのword-breakプロパティはテキストが改行しないとボックスからはみ出す際に改行を入れるかどうかを制御するプロパティです。word-breakの構文や使い方をサンプルコード付きで解説します。

CSSのoverflow-wrapで指定できる値

overflow-wrap: normal;

overflow-wrap: normalは初期値で、word-break: normalと同じ挙動です。

英単語では単語の区切り位置でのみ改行されるため、長い単語はボックスを突き抜けます。日本語は単語途中でも改行され、ボックス内に収まります。

overflow-wrap: break-word;

overflow-wrap: break-wordword-break: break-wordと同じ挙動です。可能な限り禁則処理を残しつつ、英語・日本語問わずボックスに収まるように単語途中でも改行が入ります。

あわせて読みたい
overflow-wrap
CSSのoverflow-wrapプロパティはインラインの要素で領域内に収まらない場合に単語の途中で改行するかどうかを制御するプロパティです。構文や使い方をサンプルコード付きで解説します。

CSSのoverflow-wrapとword-breakを同時指定した場合

それでは最後の見ていきたいのがoverflow-wrapword-breakを同時指定するとどうなるのでしょうか?

上記のサンプルコードを見る限り、overflow-wrapであろうとword-breakであろうと単語途中で改行させる値(break-word)があると、改行させるルールが強く働きボックス内に収めようと単語途中で改行が入ります。この時にword-breakkeep-allを指定していてもoverflow-wrapbreak-wordがある場合は効かない事になります。

一方でword-break: keep-alloverflow-wrap: normalの組み合わせではkeep-allの方の設定も有効となり、日本語でも単語の途中で改行されずボックスをはみ出ているのが確認出来ます。

まとめるとword-breakoverflow-wrapの組み合わせで設定しても

  • いずれかで単語途中でも改行させる値(break-●●)があれば、単語途中で改行が入る
  • overflow-wrap側に単語途中で改行させる値がなければ、keep-allなどword-breakのプロパティの値が有効になる
については言えるかと思います。

GeekHive採用サイト

関連記事