实现效果
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 下拉菜单的资料请关注代码网其它相关文章!
发表评论