nacot
@nacot

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【CSS】グローバルメニューの右寄せについて

Q&A

Closed

HTMLCSS初心者で、最近勉強を始めました。
めちゃくちゃ初歩的な質問で恐縮なのですが、調べても納得がいかなかったので質問させてください。

やりたいこと

ヘッダー部分に画像とメニューが並列に表示されるものを作っていて、CSSで画像部分は左寄せ、グローバルメニューは右寄せにするコーディングをしたいです。

問題

グローバルメニューを右寄せにする際、
.headerにjustify-content: space-between;の記述をすると右寄せができるのですが、なぜそれでうまくいくのか理解できずにいます。

HTML

<body>
    <header class="header">
        <h1 class="sitename"><a href="#"><img src="img/1.jpg" alt="sitename"></a></h1>
        <nav>
            <div class="menu">
                <ul>
                    <li><a href="#">はじめに</a></li>
                    <li><a href="#">会社について</a></li>
                    <li><a href="#">ニュース</a></li>
                    <li><a href="#">採用情報</a></li>
                    <li><a href="#">お問い合わせ</a></li>
                </ul>
            </div>
        </nav>
    </header>

CSS

li {
    list-style: none;
}

/*header*/
.sitename img {
    height: 50px;
    width: 200px;
    padding: 0 30px;
}
.header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.header ul {
    display: flex;
    margin: 20px;
}
.header li {
    margin: 10px;
}

   
justify-content: right;
justify-content: end;
justify-content: flex-end;
だとうまくいかず不思議に思っています。

どうしてそうなるのかの理由や、他に適切な記述方法があれば教えていただきたいです。

また、その他不自然な記述があればご指摘いただけますと嬉しいです。
よろしくお願いいたします。

1

3Answer

「justify-content: space-between;」を指定することで、「header」の下の「h1」要素と「nav」要素が左右両端に配置されるようになっています。

こちらのチートシートのサイトが画像付きで説明されていてわかりやすいと思います。
参考にしてみてください。


また、その他の方法として、「justify-content」は使用せずに「nav」に対して、
margin-left:auto;を指定してあげても同様の動きになると思います。

See the Pen Untitled by yotty (@yotty) on CodePen.

3Like

Comments

  1. @nacot

    Questioner

    ご回答くださりありがとうございます。
    space-betweenを間違って認識していて、納得することができました。
    参考サイトと別方法も教えてくださりありがとうございます!

MDNによると

最初のアイテムは主軸の先頭側に寄せられ、最後のアイテムは主軸の末尾側に寄せられます。

とあります。

質問のHTMLに置き換えると
最初のアイテム = h1タグ
最後のアイテム = navタグ
ということになり、グローバルメニューが右寄せになるわけです。

justify-content: right;
justify-content: end;
justify-content: flex-end;
だとうまくいかない理由も解説を見ていただければわかるかと思います。

1Like

Comments

  1. @nacot

    Questioner

    分かりやすいご回答ありがとうございます。
    space-betweenを間違って認識していたこともあって、納得することができました。
    参考サイトも教えてくださりありがとうございます!

僕もHTMLCSS初心者です!
flexbox楽しいですよね!一緒に頑張りましょう!
justify-content: right;
で右寄せになりましたよ:laughing:(同じ階層中にある画像くんも一緒に移動します!)
backgroundやborderで色をつけるとそれぞれどこに配置されているのかわかりやすくなります!

※おまけ:codepenおすすめです。今回のように質問するときのソースのスペースも減りますし、現在の画面がどんな感じになっているのかの共有もしやすいです!

See the Pen Untitled by masamasa (@masamasa1981) on CodePen.

※おまけ2
https://about.yahoo.co.jp/hr/
こちらyahooさんの採用情報のページですが、F12でみてみると今回の内容と似たような作りでflexboxで実現してますね!
ディスプレイのwidthが1000px以上の場合、
左のロゴの部分でmargin: 0 auto 0 35px;で左側にロゴが来る感じになってますね。(メニューについては特に「右側にする」のような設定はしてなさそうです)
こんな感じでロゴを左側、メニューを右側としているみたいです。
いろんなサイトをF12で眺めていたら、こうやって作ってるんだ!って感動があって面白いですね:grin:

1Like

Comments

  1. @nacot

    Questioner

    丁寧なご回答ありがとうございます。
    backgroundやborderをそう使う発想がなかったので、使わせていただきます。
    コードが長くなる時にcodepen便利ですね。埋め方がよく分かっていないので覚えます!

Your answer might help someone💌