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

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

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

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

CSS

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

Q&A

解決済

2回答

340閲覧

flexbox の align-items: center; で垂直中央揃えをしたい

shimik

総合スコア11

HTML

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

CSS

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

0グッド

0クリップ

投稿2019/07/08 16:48

前提・実現したいこと

htmlとcssを勉強中です。
flexbox の align-items: center; をうまく機能させることができません。
ご指摘いただきたくお願いいたしますm(..)m

発生している問題・エラーメッセージ

ヘッダーの中のリスト<li>を横並びにして、垂直方向中央揃えにしたいのですが、 親要素の<ul>に加え、さらに親要素の<header>にも display: flex; を入力 しないと垂直方向中央揃えになりません。

該当のソースコード

HTML

1<header> 2 <ul> 3 <li>あ</li> 4 <li>い</li> 5 <li>う</li> 6 </ul> 7</header>

CSS

1header { 2 height: 90px; 3 display: flex; /*←なぜかここにも入力するとうまく表示できます*/ 4} 5 6ul { 7 display: flex; /*←ここにだけ入力すれば良いと思うのですが*/ 8 align-items: center; 9}

試したこと

cssで
headerにだけ
display: flex;
align-items: center;
両方を入力し、
ulには
何も書かない場合もうまく表示できません。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

li要素はul要素の中で垂直中央に並んでいます。
header要素にflex指定をするとさらにul要素がheader要素の中で垂直中央に並ぶため、li要素もheader要素に対して垂直中央に並んだように見えます。
headerul各要素にborderを付けた上でflexを付けたり外したりしてみると動きがわかりやすいかと思います。

投稿2019/07/08 23:50

ryo_y

総合スコア244

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

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

shimik

2019/07/09 00:26 編集

ryo_y様、ご回答ありがとうございます。 本やネットの情報では、ulにのみdisplay:flex;とalign-items:center;を指定すれば良いと書いてあるのですが、私の書き方が正しいものなのか、たまたまうまく表示されているるだけの間違ったやり方なのかがわからないでおります。 この点につきましても、ご指南いただけますと幸甚です。
shimik

2019/07/09 00:36

私が、ulがliの集合体を示しているだけのもの(ul自体は幅や高さを持たない)なのか、ulはliを囲うブロック要素なのかを理解していないから分からない気がしてきました。 背景の色をつけて色々試したりはしていたのですが、ulの高さ幅の設定も変えたりして再度確認してみます。
guest

0

ベストアンサー

<ul>に`display:flex;`を設定しても、親要素に合わせて、拡大・縮小するわけではありません。 <header>に高さ設定(90px)があるので、<ul>にも高さを設定しないと、余白が出来ている状態なので、<header>にも`display:flex;`を設定しないと、上下中央には来ません。

方法はいくつかありますが、<ul>display:flex;を設定のひとつの例として
<ul>にはブラウザの初期値marginpaddingがありますので、**「リセット」**掛けています。

CSS

1header { 2 height: 90px; 3} 4 5ul { 6 margin: 0; 7 padding: 0; 8 display: flex; 9 align-items: center; 10 height: 90px; 11 background-color: #ccc; /* ← 分かりやすいように色をつけています */ 12} 13 14li { 15 list-style: none; 16}

最初は大変ですが、flexは便利にいろんな場面で使えますので、頑張ってください。

投稿2019/07/09 01:10

yoshinavi

総合スコア3523

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

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

shimik

2019/07/09 13:01

yoshinavi様、ご回答ありがとうございました。 高さを変えて試してみて、やっと少し理解できました。 `flex`よりも`inline-block`を使って学習していたのですが、両方とも私にとっては理解のハードルが少し高いみたいです。 大変助かりました。 引き続き質問にお気付きの時は助けていただけると幸いです。
yoshinavi

2019/07/09 19:37

レイアウトは、ブロック要素とインライン要素の組合せですが、各プロパティ値が、要素の種類によって効く効かないも出てきます。 「効かない!」時は、ブロック要素やインライン要素、そこに、親要素や子要素の関係も確認する必要があります。 ここを乗り越えれば、CSSの理解が一気に楽になるかと思いますので、頑張ってください。 解決されて何よりです。 (^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問