当前位置: 代码网 > it编程>网页制作>Css > HTML+CSS3+JS 实现的下拉菜单

HTML+CSS3+JS 实现的下拉菜单

2020年11月25日 Css 我要评论
HTML+CSS3+JS 实现的下拉菜单这篇文章主要介绍了HTML+CSS3+JS 如何实现下拉菜单,帮助大家更好的理解和使用CSS3特效,感兴趣的朋友可以了解下... 20-11-25

实现效果

html

<div class="container">
  <h1 class="title">dropdown menu</h1>
  <ul>
    <li class="dropdown">
      <a href="#" data-toggle="dropdown">first menu <i class="icon-arrow"></i></a>
      <ul class="dropdown-menu">
        <li><a href="#">home</a></li>
        <li><a href="#">about us</a></li>
        <li><a href="#">services</a></li>
        <li><a href="#">contact</a></li>
      </ul>
    </li>
    <li class="dropdown">
      <a href="#" data-toggle="dropdown">second menu <i class="icon-arrow"></i></a>
      <ul class="dropdown-menu">
        <li><a href="#">home</a></li>
        <li><a href="#">about us</a></li>
        <li><a href="#">services</a></li>
        <li><a href="#">contact</a></li>
      </ul>
    </li>
    <li class="dropdown">
      <a href="#" data-toggle="dropdown">third menu <i class="icon-arrow"></i></a>
      <ul class="dropdown-menu">
        <li><a href="#">home</a></li>
        <li><a href="#">about us</a></li>
        <li><a href="#">services</a></li>
        <li><a href="#">contact</a></li>
      </ul>
    </li>
  </ul>
  <p class="text-center">
    see this same menu only with css3: <a href="https://codepen.io/pedronauck/pen/jaluz" target="_blank">https://codepen.io/pedronauck/pen/jaluz</a>
  </p>
</div>

css

@import url("https://fonts.googleapis.com/css?family=lato:300,400,700,900");
@import url(https://fonts.googleapis.com/css?family=pacifico);
body {
  font-family: "lato", helvetica, arial;
  font-size: 16px;
}

.text-center {
  text-align: center;
}

*, *:before, *:after {
  -webkit-border-sizing: border-box;
  -moz-border-sizing: border-box;
  border-sizing: border-box;
}

.container {
  width: 350px;
  margin: 50px auto;
}
.container > ul {
  list-style: none;
  padding: 0;
  margin: 0 0 20px 0;
}

.title {
  font-family: 'pacifico';
  font-weight: norma;
  font-size: 40px;
  text-align: center;
  line-height: 1.4;
  color: #2980b9;
}

.dropdown a {
  text-decoration: none;
}
.dropdown [data-toggle="dropdown"] {
  position: relative;
  display: block;
  color: white;
  background: #2980b9;
  -moz-box-shadow: 0 1px 0 #409ad5 inset, 0 -1px 0 #20638f inset;
  -webkit-box-shadow: 0 1px 0 #409ad5 inset, 0 -1px 0 #20638f inset;
  box-shadow: 0 1px 0 #409ad5 inset, 0 -1px 0 #20638f inset;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3);
  padding: 10px;
}
.dropdown [data-toggle="dropdown"]:hover {
  background: #2c89c6;
}
.dropdown .icon-arrow {
  position: absolute;
  display: block;
  font-size: 0.7em;
  color: #fff;
  top: 14px;
  right: 10px;
}
.dropdown .icon-arrow.open {
  -moz-transform: rotate(-180deg);
  -ms-transform: rotate(-180deg);
  -webkit-transform: rotate(-180deg);
  transform: rotate(-180deg);
  -moz-transition: -moz-transform 0.6s;
  -o-transition: -o-transform 0.6s;
  -webkit-transition: -webkit-transform 0.6s;
  transition: transform 0.6s;
}
.dropdown .icon-arrow.close {
  -moz-transform: rotate(0deg);
  -ms-transform: rotate(0deg);
  -webkit-transform: rotate(0deg);
  transform: rotate(0deg);
  -moz-transition: -moz-transform 0.6s;
  -o-transition: -o-transform 0.6s;
  -webkit-transition: -webkit-transform 0.6s;
  transition: transform 0.6s;
}
.dropdown .icon-arrow:before {
  content: '\25bc';
}
.dropdown .dropdown-menu {
  max-height: 0;
  overflow: hidden;
  list-style: none;
  padding: 0;
  margin: 0;
}
.dropdown .dropdown-menu li {
  padding: 0;
}
.dropdown .dropdown-menu li a {
  display: block;
  color: #6f6f6f;
  background: #eee;
  -moz-box-shadow: 0 1px 0 white inset, 0 -1px 0 #d5d5d5 inset;
  -webkit-box-shadow: 0 1px 0 white inset, 0 -1px 0 #d5d5d5 inset;
  box-shadow: 0 1px 0 white inset, 0 -1px 0 #d5d5d5 inset;
  text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.3);
  padding: 10px 10px;
}
.dropdown .dropdown-menu li a:hover {
  background: #f6f6f6;
}
.dropdown .show, .dropdown .hide {
  -moz-transform-origin: 50% 0%;
  -ms-transform-origin: 50% 0%;
  -webkit-transform-origin: 50% 0%;
  transform-origin: 50% 0%;
}
.dropdown .show {
  display: block;
  max-height: 9999px;
  -moz-transform: scaley(1);
  -ms-transform: scaley(1);
  -webkit-transform: scaley(1);
  transform: scaley(1);
  animation: showanimation 0.5s ease-in-out;
  -moz-animation: showanimation 0.5s ease-in-out;
  -webkit-animation: showanimation 0.5s ease-in-out;
  -moz-transition: max-height 1s ease-in-out;
  -o-transition: max-height 1s ease-in-out;
  -webkit-transition: max-height 1s ease-in-out;
  transition: max-height 1s ease-in-out;
}
.dropdown .hide {
  max-height: 0;
  -moz-transform: scaley(0);
  -ms-transform: scaley(0);
  -webkit-transform: scaley(0);
  transform: scaley(0);
  animation: hideanimation 0.4s ease-out;
  -moz-animation: hideanimation 0.4s ease-out;
  -webkit-animation: hideanimation 0.4s ease-out;
  -moz-transition: max-height 0.6s ease-out;
  -o-transition: max-height 0.6s ease-out;
  -webkit-transition: max-height 0.6s ease-out;
  transition: max-height 0.6s ease-out;
}

@keyframes showanimation {
  0% {
    -moz-transform: scaley(0.1);
    -ms-transform: scaley(0.1);
    -webkit-transform: scaley(0.1);
    transform: scaley(0.1);
  }
  40% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  100% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
}
@-moz-keyframes showanimation {
  0% {
    -moz-transform: scaley(0.1);
    -ms-transform: scaley(0.1);
    -webkit-transform: scaley(0.1);
    transform: scaley(0.1);
  }
  40% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  100% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
}
@-webkit-keyframes showanimation {
  0% {
    -moz-transform: scaley(0.1);
    -ms-transform: scaley(0.1);
    -webkit-transform: scaley(0.1);
    transform: scaley(0.1);
  }
  40% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.04);
    -ms-transform: scaley(1.04);
    -webkit-transform: scaley(1.04);
    transform: scaley(1.04);
  }
  100% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
}
@keyframes hideanimation {
  0% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(0);
    -ms-transform: scaley(0);
    -webkit-transform: scaley(0);
    transform: scaley(0);
  }
}
@-moz-keyframes hideanimation {
  0% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(0);
    -ms-transform: scaley(0);
    -webkit-transform: scaley(0);
    transform: scaley(0);
  }
}
@-webkit-keyframes hideanimation {
  0% {
    -moz-transform: scaley(1);
    -ms-transform: scaley(1);
    -webkit-transform: scaley(1);
    transform: scaley(1);
  }
  60% {
    -moz-transform: scaley(0.98);
    -ms-transform: scaley(0.98);
    -webkit-transform: scaley(0.98);
    transform: scaley(0.98);
  }
  80% {
    -moz-transform: scaley(1.02);
    -ms-transform: scaley(1.02);
    -webkit-transform: scaley(1.02);
    transform: scaley(1.02);
  }
  100% {
    -moz-transform: scaley(0);
    -ms-transform: scaley(0);
    -webkit-transform: scaley(0);
    transform: scaley(0);
  }
}

js

// dropdown menu
var dropdown = document.queryselectorall('.dropdown');
var dropdownarray = array.prototype.slice.call(dropdown,0);
dropdownarray.foreach(function(el){
	var button = el.queryselector('a[data-toggle="dropdown"]'),
			menu = el.queryselector('.dropdown-menu'),
			arrow = button.queryselector('i.icon-arrow');

	button.onclick = function(event) {
		if(!menu.hasclass('show')) {
			menu.classlist.add('show');
			menu.classlist.remove('hide');
			arrow.classlist.add('open');
			arrow.classlist.remove('close');
			event.preventdefault();
		}
		else {
			menu.classlist.remove('show');
			menu.classlist.add('hide');
			arrow.classlist.remove('open');
			arrow.classlist.add('close');
			event.preventdefault();
		}
	};
})

element.prototype.hasclass = function(classname) {
    return this.classname && new regexp("(^|\\s)" + classname + "(\\s|$)").test(this.classname);
};

以上就是html+css3+js 实现的下拉菜单的详细内容,更多关于html+css3+js 下拉菜单的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com