- 技術 💻
HTML 改行の方法|brとpの違い・改行されない原因をChromiumで実測
結論
HTML の改行は、文の途中で行を変えるなら <br>、話のまとまりを分けるなら <p>、テキストに入っている改行文字をそのまま出すなら CSS の white-space: pre-wrap です。ソースファイルの改行(Enter)は、ブラウザでは半角スペース1つに変わり、改行にはなりません。
この記事でわかること
- 同じ文を br・p・pre・white-space・word-break で書き、Chromium で描画した高さ・行数の実測表
- HTML が改行されない原因6つ(ソースの改行・連続スペース・textarea・JS の \n・nowrap・メール)と直し方
- br と p の使い分けの判断表、スクリーンリーダーへの影響、よくある誤り
改行の種類が3つあることを押さえると、つまずきのほとんどは整理できます。
flowchart TD
Q[改行したい] --> A{段落が変わる?}
A -->|はい| P[p で分ける]
A -->|いいえ| B{改行文字が<br>ある?}
B -->|はい| W[white-space:<br>pre-wrap]
B -->|いいえ| R[br で改行]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| html 改行 の書き方 | 文中は <br>、段落は <p> |
brタグの使い方 |
| html 改行されない | ソースの改行は無視される。原因は6つ | HTMLが改行されない原因6つ |
| br タグと p タグの違い | br は行、p は段落。p には上下に余白が付く | pタグとbrタグの違い |
| 改行をそのまま表示したい | white-space: pre-wrap(pre は折り返さない) |
preタグとwhite-space |
| 空行を入れたい | br の連打ではなく p の margin | 連続スペース・空行 |
| 長いURLが改行されない | overflow-wrap: anywhere |
長いURL・英単語 |
| JavaScript の \n が改行にならない | pre-wrap にするか、エスケープしてから br に置換 | JavaScript・textarea |
| 改行させたくない | white-space: nowrap(br は効く) |
改行させない方法 |
| スマホだけ改行したい | <br class="sp"> と display の切り替え |
改行させない方法 |
確認環境:Ubuntu 24.04.5 LTS の上で、Playwright 1.63.0(Node.js 22.23.4)から Chromium 153.0.8010.12 をヘッドレスで起動し、幅 400px・Noto Sans CJK JP 16px・行の高さ 24px の枠に同じ文を 45 通りの書き方で入れて描画しました。高さは clientHeight、はみ出しは scrollWidth、行数は1文字ずつの位置で数え、innerText・textContent も記録しました。表示幅 1000px と 390px の2つで確かめ、スクリーンショットも目で見ています。br・white-space・word-break・overflow-wrap の仕様は MDN、WordPress の自動整形は wpautop の公式リファレンスで確かめました。図は mermaid 11.16.0 で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「HTML 改行の方法|brとpの違い・改行されない原因をChromiumで実測」
HTML 改行の基本:ソースの改行はブラウザで無視される
この節では、HTML ファイルの中で Enter を押しても画面が改行されない理由と、Chromium が実際に何を表示したかが分かります。
HTML では、ソースの改行・タブ・連続した半角スペースは、まとめて半角スペース1つとして扱われます。 これは CSS の white-space の既定値 normal の動きで、MDN の表では「改行文字:統合する」「空白とタブ文字:統合する」と書かれています。改行したい場所には、改行を表すタグ(br・p)か、改行文字を保つ CSS が要ります。
<p>ご注文ありがとうございます。
明日発送します。</p>
この HTML を Chromium で描画した結果です。ソースでは2行ですが、画面では1行になり、2つの文の間に半角スペースが1つ入りました。
| 書き方 | 高さ | 行数 | innerText(画面の文字) |
|---|---|---|---|
| p の中で Enter(日本語) | 24px | 1 | ご注文ありがとうございます。 明日発送します。 |
| p の中で Enter(英文) | 24px | 1 | Thank you for your message. |
| 半角スペース4つ「東京 大阪」 | 24px | 1 | 東京 大阪(スペース1つ) |
4つ |
24px | 1 | 東京 大阪(4つ残る) |
textContent には改行文字 \n が残っていますが、innerText では半角スペースになっていました。データとしての改行文字は残り、描画のときに潰されている、というのが正確な理解です。日本語の文の間に半角スペースが見えるのを避けたいときは、ソースを1行で書くか、タグの直後で改行します。innerText と textContent の違いは、関連記事「innerHTMLとtextContentの違い|innerText比較表」で扱っています。
1行を変える:br
住所・詩・歌詞のように「改行そのものが内容の一部」のときに使う要素。
2段落を分ける:p
話のまとまりごとに囲む。ブラウザの既定で上下に 1em の余白が付く。
3改行文字を保つ:white-space
フォームの入力や API の文字列など、データに入っている \n をそのまま出すときの CSS。
brタグの使い方と書き方(<br>・<br/>・</br>の違い)
この節では、br タグの正しい書き方と、閉じタグを書いたときに Chromium がどう扱ったかが分かります。
<br> は、置いた場所で行を変える要素です。 MDN は、詩や住所など行の分割が重要な場合に有用、と説明しています。中身を持たない要素(void 要素)なので閉じタグはありません。
<p>株式会社RJC<br>
東京都千代田区<br>
経営戦略推進室</p>
書き方の違いを Chromium に入れた結果です。
| 書き方 | 高さ | br の数 | 結果 |
|---|---|---|---|
<br> |
48px | 1 | 2行。HTML の標準的な書き方 |
<br/>・<br /> |
48px | 1 | 2行。XHTML 風だが HTML でもそのまま動く |
</br> だけ |
48px | 1 | 2行。閉じタグの形でも br として解釈された |
<br></br> |
72px | 2 | 3行分。空行が1つ入る(br が2つになる) |
<br></br> と書くと br が2つに増え、意図しない空行が入りました。 ブラウザは </br> を <br> の書き間違いとして扱うためです。閉じタグは書かず、<br> か <br /> のどちらかに揃えます。
br は行の高さだけを持ちます。br に margin を付けて行間を広げる方法は、MDN が良いやり方ではないとして、line-height を案内しています。
pタグとbrタグの違い(段落と行・高さの実測)
この節では、p と br のどちらを使うかの基準と、見た目の違いが数字で分かります。
p は「段落(話のまとまり)」、br は「段落の中の行」です。 見た目の違いは余白にあります。同じ2文を3通りで書き、高さを測りました。
A は br、B は p を2つ、C は br を2つ(空行のつもり)です。
<p>ご注文ありがとうございます。<br>明日発送します。</p>
<p>ご注文ありがとうございます。</p>
<p>明日発送します。</p>
<p>ご注文ありがとうございます。<br><br>明日発送します。</p>
| 書き方 | 高さ | 内訳 | innerText の改行 |
|---|---|---|---|
| A:br | 48px | 24px × 2行 | \n が1つ |
| B:p × 2(margin: 0) | 48px | 24px × 2行 | \n が2つ(段落として扱われる) |
| B:p × 2(既定の余白 1em) | 64px | 24 + 16(余白)+ 24 | \n が2つ |
| C:br × 2 | 72px | 24px × 3行(空の行) | \n が2つ |
- p と p の間の余白(既定 1em = 16px)は、行1つ分(24px)より小さく、空行とは別物です。 br を2つ並べると行1つ分が空き、p の余白より広くなります。余白の大きさは CSS の
marginで変えられます。 innerTextは p の区切りを\n\n、br を\nとして返しました。コピーした文字列も同じ形になります。
段落を分けるとき
MDN も、段落の間を空けるために br を使わず、p と margin で間隔を決めるよう案内しています。
preタグとwhite-space(pre・pre-wrap・pre-line・nowrap)の描画比較
この節では、改行文字をそのまま表示する方法と、それぞれの値で折り返し・スペースがどう変わるかが実測で分かります。
改行文字(\n)とスペースを保ったまま表示するには、pre 要素か、CSS の white-space を使います。 迷ったら pre-wrap です。同じ内容(文の間に改行1つとスペース4つ)を入れた結果です。
<pre>ご注文ありがとうございます。
明日発送します。</pre>
<p style="white-space: pre-wrap;">ご注文ありがとうございます。
明日発送します。</p>
| 書き方 | 改行文字 | スペース4つ | 長い1行(枠 400px) |
|---|---|---|---|
| 指定なし(normal) | 無視(1行・24px) | 1つに潰れる | 折り返す(48px) |
| pre 要素 | 改行(48px) | 4つ残る | 折り返さない(651px はみ出し) |
| white-space: pre | 改行(48px) | 4つ残る | 折り返さない(637px はみ出し) |
| white-space: pre-wrap | 改行(48px) | 4つ残る | 折り返す(400px に収まる) |
| white-space: pre-line | 改行(48px) | 1つに潰れる | 折り返す |
| white-space: nowrap | 無視 | 1つに潰れる | 折り返さない(637px はみ出し) |
- pre と
white-space: preは折り返しません。 長い行は枠からはみ出し、スマホでは横スクロールになります。文章に使うならpre-wrapです。 - pre 要素は既定で等幅フォントになります(幅の差 14px はフォントの違い)。コードには pre、文章には p+pre-wrap が向いています。
pre-lineは「改行は保つが、連続スペースは1つにまとめる」値です。ソースの字下げを見せたくないときに使えます。- MDN によると、
white-spaceはwhite-space-collapse(空白の扱い)とtext-wrap-mode(折り返し)の一括指定で、pre-wrapはpreserve wrapと同じです。
連続スペース・空行を入れる方法( ・br・margin)
この節では、文字の間を空けたい・行の間に空白を入れたいときの選び方が分かります。
連続した半角スペースは1つに潰されるため、見た目の空白は CSS で作るのが基本です。 手元で を4つ入れたときだけ、4つ分の空白が残りました(高さは 24px のまま)。
| したいこと | 向いている方法 | 避けたい方法 |
|---|---|---|
| 文字と文字の間を少し空ける | margin・padding・letter-spacing |
の連打(折り返せない) |
| 段落と段落の間を広げる | p の margin-bottom |
<br><br>(行の高さでしか調節できない) |
| フォームの入力どおりに空白を残す | white-space: pre-wrap |
スペースを に置換 |
| 単語の途中で折り返したくない | (改行しない空白) |
nowrap を広い範囲に指定 |
は「改行しないスペース」で、「10 kg」のように数字と単位を切り離したくない場面のものです。
HTMLが改行されない原因6つと直し方
この節では、「改行したはずなのに1行になる」ときに確かめる6つの原因と直し方が分かります。
原因のほとんどは「改行文字はあるが、ブラウザが改行として描画していない」ことです。
ソースの改行だけで改行したつもりになっている
HTML の改行(Enter)は半角スペース1つになる。改行したい場所に <br> を入れるか、段落なら <p> で分ける。
CSS の white-space: nowrap が効いている
親要素やフレームワークの CSS で nowrap が指定されていると折り返さない。開発者ツールの Computed で white-space を見て、必要な要素で white-space: normal に戻す。br は nowrap でも効く(実測:48px・2行)。
textarea や DB の改行文字をそのまま p に入れている
textarea の値の \n は、p に入れると半角スペースになる(実測)。表示側に white-space: pre-wrap を付けるのが最も安全。
JavaScript の textContent に "\n" を入れている
textContent は文字として入れるので br にはならない。pre-wrap にするか、HTML エスケープしてから \n を <br> に置換して innerHTML に入れる。
テンプレートや CMS が br を文字として出している
画面に <br> という文字がそのまま見えるなら、テンプレートエンジンがエスケープしている。改行を br に変換する関数(PHP の nl2br、WordPress の wpautop など)を通す。
HTML メールの本文に改行文字だけを入れている
HTML 形式のメールも HTML と同じ決まりで、本文の改行文字は改行にならない。HTML パートは <br>・<p> を使い、テキストパート(text/plain)には改行文字をそのまま入れる。
原因3・4の実測です。
| 入れ方(値は "…。\n明日発送します。") | 高さ | 行数 | 画面 |
|---|---|---|---|
| textarea の value | 83px(rows=3) | 2 | 改行して見える |
その値を p.textContent へ |
24px | 1 | 改行が半角スペースになる |
同じ p に white-space: pre-wrap |
48px | 2 | 改行される |
p.textContent + pre-line |
48px | 2 | 改行される |
| エスケープ → \n を br に置換 → innerHTML | 48px | 2 | 改行される(br が1つ) |
WordPress の場合
WordPress の投稿本文は wpautop 関数が整形します。公式リファレンスによると、空行(改行2つ)を p に置き換え、残った改行は <br /> に変換します($br が false なら変換しない)。テーマやプラグインがこの関数を外していると、エディターの改行が反映されません。
長いURL・英単語が改行されない:word-breakとoverflow-wrap
この節では、長い URL や英数字の並びが枠からはみ出す理由と、どの CSS を付ければ収まるかが実測で分かります。
日本語は文字ごとに折り返せますが、英数字の並びは「単語の切れ目」でしか折り返しません。 60 文字のトークンを含む URL を幅 400px の p に入れると、枠を 299px はみ出しました。
/* 推奨:単語の途中で折る必要があるときだけ折る */
p { overflow-wrap: anywhere; }
/* 英数字も文字単位で折る(URL の表示や表のセル向け) */
.cell { word-break: break-all; }
| CSS | 高さ | はみ出し | 折れた位置 |
|---|---|---|---|
| 指定なし | 72px | あり(699px) | URL の前後だけで折れ、URL は1行のまま |
| overflow-wrap: anywhere | 72px | なし(400px) | URL の途中(枠に収まる位置) |
| overflow-wrap: break-word | 72px | なし(400px) | anywhere と同じ位置 |
| word-break: break-all | 72px | なし(400px) | 「資料は https://…」と1行目から URL を詰め、折れる位置が全体に変わった |
overflow-wrap: anywhereは「収まらないときだけ」単語の途中で折るので、ふつうの文章の折り返しは変わりません。本文の既定にしておくと、URL がはみ出す事故を防げます。word-break: break-allは、収まる・収まらないに関係なく、英数字をどの文字の間でも折ります(MDN は CJK 以外のテキストの禁則を解除する値と説明しています)。手元では URL が1行目から詰められ、折れる位置が全体に変わりました。表のセルや URL だけの欄に限って使います。日本語はもともと文字の間で折り返せるため(指定なしでも「お届け|まで」で折れました)、日本語のために break-all を付ける必要は普通ありません。anywhereとbreak-wordの違いは、最小幅(min-content)の計算に折り返しを含めるかどうかです。flex・grid の中で幅が縮まらないときはanywhereを使います。- Chromium は URL の
?の直後では折り返しました(?token=の形の 40 文字は指定なしでも収まりました)。折れる位置はブラウザの規則に依存するため、CSS で保険を掛けておきます。
word-break と overflow-wrap の値ごとの違いは、関連記事「CSS折り返し早見表|word-breakとoverflow-wrapの違い」で扱っています。
JavaScript・textareaの改行文字(\n)を改行として表示する
この節では、JavaScript の文字列やフォームの入力に含まれる改行文字を、画面で改行として出す3つの方法が分かります。
最も安全なのは、文字列はそのまま textContent に入れ、表示側の CSS を white-space: pre-wrap にする方法です。 HTML として解釈させないので、入力に <script> が混ざっていても文字として表示されます。
const v = textarea.value; // "ご注文ありがとうございます。\n明日発送します。"
// 方法1(推奨):文字として入れ、CSS で改行を保つ
out1.textContent = v; // out1 { white-space: pre-wrap; }
// 方法2:エスケープしてから \n を <br> に置換する
const esc = s => s.replace(/[&<>"']/g, c =>
({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
out2.innerHTML = esc(v).replace(/\r?\n/g, '<br>');
// 方法3:行ごとに要素を作る(React なら split('\n').map(...))
v.split(/\r?\n/).forEach(line => {
const p = document.createElement('p');
p.textContent = line;
out3.appendChild(p);
});
方法1と2の実行結果は、どちらも 48px・2行でした(前の節の表)。方法2は先にエスケープしてから置換する順番を守ります。逆にすると、置換で入れた <br> まで文字として表示されます。
- 1表示するだけ → textContent + pre-wrapエスケープ不要で、改行とスペースがそのまま出る
- 2行ごとに装飾したい → split して要素を作る1行目だけ太字、など
- 3HTML として組み立てたい → エスケープ → br に置換 → innerHTML順番を逆にしない。テンプレートエンジンなら nl2br 相当の関数を使う
Windows の改行コードは \r\n なので、置換の正規表現は /\r?\n/ にしておくと両方に効きます。innerHTML に外部の文字列を入れる危険については、関連記事「dangerouslySetInnerHTMLの使い方とサニタイズ」の内容と同じ考え方です。
改行させない方法(nowrap・wbr)とスマホだけ改行するbr
この節では、折り返しを止める方法、wbr、画面幅で br を切り替える書き方が分かります。
折り返しを止めるのは white-space: nowrap、「ここでなら折ってよい」と伝えるのは <wbr> です。 Chromium での結果です。
| 書き方 | 高さ | 行数 | 結果 |
|---|---|---|---|
| nowrap + 長い文 | 24px | 1 | 637px になり枠からはみ出す |
| nowrap + br | 48px | 2 | br の位置で改行する(nowrap でも br は効く) |
| nowrap + wbr(長い文) | 48px | 2 | wbr の位置でだけ折れ、400px に収まる |
スマホだけ改行する br
見出しやキャッチコピーで「PC は1行、スマホは2行」にしたいときは、br に class を付けて display を切り替えます。
<p>ご注文ありがとうございます。<br class="sp">明日発送します。</p>
<style>
.sp { display: none; } /* PC では改行しない */
@media (max-width: 480px) { .sp { display: inline; } } /* スマホでは改行する */
</style>
表示幅 1000px では 24px・1行、390px では 48px・2行になりました。br は display: none にすると改行しなくなります。 逆に「PC だけ改行」は .pc { display: none; } をスマホ側のメディアクエリに書きます。
br で改行してよいもの
住所・詩・歌詞(改行が内容の一部)
キャッチコピーの折り返し位置(class で切り替え)
署名・会社名と部署名
br ではなく別の手段
段落の区切り → p
余白 → margin・padding
横並びを縦に → display: block・flex
display・flex・tableの中でのbrの挙動(実測)
この節では、レイアウト用の CSS と br の組み合わせを確かめた結果が分かります。
手元の Chromium 153 では、flex・grid・table のどの中でも br は改行として働きました。 改行されないように見えるときは、br ではなく要素の display が原因のことが多いです。
| 組み合わせ | 高さ | 行数 | 結果 |
|---|---|---|---|
| display: flex の p に br | 48px | 2 | 改行した |
| display: grid の p に br | 48px | 2 | 改行した |
| td の中に br | 50px | 2 | 改行した(枠線 1px × 2 を含む) |
| span の中に br | 48px | 2 | 改行した |
| span を2つ並べる(inline) | 24px | 1 | 改行しない |
| span を2つ(display: block) | 48px | 2 | 改行した |
| p と p の間に br | 72px | 2+空行 | 24px の空行が増える |
- span・a・strong などのインライン要素は、並べても改行しません。 縦に積みたいときは
display: blockにするか、p・li などのブロック要素に変えます。display の違いは、関連記事「CSS displayの種類一覧|block・inline・noneの違い」で扱っています。
brとpの使い分け判断表
この節では、場面ごとにどの改行の方法を選ぶかが一覧で分かります。
| 場面 | 使うもの | 理由 |
|---|---|---|
| 住所・会社名と部署名 | <br> |
改行が内容の一部 |
| 詩・歌詞 | <br> |
改行が内容の一部 |
| 本文の段落 | <p> |
意味のまとまり。余白は margin |
| 箇条書き | <ul><li> |
br で並べると一覧として読み上げられない |
| お問い合わせ内容・コメントの表示 | white-space: pre-wrap |
入力の改行とスペースを保ち、折り返す |
| ソースコード・ログ | <pre><code> |
等幅・空白を保つ。横スクロールは overflow-x |
| キャッチコピーの折り返し位置 | <br class="sp"> |
画面幅で display を切り替える |
| 長い URL・英数字 | overflow-wrap: anywhere |
収まらないときだけ途中で折る |
| 表の見出し・ボタンの文字 | white-space: nowrap |
途中で折れると読みにくい |
| 横に並んだ要素を縦に | display: block・flex |
br はレイアウトの道具ではない |
改行とアクセシビリティ(スクリーンリーダー・意味づけ)
この節では、br の使い方が読み上げソフトや検索エンジンにどう影響するかが分かります。
見た目のために br を重ねると、読み上げソフトを使う人には「何も無い行」が伝わります。 MDN は、段落の間隔を広げるために連続した br を使うと、スクリーンリーダーが要素の存在をアナウンスするのに中身が無い状態になり、使う人を混乱させる可能性がある、と説明しています。
- 1段落は p で分ける読み上げソフトは段落単位で移動できる。br の連打では段落として認識されない
- 2一覧は ul・ol にする「項目 3 件」のように件数が伝わる。br で並べた行は1つの段落として読まれる
- 3間隔は margin・line-height で付けるMDN は br への margin を良いやり方ではないとし、line-height を案内している
- 4見出しの途中の br は最小限にする検索結果やリンクの文字列には改行が出ない。文として読める位置で折る
- 5スマホ用の br は display で切り替えるbr を消すなら display: none。手元で 1000px は1行、390px は2行になった
p・ul・h2 で構造が付いた文書のほうが、内容のまとまりを機械が読み取りやすくなります。タグの意味は、関連記事「HTMLタグ一覧表|基本タグから全要素まで表示例・コピペ用コード付き」で扱っています。
よくあるエラー・つまずき(原文つき)
この節では、改行まわりで実際に目にする症状と、原因・直し方が一覧で分かります。
| 症状(見えたもの) | 原因 | 直し方 |
|---|---|---|
画面に <br> の文字がそのまま出る |
テンプレートが HTML をエスケープしている(<br> になっている) |
nl2br 相当の関数を通す。手元では「エスケープ → 置換」の順で 2 行になった |
| 「ご注文ありがとうございます。 明日発送します。」と間に半角スペース | ソースの改行が半角スペースになった(Chromium の実測) | ソースを1行にするか、タグの直後で改行する |
| br を1つ書いたのに空行が入る | <br></br> が br 2つに解釈された(実測 72px) |
<br> だけにする |
| pre の中身がスマホで横にはみ出す | pre は折り返さない(実測 651px) | white-space: pre-wrap か、overflow-x: auto で横スクロール |
| URL が枠からはみ出す | 英数字の並びに折り返しの位置が無い(実測 699px) | overflow-wrap: anywhere |
| textarea では改行しているのに表示で1行 | \n を p に入れた(実測 24px) | 表示側に white-space: pre-wrap |
| 表のセルが改行せず横に伸びる | td に nowrap(実測 639px) | nowrap を外す。長い英数字には break-all |
| span を並べたのに1行のまま | インライン要素は改行しない(実測 24px) | display: block か、p・li に変える |
| WordPress で改行が消える・増える | wpautop の自動整形(空行 → p、改行 → br) | 空行で段落、1つの改行で br になる前提で書く |
よくある質問
Q. HTML で改行するにはどうすればよいですか?
A. 文の途中で行を変えるなら <br>、話のまとまりを分けるなら <p> で囲みます。HTML ファイルの中で Enter を押しただけでは、半角スペース1つになり改行されません。
Q. br タグと p タグの違いは何ですか? A. br は「段落の中の改行」、p は「段落そのもの」です。手元の実測では、br は 24px × 2 行、p を2つ並べると既定の余白が付いて 64px(24 + 16 + 24)になりました。p の余白は CSS の margin で自由に変えられます。
Q. <br> と <br /> はどちらが正しいですか?
A. HTML ではどちらも同じ1つの br として描画されました(48px・2行)。<br /> は XHTML の書き方で、HTML でもそのまま動きます。<br></br> と書くと br が2つになり空行が入るので避けます。
Q. HTML が改行されないのはなぜですか?
A. 多いのは、ソースの改行だけで改行したつもりになっている、CSS の white-space: nowrap が効いている、textarea や JavaScript の \n をそのまま p に入れている、の3つです。本文の「HTMLが改行されない原因6つ」の順に確かめます。
Q. 改行をそのまま表示するにはどうすればよいですか?
A. 表示する要素に white-space: pre-wrap を付けます。改行とスペースを保ったまま、枠の幅で折り返します。pre 要素や white-space: pre は折り返さないので、長い行は枠からはみ出します(実測 651px・637px)。
Q. スマホだけ改行するにはどうすればよいですか?
A. <br class="sp"> と書き、CSS で .sp { display: none; }、メディアクエリの中で .sp { display: inline; } にします。手元では表示幅 1000px で1行、390px で2行になりました。
Q. 長い URL が改行されずにはみ出します。
A. overflow-wrap: anywhere を付けます。収まらないときだけ途中で折るので、文章の見た目は変わりません。
Q. JavaScript の \n を改行として表示するには?
A. 表示先に white-space: pre-wrap を付け、文字列は textContent で入れるのが最も安全です。innerHTML に入れるなら、HTML エスケープをしてから \n を <br> に置換します。順番を逆にすると br が文字として表示されます。
まとめ
- HTML のソースの改行・連続スペースは、描画のときに半角スペース1つに潰される。Chromium では日本語の文の間にも半角スペースが入った(24px・1行)。
- 文中の改行は
<br>(48px・2行)、段落は<p>(既定の余白つきで 64px)。空行を作るために br を重ねない。<br></br>は br 2つになる。 - データに入っている改行文字をそのまま出すなら
white-space: pre-wrap。pre とwhite-space: preは折り返さず、長い行は枠からはみ出す。 - 長い URL・英数字は
overflow-wrap: anywhereで収まる。word-break: break-allは収まるときでも英数字を文字単位で折るので、表のセルなどに限る。 - 改行されない原因は、ソースの改行・nowrap・textarea の値・JS の \n・テンプレートのエスケープ・HTML メールの6つ。開発者ツールで white-space と innerText を見ると、どれかが分かる。
次に読むとよい記事です。折り返しの CSS は関連記事「CSS折り返し早見表|word-breakとoverflow-wrapの違い」、行の高さや揃え方は関連記事「CSS text-alignとline-heightの使い方|効かない原因も」で扱っています。
参考・出典
確認日はいずれも 2026年10月29日です。
- MDN「<br>: 改行要素」:https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/br
- MDN「white-space」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/white-space
- MDN「overflow-wrap」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/overflow-wrap
- MDN「word-break」:https://developer.mozilla.org/ja/docs/Web/CSS/Reference/Properties/word-break
- MDN「<wbr>: 改行可能要素」:https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Elements/wbr
- WordPress Developer Resources「wpautop()」:https://developer.wordpress.org/reference/functions/wpautop/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「HTML 改行の方法|brとpの違い・改行されない原因をChromiumで実測」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。