scss 汉堡菜单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scss 汉堡菜单相关的知识,希望对你有一定的参考价值。

<?php
  // Custom walker for menu toggles
  class Mobile_Walker extends Walker_Nav_Menu {
      public function start_lvl( &$output, $depth = 0, $args = array() ) {
          $indent = str_repeat("\t", $depth);
          $output .= '<span class="menu-item-sub-menu js-toggle-subnav"><i></i></span>';
          $output .= "\n$indent<ul class=\"sub-menu\">\n";
         }
  }
    
  // Register navigation
	function setup_navs() {
	    register_nav_menus( array(
	        'primary_menu' => 'Primary navigation',
	    ) );
	}
	add_action( 'after_setup_theme', 'setup_navs' );
    function setupMobile() {
        $('.menu-button').on('click', function(e){
            e.preventDefault();
            $this = $(this);

            if( $this.hasClass('active') ) {
                $this.removeClass('active').addClass('temp-ani');
                setTimeout( function() {
                    $this.addClass('animation').addClass('temp-ani');
                }, 5 );
            }else{
                $this.removeClass('animation');
                setTimeout( function() {
                    $this.addClass('active');
                }, 5);
            }
            $this.next().toggleClass('active');
        });

        $('.menu a').on('click', function(){
            $this = $('.menu-button');
            $this.removeClass('active').addClass('temp-ani');
            setTimeout( function() {
                $this.addClass('animation').addClass('temp-ani');
            }, 5 );
            $this.next().toggleClass('active');
        });
        
        // Toggle submenu
        $('.js-toggle-subnav').on('click', function() {
            $(this).parent('li').toggleClass('active');
        });   

    }

        <button href="#" class="menu-button hide-desktop">
            <span class="menu-button__before"></span>
            <span class="menu-button__middle"></span>
            <span class="menu-button__after"></span>
        </button>
        <nav class="menu">
            <?php wp_nav_menu( array('theme_location' => 'primary_menu', 'container' => '', 'menu_class' => '', 'walker' => new Mobile_Walker() ) ); ?>
        </nav>
@media ($belowtablet) {
  .menu {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background: rgba( 255, 255, 255, .9 );
    padding-top: 100px;
    opacity: 0;
    pointer-events: none;
    transition: 300ms;
    z-index: 10;

    &.active {
      pointer-events: auto;
      opacity: 1;

      li {
        opacity: 1;
        left: 0;
      }

    }

    li {
      display: block;
      text-align: center;
      margin: 0 0 50px;
      opacity: 0;
      left: -10%;
      transition: 300ms;
      position: relative;

      @for $i from 1 through 20 {
        &:nth-child( #{$i} ) {
          transition-delay: #{$i*100}ms;
        }
      }

    }

    &-button {
      border: 3px solid black;
      background: none;
      border-radius: 5px;
      display: block;
      position: absolute;
      right: 20px;
      top: 20px;
      height: 40px;
      width: 40px;
      z-index: 11;

      &__before {
        position: absolute;
        top: 7px;
        left: 10%;
        right: 10%;
        height: 4px;
        background: black;
      }

      &__middle {
        top: 15px;
        left: 10%;
        right: 10%;
        background: black;
        position: absolute;
        height: 4px;
      }

      &__after {
        bottom: 7px;
        left: 10%;
        right: 10%;
        background: black;
        height: 4px;
        position: absolute;
      }

    }

  }

  .active {

    .menu-button__before {
      animation-name: menuButtonTop;
      animation-duration: .5s;
      animation-direction: normal;
      top: 15px;
      transform: rotate( 45deg );
    }

    .menu-button__middle {
      animation-name: menuButtonMiddle;
      animation-duration: .5s;
      animation-direction: normal;
      opacity: 0;
    }

    .menu-button__after {
      animation-name: menuButtonBottom;
      animation-duration: .5s;
      animation-direction: normal;
      bottom: 15px;
      transform: rotate( -45deg );
    }

  }

  .tmp-ani {

    .menu-button__before {
      top: 15px;
      transform: rotate( 45deg );
    }

    .menu-button__middle {
      opacity: 0;
    }

    .menu-button__after {
      bottom: 15px;
      transform: rotate( -45deg );
    }

  }

  .animation {

    .menu-button__before {
      animation-name: menuButtonTop;
      animation-duration: .5s;
      animation-direction: reverse;
    }

    .menu-button__middle {
      animation-name: menuButtonMiddle;
      animation-duration: .5s;
      animation-direction: reverse;
    }

    .menu-button__after {
      animation-name: menuButtonBottom;
      animation-duration: .5s;
      animation-direction: reverse;
    }

  }
}

@keyframes menuButtonTop {
  0% {
    top: 7px;
    transform: rotate( 0deg );
  }
  50% {
    top: 15px;
    transform: rotate( 0deg );
  }
  100% {
    top: 15px;
    transform: rotate( 45deg );
  }
}

@keyframes menuButtonMiddle {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 1;
  }
  51% {
    opacity: 0;
  }
  100% {
    opacity: 0;
  }
}

@keyframes menuButtonBottom {
  0% {
    bottom: 7px;
    transform: rotate( 0deg );
  }
  50% {
    bottom: 15px;
    transform: rotate( 0deg );
  }
  100% {
    bottom: 15px;
    transform: rotate( -45deg );
  }
}

以上是关于scss 汉堡菜单的主要内容,如果未能解决你的问题,请参考以下文章

scss SCSS - 移动汉堡包

scss CSS只有汉堡包

scss 轻松创建汉堡包按钮。

scss Sass汉堡到“x”关闭

scss 汉堡动画

javascript [汉堡菜单]汉堡菜单切换与annimation #js