質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.40%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

3回答

550閲覧

2行の文章の1行目のみをボックスの縦の中央にそろえたい

cheshire-cat

総合スコア73

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2020/10/27 04:28

2行ある文章のうちの1行目のみをボックスの縦の中央にそろえたいと考えています。
2行目は1行目よりも10ピクセル下にあります。そこで例えば

HTML <div class="box"> <div class="text"> <h1>ホームページのタイトル</h2> <p>ホームページの説明文</p> <div> </div> CSS .box { display:flex; align-items: center; }

と書くと、text全体が縦の方向の中央になってしまい、
h1のみが縦方向の中央に来るわけではありません。

そこで

HTML <div class="box"> <h1>ホームページのタイトル</h2> <p>ホームページの説明文</p> </div> CSS .box { position: relative; } h1 { position: absolute; top: 50% transform: translate(0,-50%); } p { position: absolute; top: calc(50% + 10px); transform: translate(0,-50%); }

と書いたのですが、それだとh1とpが重なってしまい、うまくいきませんでした。

calc(50% + 10px)の10pxを目算で15px,20pxとどんどん増やしていけば、
そのうちh1の下10pxにたどりつくのですが、

そのような手計算するようなやり方はは取りたくありません。

1行目のみを縦の中央にそろえるにはどうすればいいのでしょうか?
よろしくお願いします。

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

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

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

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

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

Lhankor_Mhy

2020/10/27 04:40

text-align ではダメということですよね?
Lhankor_Mhy

2020/10/27 04:51

ああ、縦方向なんですね。了解しました。 p は h1 に続けばいいのでしょうか?
cheshire-cat

2020/10/27 04:54

text-alignは横の中央ぞろえだと思うのですが、縦の中央ぞろえも使えるのですか?  もし縦の中央ぞろえにも使えるのであれば、text-alignでもいいです。 できれば具体的に書き方を教えていただけると助かります。
cheshire-cat

2020/10/27 04:58

pはh1のすぐ下に入ります。
Lhankor_Mhy

2020/10/27 05:25 編集

yambejpさんの回答にもありますが、高さはどうなっていますか?
cheshire-cat

2020/10/27 05:20

高さはレスポンシブ対応させますので変化します。 高さが変わってもpがh1よりも10px下にあることは変わりません。
Lhankor_Mhy

2020/10/27 05:24

高さがコンテンツ依存ということは、内容物がはみ出ると思いますが、それはかまいませんか?
cheshire-cat

2020/10/27 05:27

boxの高さは300px~500pxあります。 そのため内容物(今回はテキスト2行のみ)がはみ出すことはないです。
Lhankor_Mhy

2020/10/27 05:29

高さは不定だが、十分なスペースの分だけ指定されている、ということですね? 問題を把握しました。
yambejp

2020/10/27 06:28

いまさらですが、h1の閉じタグがh2になっています・・・
guest

回答3

0

下記のような感じでどうでしょうか?

css

1.box { 2 background-Color:yellow; 3 display:flex; 4 align-items: center; 5 height:200px; 6} 7.text { 8 position:relative; 9} 10 11.box h1{ 12 background-Color:aqua; 13 margin: 10px 0; 14} 15.box p{ 16 position: absolute; 17 background-Color: lime; 18 line-height: 1.5em; 19 bottom: -1.5em; 20 margin: 0; 21}
  • .textposition:relative; を設定してこれを座標基準にする。

  • .box pposition: absolute;で絶対位置指定してbottomline-heightのマイナス値を設定する。これで h1 の底辺にくっつく。(初期値はブラウザによって異なるかもしれないので明示的に指定する。)

  • h1 と p との余白10pxは h1 の上下マージンで設定。

投稿2020/10/27 05:44

hatena19

総合スコア33989

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

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

Lhankor_Mhy

2020/10/27 05:56

その手がありましたか…… Firefox だと bottom いらなかったです。
hatena19

2020/10/27 06:03

確認してみたら Chromeでも bottom いらないようです。 あと、yambejpさんの回答で気づきましたが、p の margin-top で余白付けてもいいですね。
Lhankor_Mhy

2020/10/27 06:08

あー、yambejpさんの2つめのご回答も絶対配置の静的位置を使っているんですね。 これは勉強になりました。
guest

0

ベストアンサー

.boxが高さをもたないと厳しいと思いますが・・・
またpはmarginを殺してください

投稿2020/10/27 04:59

yambejp

総合スコア115719

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

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

yambejp

2020/10/27 06:28 編集

※div.textを追加しました <div class="box"> <div class="text"> <h1>ホームページのタイトル</h1> <p>ホームページの説明文</p> </div> </div> <style> .box { background-Color:yellow; display:flex; align-items: center; position:relative; /*height:200px;*/ } .box h1{ background-Color:aqua; } .box p{ position:absolute; background-Color:lime; bottom:10px; margin:0px; } </style>
cheshire-cat

2020/10/27 05:18

ご回答ありがとうございます! すみません。boxの高さを書き忘れていました。 boxには高さがあり、レスポンシブ対応させますので、画面サイズに応じて高さが変化します。 そのため高さが変化しても1行目のみを中央ぞろえにする方法を考えています。 pがh1の下10pxのところにあるというのは、boxの高さが変わっても常に一定です。
yambejp

2020/10/27 05:36 編集

> pがh1の下10px あ、h1の下ですね・・・ちょっと認識が違いました。 .box { background-Color:yellow; height:300px; display:flex; align-items:center; } .box h1{ margin:0; background-Color:aqua; } .box p{ margin-top:10px; position:absolute; background-Color:lime; }
cheshire-cat

2020/10/27 05:45

すみません。やってみたけどうまくいきませんでした。 その方法ではh1とpが重なりませんか? margin-top:10pxでは、pはh1と重なって少しずれるだけだと思うのですが…。
hatena19

2020/10/27 06:11

yambejpさんのサンプルでうまくいきますね。 position: relative; がないのになんでうまくいくんだろう。 ない場合は body基準になるとおもっていたのですが。
cheshire-cat

2020/10/27 06:23

みなさんありがとうございます。 yambejpさんの方法でうまくいきました。 h1が起点になるということですね。boxを基準にpositionを使うことばかり考えていました。
guest

0

calc で計算をするしかないと思います。

サンプル

css

1:root{ 2 --lh: 1.5; 3 --h1-font-size: 2rem; 4} 5 6h1{ 7 line-height: var(--lh); 8 font-size: var(--h1-font-size); 9} 10.box{ 11 height: 300px; 12 position: relative; 13} 14.text{ 15 position: absolute; 16 top: calc( 50% - var(--h1-font-size) * var(--lh) / 2 ); 17} 18p{ 19 margin-top: 10px; 20} 21

投稿2020/10/27 05:47

Lhankor_Mhy

総合スコア36484

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

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

cheshire-cat

2020/10/27 06:25

ご回答ありがとうございます。 計算をする方法は考えていませんでした。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問