用input做nav(导航)
今天就说一说我上周做后台导航栏所get到的小知识点。
众所周知网页导航栏都是用ul-li制作的 然后点击效果是由JS的onclick事件实现的(给每个li附加一个onclick事件,事件中(当点击发生时)把所有的li样式清空再将被点击的li附上点击样式);
但是我在网上找的一个模板是用纯css制作的 他的导航栏每一栏都是一个input单选框,我觉得这个设计很巧妙。
他为什么这么做呢 因为导航栏也是单选的,基本需求是一样的,问题就是怎么让一个单选框长得更“像”一个导航栏。
先说说input-nav是怎么实现的
先放预览图
html:
<div class="bg"> <input type="radio" checked="checked" name="name"><span>HOME</span><i class="xin"></i> <input type="radio" name="name"><span>HOME</span><i class="xin"></i> <input type="radio" name="name"><span>HOME</span><i class="xin"></i> <input type="radio" name="name"><span>HOME</span><i class="xin"></i> <input type="radio" name="name"><span>HOME</span><i class="xin"></i> </div>
css:
1 *{ 2 margin: 0; 3 padding: 0; 4 } 5 body{ 6 background: #1ABC9C; 7 } 8 .bg{ 9 width: 150px; 10 height: 800px; 11 background-color: #f0f0f0; 12 position: absolute; 13 left: 200px; 14 top: 100px; 15 } 16 .bg input{ 17 opacity: 0; 18 filter: alpha(opacity=0); 19 position: absolute; 20 } 21 input[checked="checked"]{ 22 color:red; 23 } 24 input:hover + span,input:checked + span{ 25 background-color: #fff; 26 color:#1ABC9C; 27 } 28 input:checked + span + i:before,input:checked + span + i:after{ 29 background:#1ABC9C; 30 } 31 .bg>span,.bg>input{ 32 background: #f0f0f0; 33 display: block; 34 width: 150px; 35 height: 50px; 36 text-align: center; 37 line-height: 50px; 38 z-index: 9; 39 } 40 .bg > span{ 41 /*过度动画*/ 42 -webkit-transition: all .4s; 43 -moz-transition: all .4s; 44 -o-transition: all .4s; 45 transition: all .4s; 46 } 47 .xin:before,.xin:after { 48 /*心形图标*/ 49 content: ""; 50 width: 8px; 51 height: 14px; 52 position: absolute; 53 background: #000; 54 border-radius: 50px 50px 0 0; 55 transform: rotate(-45deg); 56 transform-origin: 0 100%; 57 margin-top: -30px; 58 margin-left: 25px; 59 } 60 .xin:after { 61 margin-left: 17px; 62 transform: rotate(45deg); 63 transform-origin: 100% 100%; 64 }
一个单选框的样式是这样的,如何把单选框前边的碍事的点干掉呢? opacity: 0;filter: alpha(opacity=0);(详见css17-19) 其实前边的点就是<input type="radio">(他的width不管多大,这个点都会水平居中, height就是这个点的直径!);
剩下的点击效果 就是input[checked="checked"] 还有input:checked等css选择器轻松解决!
这么怪癖的想法肯定不止我想到。为什么没有流行起来呢!
1.这个点击效果啊一刷新就没咯(虽然ul-li的也会消失,刷新页面点击效果不消失得用后台语言实现....);
2.这种方法比较适合ajax,因为input外边或者后边都不能放一个a标签去跳转(要么影响点击效果,要么影响跳转!);
3.兼容性问题 其他还好说IE9.0…… ^o^
优点肯定也是有的
1.减少js DOM操作
2.觉得实现起来要比ul-li用js简单的多!
就这样。
input实现nav 预览 http://www.wangzhihui.cc/nav-input.html
ulli实现nav预览 http://www.wangzhihui.cc/nav-ulli.html
源码都在网页上,查看源码!