📘
cssのwhite-spaceの使い方を整理してみた
はじめに
こちらの記事の続きで、今度はwhite-spaceって何だっけってなってしまった。。
cssのword-breakとoverflow-wrapのどっち使うか迷ったので整理した https://zenn.dev/katoaki/articles/93f6439734129b
ということで、cssで折り返しするかどうかを設定する際に、よくプロパティを忘れてしまうので、整理することにしました。
なお、どう折り返しするかの設定(word-break, overflow-wrap)についてはここでは省きます。
やってみたこと
折り返しに関する仕様の整理
関係するCSSプロパティ
折り返しする・しない、する場合にはみ出したらどうするかに関するCSSプロパティは以下です。
- white-space
- word-break
- overflow-wrap
ここではそもそも折り返しする・しないを設定するwhite-spaceに関してのみ確認することにしました。
white-spaceとは
要素内の空白文字(スペース、タブ、改行)を制御する方法を設定するCSSプロパティです。
次の設定値があります
- pre
- pre-wrap
- break-spaces
- pre-line
- nowrap
- normal
それぞれで行われることの概要は以下です。
スペースをまとめる | タブをまとめる | 改行をまとめる | 折り返しする | 行末 | コードのまんま度(※) | |
---|---|---|---|---|---|---|
pre | 変更なし | 100 | ||||
pre-wrap | ✔ | ぶら下げ | 75 | |||
break-spaces | ✔ | 折り返す | 75 | |||
pre-line | ✔ | ✔ | ✔ | 除去 | 25 | |
nowrap | ✔ | ✔ | ✔ | 除去 | 25 | |
normal | ✔ | ✔ | ✔ | ✔ | 除去 | 0 |
※:htmlで書いた内容そのままの表現になるかどうかを勝手に表したもの
動かしてみる
実際に動かしてみることにしました。
次のようなブロック要素に対して各値を設定するとどうなるかを確認するコードを作成しました。
<div class="normal">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
なお、無駄に実話です。
サンプルコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.outer{
display: flex;
}
.ws div{
border: 1px solid #000;
width: 25em;
}
.normal{
white-space: normal;
}
.nowrap{
white-space: nowrap;
}
.pre{
white-space: pre;
}
.pre-wrap{
white-space: pre-wrap;
}
.pre-line{
white-space: pre-line;
}
.break-spaces{
white-space: break-spaces;
}
</style>
</head>
<body>
<div class="outer">
<div class="ws">
pre:
<div class="pre">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
pre-wrap:
<div class="pre-wrap">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
break-spaces:
<div class="break-spaces">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
pre-line:
<div class="pre-line">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
nowrap:
<div class="nowrap">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
normal:
<div class="normal">今日はとても天気がよかったので、近くの パン 屋さんまで歩いて買い物に行ってみました<br>が、
定休日でした。</div>
</div>
</div>
</body>
</html>
動作確認
まとめ
- white-spaceには次の値を設定すると折返しが行われる
- normal
- pre-wrap
- pre-line
- break-spaces
参考
- white-space - CSS: カスケーディングスタイルシート | MDN https://developer.mozilla.org/ja/docs/Web/CSS/white-space
Discussion