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

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

ただいまの
回答率

90.48%

  • CSS

    5993questions

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

htmlとcssでのドロップダウンメニューの作り方

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 826

seina2425

score 1

前提・実現したいこと

HP作成の初心者です。マニュアル本のお手本を見ながら、何とか基本のHPは作り上げました。さらにここに、htmlとcssだけでドロップダウンメニューをつけたいです。liの中のAに対してA~Eのサブメニューを作りましたが、これを縦に並べて通常は非表示、マウスがきたときだけ表示、ができるようにしたいです。通常は非表示、まではできました。これから、マウスが来た時だけ縦列に表示、にするにはどうしたら良いでしょうか?#gNav #submenu li:hover {
display: block; /* マウスが乗ったら表示する */
}
では反応しないので、行き詰っています。

        <!-- ナビゲーション -->
        <nav id="gNav">
        <ul>
         <li class="current-menu-item"><a href="index.html">ホーム<span>Home</span></a></li>
         <li><a href="A.html">A<span>a</span></a></li>
            <ul id="submenu">
              <li><a href="A.html">A</a></li>
              <li><a href="B.html">B</a></li>              <li><a href="C.html">C</a></li>
              <li><a href="D.html">D</a></li>
              <li><a href="E.html">E</a></li>
        </ul>
         <li><a href="F.html">F<span>f</span></a></li>
         <li><a href="G.html">G<span>g</span></a></li>
          <li><a href="H.html">H<span>h</span></a></li>
        </ul>
        </nav>
        <!-- //ナビゲーション -->
/* エリア外枠のスタイル */
#gNav {
    margin-bottom: 25px;
}

/* メニューリストを囲む枠 */

#gNav ul {
    display: -webkit-flex;    /* safari用 */
    display: flex;
}

/* メニューリストの共通スタイル */
#gNav li {
    border-left: 1px solid brown;
    height: 45px;
    text-align: center;
    width: 20%;
}

/* 一番右のメニューリストのスタイル */
#gNav li:last-child {
    border-right: 1px solid brown;
}

/* メニューのリンクスタイル */
#gNav a{
    color: brown;
    display: block;
    font-size: 16px;
    text-decoration: none;
}

/* メニューにマウスを乗せたときのスタイル */
#gNav a:hover {
    background-color: yellowgreen;
}

/* メニューの英文字スタイル */
#gNav a span {
    color: deeppink;
    display: block;
    font-family: arial;
    font-size: 14px;
}

/* 現在ページのメニュースタイル */
#gNav .current-menu-item a, #gNav .current-menu-item a span {
    background-color: yellowgreen;
    color: #ffffff;
}

/* メニューのサブメニュー */

#submenu li {
width: 120px; /* リスト項目の幅 */
}

#submenu a {
text-align: center; /* 文字を中央合わせに */
padding: 5px; /* 内部の余白 */
border:  1px deeppink solid; /* 枠線 */
background: white; /* 通常の背景 */
height:30px; /* 高さの調整 */
}

#gNav #submenu li {
display: none; /* 通常は表示しない */
}

#gNav #submenu li:hover {
display: block; /* マウスが乗ったら表示する */
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

元のCSSでは#gNav #submenu lidisplay:none;となっているため、:hoverが適用されない状態となっています。
なので、submenuの親要素に:hoverをかけてやることで、期待する表示が出来ます。

    <li><a href="A.html">A<span>a</span></a>
      <ul class="submenu">
        <li><a href="A.html">A</a></li>
        <li><a href="B.html">B</a></li>
        <li><a href="C.html">C</a></li>
        <li><a href="D.html">D</a></li>
        <li><a href="E.html">E</a></li>
      </ul>
    </li>
    <li><a href="F.html">F<span>f</span></a></li>
#gNav .submenu {
  display: none; /* 通常は表示しない */
}

#gNav li:hover > .submenu  {
  display: block; /* マウスが乗ったら表示する */
}

https://jsfiddle.net/takmatz/eyamamr1/

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/26 17:20

    詳しい説明、ありがとうございます!
    サブメニューが出てくるようにはなったのですが、出るのがAのみで、Bから後が出てきません。
    考えられるミスは、どのようなものでしょうか?

    キャンセル

  • 2017/09/26 20:04

    idはページでユニークの必要があるので、classに置き換えれば可能です。

    キャンセル

  • 2017/09/27 13:05

    ご返信ありがとうございます。
    メニューのすぐ下に画像があり、その下にサブメニューが隠れてしまっていたために、見えるのがAだけだったことがわかりました!
    入れた画像に対して、最背面に配置をする指示を出すにはどうしたら良いでしょうか?
    重ねての質問で申し訳ありません。

    キャンセル

  • 2017/09/27 14:54

    横から失礼します。
    z-indexを使うと前面背面の指定ができます。調べてみてください。

    キャンセル

  • 2017/09/28 16:54

    できました!
    Tak_Matzさん、dit.さん、ありがとうございました!

    キャンセル

関連した質問

同じタグがついた質問を見る

  • CSS

    5993questions

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