用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

源码都在网页上,查看源码!

posted @ 2017-05-22 20:12  Charles王志会  阅读(452)  评论(0)    收藏  举报