How to make hovering over active button not use hover effect?

后端 未结 2 519
眼角桃花
眼角桃花 2021-01-26 05:25

I have a navigation bar that has a hover effect for the buttons. Also whenever a page is active that button has a border on the right to show that it\'s the page that is current

相关标签:
2条回答
  • 2021-01-26 06:12

    As @Pete said, your HTML is invalid. But you can exclude the .activePage class using :not() with your :hover selector.

    So instead of li:hover use .noselect:not(.activePage) li:hover

    //Menu
    $(function() {
        function expand() {
            $(this).toggleClass("on");
            $(".menu").toggleClass("active");
        };
    
        $('.noselect').click(function() {
            $('.noselect').removeClass('activePage');
            $(this).toggleClass('activePage');
        });
    
        $(".button").on('click', expand);
    });
    body {
      font-family: "Source Sans Pro", sans-serif;
      color: #ccc;
      z-index: -100;
      background-color: black;
      overflow: hidden;
      text-align: center;
    }
    
    .menu {
      position: fixed;
      top: 0;
      left: 0;
      bottom: 0;
      padding: 0;
      overflow: hidden;
      background: rgba(0, 0, 0, 0.6);
      width: 250px;
      box-sizing: border-box;
      transition: all 250ms;
      -webkit-transform: translateZ(0) translateX(-100%);
      transform: translateZ(0) translateX(-100%);
      text-align: center;
      box-shadow: 0 0 10px #000;
    }
    
    .active {
      transform: translateZ(0) translateX(0);
      transform: translateZ(0) translateX(0);
      -webkit-transition: 0.4s;
      transition: 0.4s;
      color: #e5e5e5;
    }
    
    ul {
      padding: 0;
      list-style: none;
      font-size: 14px;
    }
    
    li {
      box-sizing: border-box;
      -moz-box-sizing: border-box;
      -webkit-box-sizing: border-box;
      font-family: "Raleway";
      width: 250px;
      padding: 40px 5px;
      color: #a7a7a7;
      font-size: 1.8em;
      font-weight: 300;
      cursor: pointer;
      transition: all .4s ease-in-out;
    }
    
    .noselect:not(.activePage) li:hover {
      color: white;
      background-color: #38d8b4;
      -o-transition: .6s;
      -ms-transition: .6s;
      -moz-transition: .6s;
      -webkit-transition: .6s;
      transition: .6s;
    }
    
    .liSeperator {
      width: 100%;
      padding: 1px;
      color: (0, 0, 0, .4);
    }
    
    .content {
      position: relative;
      width: 240px;
    }
    
    .button {
      width: 22px;
      height: 40px;
      margin: 80px 97px;
      padding: 10px;
      cursor: pointer;
      transition: all .2s ease-in-out;
    }
    
    .button:hover {
      transform: scale(1.2);
    }
    
    .line {
      width: 40px;
      height: 2px;
      background-color: #fff;
      transition: transform 0.3s ease, background 0.3s ease, opacity 0.3s ease, top 0.3s ease;
    }
    
    .line.first {
      transform: translateX(-10px) translateY(22px) rotate(-90deg);
    }
    
    .line.second {
      transform: translateX(-10px) translateY(19px) rotate(0deg);
    }
    
    .button.on .line.top {
      width: 40px;
      transform: translateX(-10px) translateY(20px) rotate(45deg);
    }
    
    .button.on .line.bottom {
      width: 40px;
      transform: translateX(-10px) translateY(17px)rotate(-45deg);
    }
    
    .activePage li {
      transition: all .1s ease-in-out;
      color: white;
      border-right: 8px solid #38d8a1;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="wrapper">
      <div class="menu">
        <h1 class="noselect">MENU</h1>
        <ul>
          <div id="home" class="noselect" onclick="homeTransition()">
            <li>
              <i class="fa fa-home"></i> home
            </li>
          </div>
          <div class="liSeperator"></div>
          <div id="about" class="noselect" onclick="aboutTransition()">
            <li>
              <i class="fa fa-user"></i> about
            </li>
          </div>
          <div class="liSeperator"></div>
          <div id="projects" class="noselect" onclick="projectsTransition()">
            <li>
              <i class="fa fa-code"></i> projects
            </li>
          </div>
          <div class="liSeperator"></div>
          <div id="contact" class="noselect" onclick="contactTransition()">
            <li>
              <i class="fa fa-paper-plane"></i> contact
            </li>
          </div>
        </ul>
      </div>
      <div class="content animated fadeInDown">
        <div class="button">
          <div class="line first top"></div>
          <div class="line second bottom"></div>
        </div>
      </div>

    0 讨论(0)
  • 2021-01-26 06:18

    You can add the following to your CSS:

     .activePage li:hover {
       border-right: 8px solid #38d8a1;
       background: black;
     }
    

    This will keep your border-right: and background the same and not trigger the hover effect that your other li elements receive.

    Working Fiddle - https://fiddle.jshell.net/0nw77chv/ (CSS added at the bottom)

    0 讨论(0)
提交回复
热议问题