Ribeye
Ribeye

Reputation: 49

navbar links still clickable but invisible when menu is "closed"

I am using a a navbar template but I am having an issue where the navbar links still exist on the page and are clickable even when the navbar is "closed".

I was thinking of maybe changing the class with the script, modifying the existing one but I actually am not sure how to do that.

What is the best way to hide the links or get rid of them temporarily when the navbar is closed?

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

Upvotes: 2

Views: 590

Answers (3)

doğukan
doğukan

Reputation: 27381

You should add pointer-events: none to .nav and pointer-events: auto to .open-menu ~ nav

auto

The element behaves as it would if the pointer-events property were not specified. In SVG content, this value and the value visiblePainted have the same effect.

none

The element is never the target of pointer events; however, pointer events may target its descendant elements if those descendants have pointer-events set to some other value. In these circumstances, pointer events will trigger event listeners on this parent element as appropriate on their way to/from the descendant during the event capture/bubble phases.

Ref

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>

Upvotes: 1

dantheman
dantheman

Reputation: 3814

You just need to set overflow: hidden property on the nav element

Upvotes: 0

Nico Shultz
Nico Shultz

Reputation: 1872

Just add overflow: hidden to nav and it will be fixed;

nav {
    overflow: hidden;
}

You've set height: 0 and opacity: 0, but the content still overflows and the only reason it's not visible is bacause of opacity: 0 property, that just makes it transparent so it's still clickable.

Upvotes: 3

Related Questions