質問するログイン新規登録

Q&A

2回答

144閲覧

横並びの文字の下に 文字幅で、下線を引きたいです。

nekokiyo

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2025/11/07 03:44

0

0

実現したいこと

二つの単語文字を横並びにした横幅いっぱいの下線を引きたいです。
↓こんな感じ。
●●●●● 〇〇〇〇〇
ーーーーーーーーーーー

発生している問題・分からないこと

flexなどを使用すると、文字幅ではなく、ボックス幅になってしまい困っています。

●●●●● 〇〇〇〇〇
ーーーーーーーーーーー
こうしたいのにこうなっちゃう。↓

●●●●● 〇〇〇〇〇
ーーーーーーーーーーーーーーーーーーー

該当のソースコード

↓参考HTMLです。 <div class="line_name"> <div class="name_box"> <p class="en">tesuttesuto tesut</p> <p class="jp">テストテストテスト</p> </div> <div class="sen"></div> </div> ↓参考cssです。 .line_name .name_box { color: #87764E; display: flex; gap: 3%; align-items: baseline; } .sen { width: 100%; height: 1px; background-color: #87764E; }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

親要素にdisplay: inline-block;
とかフレックスとかいろいろしたけど、
下みたいになぜか改行しちゃう。
●●●● 〇〇〇〇
●    〇
ーーーーーーーーー

white-space: nowrap;
flex-shrink: 0;
を指定しちゃうと、文字幅と線の長さがちがう。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CTRL-S

2025/11/07 18:40

HTMLもCSSもごちゃごちゃしてますが、単純にborder-bottomでラインを引くのじゃダメですか?
guest

回答2

0

こうするとどうですか?

css

1.line_name .name_box { 2 color: #87764E; 3 display: flex; 4 gap: 3vw; /* ここ */ 5 align-items: baseline; 6 width: fit-content; 7 border-bottom: 1px solid red; /* ここ */ 8 9 p { /* ここ */ 10 flex: 0 0 max-content; 11 } 12 /* .sen はいらない */ 13}

投稿2025/11/07 04:00

Lhankor_Mhy

総合スコア37647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

2つの単語(英語と日本語)を横並びにして、そのちょうど下に「2つの単語の幅ぴったり」に下線(細い線)を引きたい、ということですね。

フレックスやwidth:100%だと、どうしても下線が「横幅いっぱい」や「ボックスの横幅」に伸びちゃって、
『文字そのものの下だけに線を引く』のがうまくできない、というお悩みです。


なぜ思い通りにならないの?

1. flexやwidth:100%は「親要素の幅」基準

CSSのflexや、.sen { width:100%; }は、
「その親(外枠)の幅いっぱい」にしようという指定です。

でも「2つの単語の幅」は、左側や右側に余白がある場合、「親の幅」とは合いません。
だから線も親要素の幅いっぱいに伸びてしまいます。

2. 文字(子要素)自身の「幅」に合わせる必要がある

あなたがやりたいのは、
「2つの単語分だけの幅」に線を引きたいということです。
これには「その文字たちをまるごと包んだ要素」に線を引く必要があります。


どうやって実現するの?

方法1:border-bottomで「包んだ要素」に下線を引く

具体例

html

1<div class="line_name"> 2 <div class="name_box_with_underline"> 3 <span class="en">tesuttesuto tesut</span> 4 <span class="jp">テストテストテスト</span> 5 </div> 6</div>

css

1.line_name { 2 /* 親の装飾など */ 3} 4 5.name_box_with_underline { 6 display: inline-flex; /* ←横並びにして、かつ幅は"中身の幅"だけ */ 7 gap: 1em; /* ←2つの単語間のスペース */ 8 border-bottom: 1px solid #87764E; /* ←下線を引く! */ 9 padding-bottom: 2px; /* 下線と文字がくっつきすぎないように少し余白 */ 10} 11 12/* サンプル。不要であれば外してOK */ 13.en, .jp { 14 color: #87764E; 15 font-size: 1.2em; 16}

ポイント解説

  • .name_box_with_underlinedisplay: inline-flex を指定することで、中身(2つの単語)ぴったりの幅になります。
  • その**下(border-bottom)**に線を引けば、「2つの単語分だけの下線」になります。
  • .senなど別で線を引かず、包む要素のborder-bottomを使うのがコツです!

方法2:「after」疑似要素で線を書くパターン

「どうしても別要素で線を出したい」「アニメーションしたい」などは::afterを使う人もいますが、
入門には「border-bottom」で包む方法が一番分かりやすくておすすめです。


まとめ

  • やりたいこと(2つの単語の幅だけ線を引きたい)には「文字を包んだ要素」にborder-bottomを使うのが簡単でおすすめです。
  • その要素のdisplayinline-flexinline-blockにすると、横並び&必要なだけの幅になります。
  • 別で線のdivを作りwidth:100%とすると、親の幅いっぱいに伸びちゃうため、今回の目的には合いません。

練習してみよう!

  1. 上記HTML・CSSを自分のファイルで書いて実験してみましょう。
  2. いろんな「並びかた」「太さ」「色」も変えてみると勉強になります!

疑問があれば、また質問してくださいね。応援しています!

投稿2025/11/08 14:27

gipcompany

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問