ご回答者様
いつもお世話になっております。
「text-indent:100%」を指定した時の改行の挙動について教えていただけますと幸いです。
例えば以下のコードがあったとします。
html
1<div class="div-width"> 2 <p class="p-indent">高額買取の特徴</p> 3</div>
css
1.div-width{ 2 width:300px; 3} 4.p-indent { 5 background-color: #f88; 6}
<Chromeブラウザ表示>
HTMLは同じで、cssにtext-indent:100%を追加すると、次の表示となります。
css
1.p-indent { 2 text-indent: 100%; 3 background-color: #f88; 4}
なぜ、text-indent:100%を指定すると、テキストの1文字目だけ親要素の幅を超えるのでしょうか?
これはtext-indent:100%ではなく、text-indent:1000pxといった親要素以上の幅を指定しても同じ現象が起きています。
テキストの1文字目だけ親要素の幅を超える理由・理屈についてご教授くださいますと幸いです。
以上、ご回答のほど何卒よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
text-indent
まだ、深く読んでいませんが、仕様上の説明で折り返しについても言及されているようですね。
https://triple-underscore.github.io/css-text-ja.html#propdef-text-indent
基本的に、text-indent
は字下げ目的で使いますので、折り返しによる改行を期待することには違和感があります。
HTML
1<div style="text-indent: 100%; padding: 0; border-style: 0">あかさたな</div>
上記HTMLで期待するのは1行分の空行を開けることですか?
ならば、「margin や paddingが適切なのでは」と思います。
字下げは「行内で文字が残ること」に意味があります。
text-indentの影響範囲は1行目のみ
text-indentの仕様には、次の一文があります。
https://triple-underscore.github.io/css-text-ja.html#propdef-text-indent
影響されるのは、キーワード[ each-line / hanging ]により 他が指定されない限り,要素の整形される最初の行に限られる。
この場合、次のように無限ループする可能性があります。
- text-indent によるインデント及び自動折り返しによって、2行目に行頭の1文字目が存在する場合、条件を満たさず、インデントされない
- インデントされないなら、1文字目は1行目となり、text-indentが働く
- 1.に戻る (無限ループ)
この無限ループを回避する為に、あえて1文字目は必ず1行目になるように実装されている、と仮定する事は出来ます。
Re: bah91929 さん
投稿2018/12/14 04:04
編集2018/12/14 12:36総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
なぜ、text-indent:100%を指定すると、テキストの1文字目だけ親要素の幅を超えるのでしょうか?
これは、質問者の勘違いです。テキストの1文字目が親要素を超えたのはたまたまです。
html
1<div class="div-width"> 2 <p class="p-indent">sale! 高額買取の特徴</p> 3</div>
たとえば、↑このHTMLの場合、親要素を超えるのは「sale!」の部分です。
もう、お分かりかと思いますが、これは以前にbah91929さんがご質問になった、文字の折り返しの問題です。
HTML - 長い英単語やURLがボックスやテーブルからはみ出る理由について|teratail
なぜ、1文字目の手前で折り返さないのか、についてですが、確信はないのですが、以下のようなことではないでしょうか。
For soft wrap opportunities before the first or after the last character of a box, the break occurs immediately before/after the box (at its margin edge) rather than breaking the box between its content edge and the content.
5.1. Line Breaking Details | CSS Text Module Level 3
勝手訳「ボックス内の文字について、最初の文字の手前、または最後の文字の後で折り返し機会が発生した場合は、コンテンツ辺とコンテンツの間に折り返すのではなく、ボックスのマージン辺に接して折り返す。」
1文字目の手前で折り返した場合、折り返した行は上記のとおりマージン辺に接して折り返されます。これは1行目ですから、1文字目の開始位置はtext-indent
の影響を受け親要素の外になりますので、再び折り返し機会が1文字目の手前で発生します。その場合、上記のとおりマージン辺に接して折り返されます。これは1行目ですから、1文字目の開始位置はtext-indent
の影響を受け親要素の外になりますので、再び折り返し機会が1文字目の手前で……
と、無限に続くからでは?
追記
私の意図するところが上手く伝わっていないようですので、追記します。
- 折り返しについては、実装上の問題ですので、どのような折り返し規則でもありえると思います。
- 当該実装は、ありえる折り返し規則のひとつだと思います。
- 私の回答は「このように実装すべき」というものではありません。あくまで私的な推測とお読みください。
投稿2018/12/13 07:53
編集2018/12/14 04:02総合スコア37413
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/14 03:52 編集
2018/12/14 12:53

0
「text-indent:100%;」の場合、「親要素の幅」 に対する割合なので、親要素の外にはみ出します。
注意点として、単位が変われば、基準も変わったりします。
各プロパティや値と単位が、どこを基準とするのかを再度、確認されてください。
投稿2018/12/13 09:14
総合スコア3525
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。