【问题标题】:Navigation bar disappear on larger screen after clicked on mobile screen点击手机屏幕后,导航栏在大屏幕上消失
【发布时间】:2021-01-31 12:55:16
【问题描述】:

我有一个轮播和一个导航栏。当它显示在移动设备上时,导航栏会消失,汉堡图标会出现。当您单击汉堡包图标时,导航栏将切换。 问题是:如果我不点击汉堡图标,当我缩小或拉伸屏幕时,导航栏和汉堡图标消失/出现在右边,但如果在手机屏幕上我点击汉堡图标并关闭它,然后我拉伸屏幕,导航栏将在更大的屏幕上永远消失。我是新手,我真的不知道为什么。请帮我解决一下这个。非常感谢!

var src1 = "./images/icon-close.svg";
var src2 = "./images/icon-close.svg";


$('#mobile-nav-icon').click(
  function() {

    $('.navbar-list').slideToggle(200);
    $('.navbar-list').toggleClass("background");
    $('.navbar-list').toggleClass("selected");

    var src = $('#mobile-nav-icon').attr('src');
    if (src == src1) {
      $('#mobile-nav-icon').attr('src', src2);
    } else {
      $('#mobile-nav-icon').attr('src', src1);
    }
  }
);
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: 'Spartan', sans-serif;
  font-size: 62.5%;
}

.background {
  background-color: white;
}

.section1 {
  position: relative;
}

.nopadding {
  padding: 0 !important;
  margin: 0 !important;
}

.selected {
  box-shadow: 0 0 0 99999px rgba(0, 0, 0, .5);
}


/* navbar */

.navbar-list {
  list-style: none;
  width: 380%;
  height: 100px;
  display: block;
}

.navigation {
  position: absolute;
  top: 7%;
  left: 8%;
}

.navbar-brand {
  float: left;
  margin: 0 40px 0 3%;
  color: white;
  font-weight: 600;
  font-size: 2rem;
}

.navbar-item {
  display: inline-block;
  margin: 1.6% 3% 3%;
}

.navbar-link {
  color: white;
  font-size: 1.2rem;
}

#mobile-nav-icon {
  display: none;
  position: absolute;
  margin-top: 6%;
  cursor: pointer;
}

.navbar-link:hover {
  color: white;
  text-decoration: none;
}


/* reponsive */

@media (max-width:540px) {
  #mobile-nav-icon {
    margin-top: 6%;
    display: block;
  }
  .navbar-list {
    display: none;
    position: absolute;
    font-weight: 600;
    width: 300%;
    top: -30px;
    left: -30px;
    height: 100px;
  }
  .navbar-brand {
    margin-left: 150px;
  }
  .navbar-link {
    color: black;
  }
  .navbar-item {
    margin-top: 6%;
  }
  .navbar-item:first-child {
    margin-left: 10%;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<div class="row">
  <div class="col-lg-7 nopadding section1">

    <!-- carosel -->
    <div class="carousel slide" data-interval="false">
      <div class="carousel-inner">
        <div class="carousel-item active">
          <img src="https://img.webmd.com/dtmcms/live/webmd/consumer_assets/site_images/article_thumbnails/other/cat_relaxing_on_patio_other/1800x1200_cat_relaxing_on_patio_other.jpg" class="d-block w-100" alt="image-hero-1">
        </div>

      </div>
    </div>

    <!-- navbar -->
    <nav class="navigation">
      <a class="navbar-brand" href="#">room</a>
      <div class="navbar-list-button">
        <ul class="navbar-list">
          <li class="navbar-item">
            <a class="navbar-link" href="#">home</a>
          </li>
          <li class="navbar-item">
            <a class="navbar-link" href="#">shop</a>
          </li>
          <li class="navbar-item">
            <a class="navbar-link" href="#">about</a>
          </li>
          <li class="navbar-item">
            <a class="navbar-link" href="#">contact</a>
          </li>

        </ul>
        <img id="mobile-nav-icon" src="./images/icon-hamburger.svg" alt="icon-hamburger">

      </div>

    </nav>
 

  </div>

【问题讨论】:

    标签: javascript jquery css navigation toggle


    【解决方案1】:

    我不会使用 .slideToggle() 来显示或隐藏菜单,而是使用 toggleClass('showing')

    然后在媒体查询中定义 .showing 类,如下所示:

    @media (max-width:540px) {
        .navbar-list {
            display: none;
        }
        .navbar-list.showing {
            display: block;
        }
    }
    

    使用 .slideToggle() 打开然后关闭菜单,意味着当你再次扩大屏幕时,它仍然会关闭。

    但是通过使用 .toggleClass('showing') 可以打开菜单,通过添加 CSS 规则,这些规则只有在屏幕小于 540 像素时才会生效。当你关闭它时,这个类将被删除,所以 display: none 来自你更一般的媒体查询将重新发挥作用。当您扩大屏幕时,不会应用任何媒体查询,因此您将返回 display: block(菜单打开)。

    【讨论】:

    • 我还有 1 个问题。如果我单击汉堡包图标,导航栏将显示为白色背景。如果我不点击关闭它,当我拉伸屏幕时,导航仍然会出现在背景中。即使我不点击关闭图标,导航(带背景)仍然会在大屏幕上消失,我该如何做到这一点?谢谢。
    • 有趣的问题!您可以采用类似的方法,将“背景”和“选定”类的定义移动到媒体查询中。
    • 谢谢,它有效。如果你不介意,请帮我解决最后一个问题。如您所见,在移动屏幕上显示导航栏时,我有一个轮播图像和一个背景白色。我的问题是我无法管理旋转木马和导航栏背景的宽度在缩小或拉伸屏幕时总是彼此相等。请帮我解决这个问题。谢谢。
    • 我很乐意为您提供帮助,但是如果不知道您完成的设计应该是什么样子,很难给出一个可以帮助您学习的好答案。你有它的模型或草图吗?如果你能提供,我很乐意提出一个好的解决方案(也许通过聊天,因为这个线程越来越长并且与你原来的问题无关)。
    • 那将不胜感激。你能给我你的电子邮件或其他东西,以便我现在可以联系你吗?我在你的简历中看到了你的推特,但我似乎无法给你发消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2021-04-26
    • 2015-02-28
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多