ссылки на панели навигации по-прежнему активны, но невидимы, когда меню "закрыто" - PullRequest
2 голосов
/ 14 июля 2020

Я использую шаблон панели навигации, но у меня проблема, когда ссылки панели навигации все еще существуют на странице и доступны для нажатия, даже когда панель навигации «закрыта». с помощью скрипта, изменяя существующий, но я действительно не уверен, как это сделать.

Как лучше всего скрыть ссылки или временно избавиться от них, когда панель навигации закрыта?

var $header_top = $('.header-top');
var $nav = $('nav');

$header_top.find('a').on('click', function() {
  $(this).parent().toggleClass('open-menu');
});
  a {
  text-decoration: none;
  color: white;
}

ul,
li {
  list-style-type: none;
}

.clearfix:before,
.clearfix:after {
  content: "";
  display: table;
}

.clearfix:after {
  clear: both;
}

.l-left {
  float: left;
}

.l-right {
  float: right;
}

.end {
  margin-top: 30px;
  font-size: 3em;
  font-weight: bold;
  opacity: 0;
  -webkit-transform: translateY(300px);
  transform: translateY(300px);
  transition: opacity, -webkit-transform 1s;
  transition: opacity, transform 1s;
  transition: opacity, transform 1s, -webkit-transform 1s;
  transition-delay: 1s;
}

.header-top {
  background: white;
  height: 70px;
  padding: 0 10px;
  position: fixed;
  top: 0;
  width: 100%;
  min-width: 300px;
  z-index: 12;
  box-sizing: border-box;
}

h1 {
  line-height: 70px;
  height: 70px;
}

h1 a {
  color: red;
  padding: 0 10px;
  font-family: "arial black";
  font-size: 35px;
}

.first-letter {
  color: red;
  padding: 0px;
  font-family: "arial black";
  font-size: 45px;
}

.toggle-menu {
  width: 50px;
  height: 50px;
  display: inline-block;
  position: relative;
  top: 10px;
}

.toggle-menu i {
  position: absolute;
  display: block;
  height: 2px;
  background: red;
  width: 30px;
  left: 10px;
  transition: all .3s;
}

.toggle-menu i:nth-child(1) {
  top: 16px;
}

.toggle-menu i:nth-child(2) {
  top: 24px;
}

.toggle-menu i:nth-child(3) {
  top: 32px;
}

.open-menu i:nth-child(1) {
  top: 25px;
  -webkit-transform: rotateZ(45deg);
  transform: rotateZ(45deg);
}

.open-menu i:nth-child(2) {
  background: transparent;
}

.open-menu i:nth-child(3) {
  top: 25px;
  -webkit-transform: rotateZ(-45deg);
  transform: rotateZ(-45deg);
}

nav {
  height: 0;
  opacity: 0;
  box-sizing: border-box;
  background: rgba(0, 47, 77, .25);
  position: fixed;
  top: 70px;
  width: 100%;
  transition: all 1s;
}

.open-menu~nav {
  opacity: 1;
  padding: 80px 0;
  z-index: 15;
  height: calc(90vh - 70px);
}

nav ul {
  padding: 0 10px;
  display: flex;
}

nav li {
  flex: 1;
}

nav li a {
  font-size: 2em;
  display: block;
  padding: 30px;
  text-align: center;
  transition: background .3s;
}

nav li a {
  background: #ff4b4b;
  margin-left: 20px;
}

nav li a:hover {
  background: #ADD8E6;
}


/*These 3 sections add the drop dwon menus in the headers*/

ul li ul.services-dropdown {
  display: none;
  z-index: 999;
  width: 100%;
}

ul li:hover ul.services-dropdown {
  display: inline-block;
  /* Display the dropdown */
}

ul li ul.services-dropdown li {
  display: block;
}

section {
  text-align: center;
}

h2 {
  font-size: 13px;
}

h2 a {
  padding: 8 8 8 8px;
  float: left;
  color: white;
  background-color: red;
  font-family: 'Open Sans';
  font-weight: bold;
}

h3 {
  font-weight: bold;
  font-size: 60px;
  color: white;
}

#fp-nav ul li a span,
.fp-slidesNav ul li a span {
  background: white;
  width: 8px;
  height: 8px;
  margin: -4px 0 0 -4px;
}

#fp-nav ul li a.active span,
.fp-slidesNav ul li a.active span,
#fp-nav ul li:hover a.active span,
.fp-slidesNav ul li:hover a.active span {
  width: 16px;
  height: 16px;
  margin: -8px 0 0 -8px;
  background: transparent;
  box-sizing: border-box;
  border: 2px solid #212121;
}

@media (max-width: 700px) {
  .edit-name {
    display: none;
  }
}


/*Removes the tel and email when window is narrow */

@media (max-width: 1230px) {
  .narrow-hide {
    display: none;
  }
}


/*Edits the nav bar when window is narrow */

@media screen and (max-width: 767px) {
  nav ul {
    flex-direction: column;
  }
  nav li {
    margin-top: 1px;
  }
  nav li a {
    font-size: 1.5em;
  }
  .scroll-icon {
    display: none;
  }
  @media screen and (max-width: 400px) {
    html {
      font-size: 50%;
    }
    .open-menu~nav {
      padding: 20px 0;
    }
    nav li a {
      padding: 3px;
    }
  }
<header>
  <div class="header-top clearfix">
    <a class="l-right toggle-menu" href="#">
      <i></i>
      <i></i>
      <i></i>
    </a>
  </div>
  <nav class="hide">
    <ul id="menu">
      <li>
        <a href="https://www.google.com ">Home</a>
          </li>
          <li>
            <a href="https://www.google.com "> Services</a>
                 <ul class="services-dropdown ">
                    <li><a href="https://www.google.com ">whats</a>   </li>
                    <li><a href="https://www.google.com ">Stuff</a></li>
                    <li><a href="https://www.google.com ">Things</a></li>
                </ul>
          </li>
          <li>
            <a href="https://www.google.com ">News & Events</a>
          </li>
          <li>
            <a href="https://www.google.com ">Contact Us</a>
          </li>
          <li>
            <a href="https://www.google.com ">Data Protection</a>
          </li>
          <li>
            <a href="https://www.google.com ">Data Protection</a>
          </li>                               
        </ul>
      </nav>
    </header>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js "></script>

Codepen: https://codepen.io/Ribeye/pen/BajOoeb

Ответы [ 3 ]

3 голосов
/ 14 июля 2020

Просто добавьте overflow: hidden к nav, и это будет исправлено;

nav {
    overflow: hidden;
}

Вы установили height: 0 и opacity: 0, но содержимое все еще переполняется, и единственная причина, по которой это не так visible - это свойство opacity: 0, которое просто делает его прозрачным, поэтому на него можно нажимать.

1 голос
/ 14 июля 2020

Вы должны добавить pointer-events: none к .nav и pointer-events: auto к .open-menu ~ nav

auto

Элемент ведет себя так, как если бы свойство pointer-events не указано. В содержимом SVG это значение и значение visiblePainted имеют одинаковый эффект.

none

Элемент никогда не является target указателя События; однако события указателя могут быть нацелены на его дочерние элементы, если для этих потомков pointer-events установлено какое-то другое значение. В этих обстоятельствах события указателя будут запускать прослушиватели событий на этом родительском элементе по мере необходимости на их пути к / от потомка во время захвата события / пузырь фаз.

Ссылка

var $header_top = $('.header-top');
var $nav = $('nav');
 
$header_top.find('a').on('click', function() {
  $(this).parent().toggleClass('open-menu');
});
/* added */
nav {
  pointer-events: none;
}

.open-menu~nav {
  pointer-events: auto;
}
/*****/

a {
  text-decoration: none;
  color: white;
}

ul,
li {
  list-style-type: none;
}

.clearfix:before,
.clearfix:after {
  content: "";
  display: table;
}

.clearfix:after {
  clear: both;
}

.l-left {
  float: left;
}

.l-right {
  float: right;
}

.end {
  margin-top: 30px;
  font-size: 3em;
  font-weight: bold;
  opacity: 0;
  -webkit-transform: translateY(300px);
  transform: translateY(300px);
  transition: opacity, -webkit-transform 1s;
  transition: opacity, transform 1s;
  transition: opacity, transform 1s, -webkit-transform 1s;
  transition-delay: 1s;
}

.header-top {
  background: white;
  height: 70px;
  padding: 0 10px;
  position: fixed;
  top: 0;
  width: 100%;
  min-width: 300px;
  z-index: 12;
  box-sizing: border-box;
}

h1 {
  line-height: 70px;
  height: 70px;
}

h1 a {
  color: red;
  padding: 0 10px;
  font-family: "arial black";
  font-size: 35px;
}

.first-letter {
  color: red;
  padding: 0px;
  font-family: "arial black";
  font-size: 45px;
}

.toggle-menu {
  width: 50px;
  height: 50px;
  display: inline-block;
  position: relative;
  top: 10px;
}

.toggle-menu i {
  position: absolute;
  display: block;
  height: 2px;
  background: red;
  width: 30px;
  left: 10px;
  transition: all .3s;
}

.toggle-menu i:nth-child(1) {
  top: 16px;
}

.toggle-menu i:nth-child(2) {
  top: 24px;
}

.toggle-menu i:nth-child(3) {
  top: 32px;
}

.open-menu i:nth-child(1) {
  top: 25px;
  -webkit-transform: rotateZ(45deg);
  transform: rotateZ(45deg);
}

.open-menu i:nth-child(2) {
  background: transparent;
}

.open-menu i:nth-child(3) {
  top: 25px;
  -webkit-transform: rotateZ(-45deg);
  transform: rotateZ(-45deg);
}

nav {
  height: 0;
  opacity: 0;
  box-sizing: border-box;
  background: rgba(0, 47, 77, .25);
  position: fixed;
  top: 70px;
  width: 100%;
  transition: all 1s;
}

.open-menu~nav {
  opacity: 1;
  padding: 80px 0;
  z-index: 15;
  height: calc(90vh - 70px);
}

nav ul {
  padding: 0 10px;
  display: flex;
}

nav li {
  flex: 1;
}

nav li a {
  font-size: 2em;
  display: block;
  padding: 30px;
  text-align: center;
  transition: background .3s;
}

nav li a {
  background: #ff4b4b;
  margin-left: 20px;
}

nav li a:hover {
  background: #ADD8E6;
}


/*These 3 sections add the drop dwon menus in the headers*/

ul li ul.services-dropdown {
  display: none;
  z-index: 999;
  width: 100%;
}

ul li:hover ul.services-dropdown {
  display: inline-block;
  /* Display the dropdown */
}

ul li ul.services-dropdown li {
  display: block;
}

section {
  text-align: center;
}

h2 {
  font-size: 13px;
}

h2 a {
  padding: 8 8 8 8px;
  float: left;
  color: white;
  background-color: red;
  font-family: 'Open Sans';
  font-weight: bold;
}

h3 {
  font-weight: bold;
  font-size: 60px;
  color: white;
}

#fp-nav ul li a span,
.fp-slidesNav ul li a span {
  background: white;
  width: 8px;
  height: 8px;
  margin: -4px 0 0 -4px;
}

#fp-nav ul li a.active span,
.fp-slidesNav ul li a.active span,
#fp-nav ul li:hover a.active span,
.fp-slidesNav ul li:hover a.active span {
  width: 16px;
  height: 16px;
  margin: -8px 0 0 -8px;
  background: transparent;
  box-sizing: border-box;
  border: 2px solid #212121;
}

@media (max-width: 700px) {
  .edit-name {
    display: none;
  }
}


/*Removes the tel and email when window is narrow */

@media (max-width: 1230px) {
  .narrow-hide {
    display: none;
  }
}


/*Edits the nav bar when window is narrow */

@media screen and (max-width: 767px) {
  nav ul {
    flex-direction: column;
  }
  nav li {
    margin-top: 1px;
  }
  nav li a {
    font-size: 1.5em;
  }
  .scroll-icon {
    display: none;
  }
  @media screen and (max-width: 400px) {
    html {
      font-size: 50%;
    }
    .open-menu~nav {
      padding: 20px 0;
    }
    nav li a {
      padding: 3px;
    }
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<header>
  <div class="header-top clearfix">
    <a class="l-right toggle-menu" href="#">
      <i></i>
      <i></i>
      <i></i>
    </a>
  </div>

  <nav class="hide">
    <ul id="menu">
      <li>
        <a href="https://www.google.com ">Home</a>
      </li>
      <li>
        <a href="https://www.google.com "> Services</a>
        <ul class="services-dropdown ">
          <li><a href="https://www.google.com ">whats</a> </li>
          <li><a href="https://www.google.com ">Stuff</a></li>
          <li><a href="https://www.google.com ">Things</a></li>
        </ul>
      </li>

      <li>
        <a href="https://www.google.com ">News & Events</a>
      </li>
      <li>
        <a href="https://www.google.com ">Contact Us</a>
      </li>
      <l>
        <a href="https://www.google.com ">Data Protection</a>
      </l>
      <l>
        <a href="https://www.google.com ">Data Protection</a>
      </l>

    </ul>
  </nav>
</header>
0 голосов
/ 14 июля 2020

Вам просто нужно установить свойство overflow: hidden в элементе nav

...