単語の折り返し処理
折り返し?
ホワイトスペース, ハイフン, クエスチョンマークなどが代表的な区切り
基本は単語区切りで折り返す、長いテキストは折り返さない(折り返せない)
レイアウトやデザインが崩れるので、奇麗に折り返したい
長いテキストも折り返えす
3つのプロパティ
word-break
改行に関する禁則処理の方法を指定する
IE | Chrome | Safari | Firefox | |
---|---|---|---|---|
normal, break-all | ||||
keep-all |
normal | デフォルト、単語中は改行されない(CJKの単語には適用されない) |
break-all | 単語中でも改行する(CJKの単語には適用されない) |
keep-all | CJKの単語も含めて単語中は改行されない |
break-all を指定すると "consectetuer" が改行されています
keep-all は対応ブラウザが少ないのと、単語の解釈が難しいのでまだ実用的はないかなと
word-wrap (overflow-wrap)
文字列が長すぎてボックス要素に収まらない場合、単語の途中での改行を行うかどうかを指定する
IEの拡張プロパティ、現在の草案では overflow-wrap に改名されているので注意が必要
IE | Chrome | Safari | Firefox | |
---|---|---|---|---|
normal | デフォルト、単語の分割位置でのみ改行する |
break-word | 文字列が長く、ボックス要素に収まらない場合、単語の途中での改行する |
break-word を指定すると "consectetuer" は改行されず、URLのみ改行されます
hyphens
ブラウザが改行候補位置をどのように処理するかを指定する
改行候補位置とはテキスト中で改行が可能な位置をハイフン(­)などを利用して指定した位置
IE | Chrome | Safari | Firefox | |
---|---|---|---|---|
ベンダープレフィックスが必要 | 10~ |
none | 改行候補位置があっても改行されない |
manual | 改行候補位置でのみ改行される |
auto | lang 属性で指定された言語により、ブラウザのハイフネーション規則に従い自動的に単語を改行する。 改行候補位置は、可能であれば改行位置として選択されます。 |
"con­sectetuer" に改行位置を指定 "con­sectetuer", hyphens:manual;
hyphens:manual; では ­ が "-" で表示され改行されます
hyphens:none; では ­ は何も表示されす、単語中は改行されません
上手く折り返されない?
文字列が長すぎてボックス要素に収まらない...とあるようにボックス要素の横幅が折り返しの基準になります
inline-block や table-cell要素は、内容によりの幅が決まることがあるので、 "ボックス要素に収まらない" という判断ができなく、折り返しされないように見えることがあります
width や max-width プロパティを利用して auto 以外の値、ボックスの最大の幅を指定すると折り返されるようになると思います
何で折り返される?
IE では、word-wrap: break-word が指定(継承)されていると white-space: nowrap; text-overflow: ellipsis; が効きかず折り返されてしまいます
その場合 word-wrap: normal; を指定すると省略表示されるようになると思います
word-break: break-word;?
Compass Mixins word-break("break-all") の出力
break-word は標準の値ではありません、元は webkit 向けのものです
Firefox の折り返し(デフォルトで自動折り返しがある)をハックするための指定みたいです
まとめ
- overflow-wrap(word-wrap), break-word, hyphens どれもまだ草案なので w3c を watch してましょう
- Compass 使えるなら Mixins word-break(value) 使え
- @include word-break(value) 使いたくないなら 自分で placeholder selector 作れ
- 細かいこと気にしないなら word-wrap: break-word; だけでいいんじゃない
参考
- http://www.w3.org/TR/2011/WD-css3-text-20110215/#word-break
- http://www.w3.org/TR/2011/WD-css3-text-20110215/#word-wrap
- http://www.w3.org/TR/2011/WD-css3-text-20110215/#hyphens
- http://dev.w3.org/csswg/css-text/#word-break-property
- http://dev.w3.org/csswg/css-text/#overflow-wrap-property
- http://dev.w3.org/csswg/css-text/#hyphens-property