CSSで長いURLや英単語を枠からはみ出さずに折り返す方法

​​CSS​Flexbox,HTML,Playwright

本文の要素に overflow-wrap: anywhere を1行足すと、枠に収まらない長い URL や英単語だけが、途中で折り返されるようになります。ふつうの英単語は途中で切られません。flex の子要素や表のセルの中では、似た指定の overflow-wrap: break-word だと URL の途中では折り返されず、はみ出したままになることがありました。

補足

検証環境は Ubuntu 24.04、Node.js 22.23.4、Playwright 1.63.0、Chromium 153 です。フォントは Noto Sans CJK JP、文字の大きさは 16px で、幅 280px の要素に URL を入れて Playwright で開き、1文字ずつの位置を調べて行ごとの文字列を求め、scrollWidth ではみ出しの有無を確かめました。Firefox と Safari での表示は試していません。ハイフンを入れて折り返す hyphens: auto は扱いません。各ブラウザーの対応バージョンは、互換性データ(@mdn/browser-compat-data 8.1.8)の値です。

何も指定しないと、URL は枠からはみ出す

検証環境で、「くわしくは」のあとに次の URL を続け、最後に「を見てください。」と書いた段落を、幅 280px の要素に入れました。

text
https://example.com/articles/2026/11/how-to-wrap-long-urls-in-css?utm_source=newsletter&utm_medium=email

何も指定しないと、次のように折り返されました。

text
くわしくは
https://example.com/articles/2026/11/how-
to-wrap-long-urls-in-css?
utm_source=newsletter&utm_medium=email
を見てください。

URL の中でも、- と ? のあとでは折り返されています。検証環境では、それ以外の位置では折り返されず、2行目と4行目が枠からはみ出しました。要素の内側の幅 280px に対して、中身の幅(scrollWidth)は 340px です。

overflow-wrap: anywhere を付ける

overflow-wrap に anywhere を指定します。overflow-wrap は子要素に継承されるので、記事の本文を包む要素に1回書けば足ります。

css
.article-body {
  overflow-wrap: anywhere;
}

同じ段落に付けると、次のように折り返され、中身の幅も 280px に収まりました。

text
くわしくは
https://example.com/articles/2026/1
1/how-to-wrap-long-urls-in-css?
utm_source=newsletter&utm_mediu
m=email を見てください。
3つの枠を縦に並べた画面。上の「指定なし」では、URL の2行目と4行目が枠の右からはみ出している。中の「overflow-wrap: anywhere」では、URL が「2026/1」「1/how-」のように途中で折り返され、すべて枠に収まっている。下の「word-break: break-all」では、「くわしくは」のすぐあとに URL が続き、「artic」「les」のように行の端で切られている
幅 280px の枠に、URL を含む同じ段落を入れて比べた。上から、指定なし、overflow-wrap: anywhere、word-break: break-all

anywhere で途中で折り返すのは、行の中にほかに折り返せる場所がないときだけです。CSS の仕様でもそう定められています。検証環境で、短い単語だけの英文「The quick brown fox jumps over the lazy dog near the riverbank every morning.」に付けたときは、どの単語も切られず、単語の切れ目で3行に折り返されました。

長い英単語も、URL と同じように折り返されます。英文の中に長い単語 Pneumonoultramicroscopicsilicovolcanoconiosis を入れると、指定なしでは単語が1行に収まらずにはみ出しました。overflow-wrap: anywhere を付けると、次のように枠の中で折り返されました。

text
Pneumonoultramicroscopicsilicovolc
anoconiosis for details.

途中で折り返すときも、ハイフンは入りません。URL の例でも「2026/1」と「1/how-」のように、数字の途中で切れています。

word-break: break-all は、ふつうの単語も切ってしまう

長い単語を折り返す指定には、word-break: break-all もあります。こちらは、行の端に来たところで、どの単語でも途中で折り返します。

上の画像の下の段のとおり、URL は「くわしくは」と同じ行から始まり、行の端で「artic」と「les」に分かれました。行の右側の空きは小さくなりますが、短い英文に付けると、「the l」「azy」、「mor」「ning.」のように、ふつうの単語まで切られました。

text
The quick brown fox jumps over the l
azy dog near the riverbank every mor
ning.

overflow-wrap: anywhere では、同じ英文は単語の途中では切られませんでした。英語の文が混ざる本文には、overflow-wrap: anywhere のほうが向いています。

flex の子要素では break-word が効かない

overflow-wrap には、anywhere のほかに break-word という値もあります。古い名前の word-wrap は、仕様で overflow-wrap の別名と決められています。検証環境でも、word-wrap: break-word の計算値は overflow-wrap: break-word になりました。

ふつうの段落の中では、break-word と anywhere の折り返しはまったく同じでした。違いが出たのは、flex の子要素の中です。幅 280px の flex コンテナーに、幅 40px のアイコンと、URL を入れたテキストの要素を並べて比べました。

html
<div class="row">
  <span class="icon"></span>
  <p class="text">https://example.com/articles/...</p>
</div>
css
.row {
  display: flex;
  gap: 8px;
  width: 280px;
}

.icon {
  flex: none;
  width: 40px;
  height: 40px;
}
テキストの要素への指定 テキストの要素の幅 flex コンテナーの中身の幅
overflow-wrap: break-word 340.2px 388px(はみ出す)
overflow-wrap: anywhere 232px 280px(収まる)
overflow-wrap: break-word と min-width: 0 232px 280px(収まる)

break-word では、テキストの要素が縮まず、URL は何も指定しないときと同じ位置でしか折り返されませんでした。

2つの枠を縦に並べた画面。どちらも左に水色の丸いアイコン、右に URL がある。上の「overflow-wrap: break-word」では、URL の行が枠の右からはみ出している。下の「overflow-wrap: anywhere」では、URL が5行に折り返され、枠に収まっている
flex コンテナー(幅 280px)の中のテキストの要素に、break-word と anywhere を指定して比べた

違いが出るのは、要素の最小の幅(min-content)の計算です。仕様では、anywhere で生まれる折り返し位置は最小の幅の計算に入り、break-word では入らないと定められています。width を指定していない flex の子要素は、min-width の初期値 auto のため、この最小の幅より狭くなりません。break-word では URL がひと続きのまま最小の幅になるので、テキストの要素が縮みませんでした。

表のセルでも同じでした。幅 280px の表で、URL を入れたセルに break-word を付けると、表全体が 391.2px まで広がりました。anywhere を付けると、表は 280px のまま、URL がセルの中で折り返されました。

break-word を使い続けたいときは、テキストの要素に min-width: 0 を足します。flex で比べた表の3行目のとおり、anywhere と同じく 232px に縮んで収まりました。

折り返す位置を決めたいときは wbr を入れる

overflow-wrap: anywhere は、行の端に来たところで URL を切るので、「2026/1」「1/how-」のように、区切りの悪い位置で切れることがあります。HTML を書けるなら、<wbr> 要素で、折り返してよい位置をブラウザーに伝えられます。

html
https://example.com/<wbr>articles/<wbr>2026/<wbr>11/<wbr>how-to-wrap-long-urls-in-css<wbr>?utm_source=newsletter<wbr>&utm_medium=email

/ のあとと、?・& の前に <wbr> を入れると、何も指定しなくても次の位置で折り返され、枠に収まりました。

text
https://example.com/articles/2026/
11/how-to-wrap-long-urls-in-css?
utm_source=newsletter
&utm_medium=email

同じ HTML に overflow-wrap: anywhere を足しても、折り返しは変わりませんでした。anywhere が途中で切るのは、ほかに折り返せる場所がないときだけなので、<wbr> の位置が使われます。

pre の中では white-space も変える

コードを表示する <pre> は、検証環境では既定の white-space が pre で、改行の位置でしか折り返しません。仕様でも、overflow-wrap は white-space が折り返しを許すときにだけ効くとされています。

検証環境で、curl のあとに URL を書いた <pre> に overflow-wrap: anywhere だけを付けると、1行のまま、中身の幅が 1050px になりました。white-space: pre-wrap もいっしょに付けると、280px の中で折り返されました。

css
pre {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

pre-wrap は、空白をそのまま残しつつ、改行の位置に加えて、行を埋めるのに必要なときにも折り返す値です。

対応しているブラウザー

互換性データでは、各ブラウザーが次のバージョンから対応しています。

ブラウザー overflow-wrap: anywhere overflow-wrap: break-word word-break: break-all
Chrome 80 1 1
Edge 80 12 12
Firefox 65 3.5 15
Safari 15.4 1 3
iOS の Safari 15.4 1 2

anywhere は、ほかの2つよりあとから対応した値です。

​Posted by 86