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

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

ただいまの
回答率

88.92%

ナビにドロップダウンメニューを追加したいがうまく表示されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,582
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

ナビメニューに、マウスを合わせるとサブメニューが開くような
ドロップダウンメニューを追加したいが、
思ったような動作ができず、原因がわかりません。

http://www.dcom-web.co.jp/technology/css3_dropdownmenu/
こういったサイトにあるものがイメージに近いです。

スマホサイズで見ても同じ動きをつけたいです。

codepen

https://codepen.io/karujag/pen/OvWmEa

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

リロード時に一瞬ドロップダウンメニューが表示されますが、見えなくなってしまいます。
スマホサイトで表示した時は、右端に文字が重なって表示されています。

試したこと

ドロップダウンメニューを追加したい箇所に
<ul id="link-nav-drop"></ul>を追加しました。

補足:
<ul class="menu"></ul>で囲っている部分は
スマホサイトで見たときにメニューが収まるようになっています。

 ソースコード

<div class="navi">
  <div class="toggle"> <a href="#">Menu</a> </div>
  <ul class="menu">
    <li> <a href="#">リンク</a> </li>
    <li> <a href="#">リンク</a><!--親メニュー-->
      <ul id="link-nav-drop"><!--ドロップダウンメニューを追加したい部分-->
        <li> <a href="#">リンク</a> </li><!--親メニューの下に表示させたいメニュー-->
      </ul>
    </li>
    <li> <a href="#">リンク</a> </li>
    <li> <a href="#">リンク</a> </li>
    <li class="close"> <a href="#">Close</a> </li>
  </ul>
</div>
<script type="text/javascript">
$(function(){
    $(".toggle").click(function(){
        $(this).next().slideToggle();
    });
    $(".close").click(function(){
        $(this).parent().slideToggle();
            return false;
    });
 $(window).resize (function(){
    var win = $(window).width();
    var resp = 767;
    if(win > resp){
      $(".menu").show();
    } else {
      $(".menu").hide();
    }
  });
});
</script>
.clearfix::after {
        content: "";
        display: block;
        clear: both;
}

.navi {
        width: 100%;
        padding: 0;
        margin: 0 auto;
        margin-left: -500%;
        margin-right: -500%;
        padding-left: 500%;
        padding-right: 500%;
        filter: alpha(opacity=95);
        -moz-opacity: 0.95;
        opacity: 0.95;
        background: #1D3557;
        text-align: center;
}

.navi ul {
        padding: 0;
        overflow: hidden;
        list-style-type: none;
        margin: 0 auto;
        height: 50px;
}

.navi li {
        float: left;
        text-align: center;
        width: 20%;
        margin: 0;
}

.navi li a {
        display: block;
        margin: 0;
        line-height: 50px;
        padding: ;
        color: #fff;
        font-size: 16px;
        text-decoration: none;
        transition: 1s ease;
}

.navi a:hover {
        color: #fff;
        background: #E63946;
}

.toggle,
.close {
        display: none;
}

.search-form {
        margin: 0;
}

.menu #link-nav li {
        position: relative;
}

a:hover+#link-nav-drop {
        display: block;
}

#link-nav-drop {
        display: none;
        position: absolute;
        right: 0;
        height: auto;
        overflow: hidden;
        width: 100%;
        background-color: #000;
}

@media only screen and (min-width: 767px) {
        .navi>ul {
                padding: 0;
                margin: 0;
                width: 100%;
                margin-bottom: 30px;
                display: block;
        }
        .navi>ul>li {
                box-sizing: border-box;
                width: calc(100% / 5);
                height: 50px;
                line-height: 50px;
                border-left: 1px solid white;
                color: white;
                float: left;
                list-style-type: none;
                text-align: center;
                position: relative;
                transition: box-shadow .3s ease-in-out;
        }
        .navi>ul>li:first-child() {
                border-left: 0;
        }
        .navi>ul>li>a {
                color: white;
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
        }
}

@media only screen and (max-width: 767px) {
        .menu {
                display: none;
                width: 100%;
        }
        .navi li {
                width: 100%;
        }
        .navi-search {
                display: none;
        }
        .menu .inmenu {
                display: block;
                padding: 12px 10px;
                color: #fff;
                text-decoration: none;
        }
        .toggle {
                display: block;
                position: relative;
                width: 100%;
        }
        .close {
                display: block;
                position: relative;
                width: 100%;
        }
        .toggle a {
                display: block;
                padding: 12px 0 10px;
                color: #fff;
                text-align: center;
                text-decoration: none;
        }
        .toggle:before {
                position: absolute;
                font-family: "blogicon";
                content: "\f003";
                top: 50%;
                right: 10px;
                width: 20px;
                height: 20px;
                margin-top: -10px;
                color: #fff;
        }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kszk311

    2018/03/19 22:23

    幅が767px以下の時に、リロードするとメニューが見えてしまう、ということでいいですか?ちなみに「すぐ見えなくなってしまう」という現象は再現しませんでした。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/03/20 01:36 編集

    説明が不足しており、申し訳ありません。 ナビゲーションに関係するCSSの部分を全て書きました。 私の環境ですと、幅が767px以上で、 リロードするとメニューが一瞬だけ表示されるものの 見えなくなってしまい、(マウスを重ねたら見えるようにしたいのですが うまく動作しません)、幅が767px以下になると、メニュー右端に文字が表示されてしまいます。 (親メニューの下にマウスを重ねたら表示させる動きをつけたいです)

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/03/20 10:02 編集

    ありがとうございます。 .navi>ulと.navi ulのoverflow: hidden;を削除しました。 「.navi>ul>liにfloat: left;がかかっているので、回りこみ解除をclearfixにする」の部分、 <ul class="menu">にclearfixを追加しましたが大丈夫でしょうか? 「top(ヘッダーの高さ)とwidth(100%?)を指定」は、ヘッダーの高さがよくわかりませんでした。CSSに.naviに高さを指定したら良いのでしょうか? codepenを作成しましたが、実現したい動きがなかなか表現できません。高さを指定していないためかと思いますが、重なってしまい、うまく実現したい動きが表示できていない状態です。

    キャンセル

回答 2

checkベストアンサー

+1

記載時のミスかもしれませんが

@media only screen and (min-width: 767px) {

ここ「@」つけておいて下さい。

原因は、overflowです。
.navi>ul.navi uloverflow: hidden;がかかっています。
.navi>ul>lifloat: left;がかかっているので、回りこみ解除をclearfixにするか、flexで組むのがいいと思います。

その上で、#link-nav-dropに背景色をつけ、
top(ヘッダーの高さ)とwidth(100%?)を指定すれば良いかと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

何をされたいのかイマイチ伝わってこないのですが、
ホバー時に現れて欲しいメニューが現れないというのであれば、それはcssのheight:0;が原因です。

.menu #link-nav li {
  position: relative;
}
a:hover + #link-nav-drop {
  display: block;
  height:auto;/*ここで高さを持たせてあげれば良いです*/
}
#link-nav-drop {
  display: none;
  position: absolute;
  right: 0;
  height: 0;
  overflow: hidden;
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/03/20 01:39

    説明が不足しており申し訳ありません。実現したいことを再度記入いたしました。
    heightに関しても修正いたしました。ありがとうございます。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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