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

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

ただいまの
回答率

87.37%

ハンバーガーメニューが勝手に閉じる

解決済

回答 1

投稿

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

score 8

前提・実現したいこと

検証ツールのレスポンシブで確認してもハンバーガーメニューが勝手に閉じないようにしたい。

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

検証ツールを使わず画面サイズを小さくして確認するとハンバーガーメニューは普通に開閉できます。
検証ツール(例えば320px)では一瞬開くのですが、すぐに勝手に閉じます。

(検証ツールを使わなくても時々同様の問題が起きますが、スーパーリロードをすると戻ります。)

該当のソースコード

<header class="header">
    <div class="header_logo">
      <a href="">
        <img src="img/logo (2).svg" alt="Engress">
      </a>
    </div>
    <nav class="header_nav" id="header_nav">
      <nav class="header-sp-nav">
        <ul class="header-sp-menu">
          <li class="header-sp-menu-list"><a href="">ホーム</a></li>
          <li class="header-sp-menu-list"><a href="">お知らせ</a></li>
          <li class="header-sp-menu-list"><a href="">ブログ</a></li>
          <li class="header-sp-menu-list"><a href="">コース・料金</a></li>
        </ul>
        <div class="header_sp-btn-box">
          <a href="">
            <div class="square-request-btn header_sp-btn">
              <span class="square-request-btn-text">
                資料請求
              </span>
            </div>
          </a>
          <a href="">
            <div class="contact-btn header_sp-btn">
              <span class="contact-btn-text">
                お問い合わせ
              </span>
            </div>
          </a>
        </div>
      </nav>
      <div class="ham" id="ham"><a href="">
        <span class="ham-line ham-line1"></span>
        <span class="ham-line ham-line2"></span>
        <span class="ham-line ham-line3"></span>
      </a></div>
      <div class="black-bg" id="js-black-bg"></div>
      <ul class="header_list">
        <li class="header_list-item"><a href="" class="p">ホーム</a></li>
        <li class="header_list-item"><a href="" class="p">お知らせ</a></li>
        <li class="header_list-item"><a href="" class="p">ブログ</a></li>
        <li class="header_list-item"><a href="" class="p">コース・料金</a></li>
      </ul>
      <div class="header_right">
        <div class="tel-box">
          <small class="tel-hour">平日08:00〜20:00</small>
          <p class="tel-number"><a href="tel:0123-456-7890" class="p">0123-456-7890</a></p>
        </div>
        <a href="">
          <div class="square-request-btn header_pc-btn">
            <span class="square-request-btn-text">
              資料請求
            </span>
          </div>
        </a>
        <a href="">
          <div class="contact-btn header_pc-btn">
            <span class="contact-btn-text">
              お問い合わせ
            </span>
          </div>
        </a>
      </div>
    </nav>
  </header>
//style.scss

@charset 'utf-8';

/*
html5doctor.com Reset Stylesheet
v1.6.1
Last Updated: 2010-09-17
Author: Richard Clark - http://richclarkdesign.com
Twitter: @rich_clark
*/

...

// reset CSS ここまで

@function vw($width, $px) {
  @return $px / $width * 100vw;
}

@function vh($height, $px) {
  @return $px / $height * 100vh;
}

$bpc: 1600px; //PC大画面
$spc: 1280px; // PC通常
$ipad: 768px; // iPad
$sp: 375px; // スマホ

@mixin sp {
  @media screen and (min-width: $sp) {
    @content;
  }
}

@mixin ipad {
  @media screen and (min-width: $ipad) {
    @content;
  }
}

@mixin spc {
  @media screen and (min-width: $spc) {
    @content;
  }
}

@mixin bpc {
  @media screen and (min-width: $bpc) {
    @content;
  }
}

$navyBlue: #1B224C;
$yellowOrange: #F5A623;
$thinGray: #D5D5D5;
$moreThinGray: #F8F8F8;
$white: #FFFFFF;

html {
  font-size: 62.5%;
  /* -> 10px; */
}

body {
  font-family: "游ゴシック体", "游ゴシック", "Yu Gothic", "YuGothic", "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
}

h1 {
  font-size: 4rem;
  font-weight: bold;
  line-height: 1.3;
  color: $navyBlue;

  @include spc {
    font-size: 4.8rem;
    line-height: 1.4;
  }
}

h2 {
  font-weight: bold;
  line-height: 1.4;
  font-size: 2.1rem;
  color: $navyBlue;

  @include spc {
    font-size: 3.6rem;
  }
}

h3 {
  font-size: 2rem;
  font-weight: bold;
  line-height: 1.7;
  color: $navyBlue;

  @include spc {
    font-size: 3.2rem;
  }
}

h4 {
  font-weight: bold;
  line-height: 1.5;
  font-size: 1.8rem;
  color: $navyBlue;

  @include spc {
    font-size: 2.6rem;
  }
}

h5 {
  font-size: 1.8rem;
  font-weight: 200;
  line-height: 1.5;
  color: $navyBlue;

  @include spc {
    line-height: 1.7;
  }
}

p,
.p {
  font-size: 1.5rem;
  font-weight: 200;
  line-height: 1.5;
  color: $navyBlue;

  @include spc {

    line-height: 1.7;
    font-size: 1.6rem;
  }
}

small {
  font-size: 1.2rem;
  font-weight: 200;
  line-height: 1.7;
  color: $navyBlue;
}

a {
  text-decoration: none;

  &:hover {
    opacity: .8;
  }
}

ul {
  list-style: none;
}

.smallDone {
  display: block;

  @include spc {
    display: none;
  }
}

.smallNone {
  display: none;

  @include spc {
    display: block;
  }
}

.container {
  margin: 0 auto;
  max-width: 1600px;
  width: 90%;

  @include ipad {
    width: vw(1280, 900);
  }
}
//header.scss

@charset "utf-8";

@import 'style.scss';

.header {
  display: flex;
  align-items: center;
  height: 5rem;
  position: fixed;
  background-color: $white;
  width: 100%;

  @include ipad {
    height: 8rem;
  }
}

.header_logo {
  margin: auto 0;
  margin-left: .5rem;

  @include ipad {
    margin-left: 1.5rem;
  }

  a {
    img {
      width: 10rem;
      height: auto;

      @include ipad {
        width: 13.6rem;
        height: 2.7rem;
      }
    }
  }
}

.header_nav {
  margin-left: auto;
  display: flex;
  align-items: center;

  @include spc {
    width: 100%;
  }
}

.header-sp-nav {
  width: 100%;
  max-width: 250px;
  height: 100%;
  background-color: $navyBlue;
  position: fixed;
  top: 0;
  right: 0;
  z-index: 10;
  transform: translate(250px);
  transition: all .5s;
}

.header-sp-nav.open {
  transform: translate(0);
}

.header-sp-menu {
  // padding-top: 5rem;

  @include ipad {
    // padding-top: 8rem;
  }
}

.header-sp-menu-list {
  margin: 5rem 4rem;

  a {
    color: $white;
    font-size: 1.6rem;
    font-weight: bold;
  }
}

.header_sp-btn-box {
  display: flex;
}

.header_sp-btn {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 10rem;
  height: 4rem;
  background-color: $yellowOrange;
  margin-left: 2rem;

  @include spc {
    display: none;
  }
}

.ham {
  width: 4em;
  height: 4em;
  cursor: pointer;
  position: relative;
  z-index: 20;

  @include spc {
    display: none;
  }
}

.ham-line {
  position: absolute;
  left: 1em;
  width: 2em;
  height: 0.2em;
  background-color: $navyBlue;
  transition: all 0.3s;
}

.ham-line.open {
  background-color: $white;
}

.ham-line1 {
  top: 1em;
}

.ham-line1.open {
  transform: rotate(45deg);
  top: 2em;
}

.ham-line2 {
  top: 1.8em;
}

.ham-line2.open {
  width: 0;
}

.ham-line3 {
  top: 2.6em;
}

.ham-line3.open {
  transform: rotate(-45deg);
  top: 2em;
}

.black-bg {
  position: fixed;
  left: 0;
  top: 0;
  width: 100vw;
  height: 100vh;
  z-index: 5;
  background-color: #000;
  opacity: 0;
  visibility: hidden;
  transition: all .6s;
  cursor: pointer;
}

.black-bg.open {
  opacity: .8;
  visibility: visible;
}

.header_list {

  @include spc {
    display: flex;
  }
}

.header_list-item {
  display: none;

  @include spc {
    display: block;
    margin-left: 2.8rem;
    font-weight: bold;
    line-height: 1.8;
  }

  a {
    color: $navyBlue;
  }
}

.header_right {
  display: none;
  margin-left: auto;

  @include spc {
    display: flex;
  }
}

.tel-box {

  @include spc {
    margin-right: 1.4rem;
  }
}

.tel-hour {
  color: $navyBlue;
}

.tel-number {

  a {
    color: $navyBlue;

    &::before {
      content: '';
      display: inline-block;
      background-image: url(../img/tel29.svg);
      background-repeat: no-repeat;
      background-position: center right;
      width: 3rem;
      height: 3rem;
      margin-right: .5rem;
      margin-bottom: .3rem;
      vertical-align: middle;
    }

    @include spc {
      font-weight: bold;
    }
  }
}

.header_pc-btn {
  display: none;

  @include spc {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 14rem;
    height: 5rem;
    margin-right: 1rem;
  }
}

.square-request-btn {
  font-size: 1.4rem;
  line-height: 1.7;
  font-weight: bold;
  border-radius: .5rem;
  background-color: $yellowOrange;
  color: $white;
}

.contact-btn {
  font-size: 1.4rem;
  font-weight: bold;
  line-height: 1.7;
  border-radius: .5rem;
  color: $white;

  @include spc {
    background-color: $navyBlue;
  }
}
$(function () {

  //ハンバーガーメニュー開閉
  $('.ham').on('click', function () {
    $('#js-black-bg').toggleClass('open');
    $('.header-sp-nav').toggleClass('open');
    $('.ham-line, .ham-line1, .ham-line2, .ham-line3').toggleClass('open');
  });

  //ハンバーガーメニューのナビリンククリック後自動で閉じる
  $('.header-sp-menu-list a').on('click', function () {
    $('.ham').click();
  });

  //背景とhamクリックで閉じる
  $('.ham, .black-bg').on('click', function () {
    if ($(this).hasClass("open")) {
      $('.ham').click();
    }
  });
});

試したこと

スーパーリロードをした。

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

scssとjQueryを使っています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

一瞬開くのですが、すぐに勝手に閉じます。

<a href="">に反応してページ遷移してしまっているのが、原因だと思います。クリックする位置の微妙な違いにより発生したりしなかったりしますね。

ひとまず、href属性値を"#"などに変えれば回避できると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/04/30 16:51

    できました!!
    ありがとうございます!

    キャンセル

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

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

関連した質問

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