zoukankan      html  css  js  c++  java
  • 酷炫的响应式导航栏

    一直想做一个纯css的导航栏,今天终于在百忙的工作中抽出一点时间来写了一下。唉,,.......都是泪啊....

    不说了,看下效果吧:

    看着很炫酷哦,哈哈哈,接下来一步一步来实现它吧。。要有耐心哦。

    看下dom元素怎么排列的,就是最普通的():

    header.html:

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title>xxy so cool</title>
     6     <link href="css/header2.css" rel="stylesheet" type="text/css" />
     7 </head>
     8 <body>
     9 <div class="container" id="main" role="main">
    10     <ul class="menu">
    11         <li><a href="#">Home</a></li>
    12         <li><a href="#s1">Menu 1</a>
    13             <ul class="submenu">
    14                 <li><a href="#">Submenu a</a></li>
    15                 <li><a href="#">Submenu b</a></li>
    16                 <li><a href="#">Submenu c</a></li>
    17                 <li><a href="#">Submenu d</a></li>
    18                 <li><a href="#">Submenu e</a></li>
    19                 <li><a href="#">Submenu f</a></li>
    20                 <li><a href="#">Submenu g</a></li>
    21                 <li><a href="#">Submenu h</a></li>
    22             </ul>
    23         </li>
    24         <li class="active"><a href="#s2">Menu 2</a>
    25             <ul class="submenu">
    26                 <li><a href="#">Submenu a</a></li>
    27                 <li><a href="#">Submenu b</a></li>
    28                 <li><a href="#">Submenu c</a></li>
    29                 <li><a href="#">Submenu d</a></li>
    30                 <li><a href="#">Submenu e</a></li>
    31                 <li><a href="#">Submenu f</a></li>
    32                 <li><a href="#">Submenu g</a></li>
    33                 <li><a href="#">Submenu h</a></li>
    34             </ul>
    35         </li>
    36         <li><a href="#">Menu 3</a>
    37             <ul class="submenu">
    38                 <li><a href="#">Submenu a</a></li>
    39                 <li><a href="#">Submenu b</a></li>
    40                 <li><a href="#">Submenu c</a></li>
    41                 <li><a href="#">Submenu d</a></li>
    42                 <li><a href="#">Submenu e</a></li>
    43                 <li><a href="#">Submenu f</a></li>
    44                 <li><a href="#">Submenu g</a></li>
    45                 <li><a href="#">Submenu h</a></li>
    46             </ul>
    47         </li>
    48         <li><a href="#">Menu 4</a></li>
    49         <li><a href="#">Back to tutorial</a></li>
    50     </ul>
    51 </div>
    52 </body>
    53 </html>

    就是最基本的ul套li 然后子菜单 在li 里面在套个 ul  ,这个就不多说了,看样式怎么实现的吧,我们一点点来说....

    看一下样式:

    header2.css:

      1 * {
      2     margin: 0;
      3     padding: 0;
      4 }
      5 html {
      6     /*background-color: #000;*/
      7 }
      8 .container {
      9     margin: 30px auto;
     10     width: 90%;
     11 }
     12 .menu {
     13     height: 58px;
     14 }
     15 
     16 
     17 
     18 /* general styles */
     19 .menu, .menu ul {
     20     list-style: none; /*去掉li标签前面的圈圈*/
     21     padding: 0;
     22     margin: 0;
     23 }
     24 .menu li {
     25     /*线性渐变*/
     26     background: -moz-linear-gradient(#292929, #252525);
     27     background: -ms-linear-gradient(#292929, #252525);
     28     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #252525));
     29     background: -webkit-linear-gradient(#292929, #252525);
     30     background: -o-linear-gradient(#292929, #252525);
     31     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#252525');
     32     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#252525')";
     33     background: linear-gradient(#292929, #252525);
     34 
     35     /*上下边框的颜色等的设置*/
     36     border-bottom: 2px solid #181818;
     37     border-top: 2px solid #303030;
     38     min-width: 160px;
     39 }
     40 .menu > li {
     41     /*成行显示——浮动*/
     42     display: block;
     43     float: left;
     44     position: relative;
     45 }
     46 .menu > li:first-child {
     47     border-radius: 5px 0 0;
     48 }
     49 .menu a {
     50     border-left: 3px solid rgba(0, 0, 0, 0);
     51     color: #808080;
     52     display: block;
     53     font-family: 'Lucida Console';
     54     font-size: 18px;
     55     line-height: 54px;
     56     padding: 0 25px;
     57     text-decoration: none;  /*去掉a标签下面的横线*/
     58     text-transform: uppercase;  /*字体大写*/
     59 }
     60 /* 鼠标放上后的样式 */
     61 .menu li:hover {
     62     background-color: #1c1c1c;
     63     background: -moz-linear-gradient(#1c1c1c, #1b1b1b);
     64     background: -ms-linear-gradient(#1c1c1c, #1b1b1b);
     65     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #1c1c1c), color-stop(100%, #1b1b1b));
     66     background: -webkit-linear-gradient(#1c1c1c, #1b1b1b);
     67     background: -o-linear-gradient(#1c1c1c, #1b1b1b);
     68     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1c1c1c', endColorstr='#1b1b1b');
     69     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#1c1c1c', endColorstr='#1b1b1b')";
     70     background: linear-gradient(#1c1c1c, #1b1b1b);
     71 
     72     border-bottom: 2px solid #222222;
     73     border-top: 2px solid #1B1B1B;
     74 }
     75 .menu li:hover > a {
     76     border-radius: 5px 0 0 0;
     77     border-left: 3px solid #C4302B;
     78     color: #C4302B;
     79 }
     80 
     81 
     82 
     83 /* submenu styles */
     84 /* 初始状态设置 */
     85 .submenu {
     86     left: 0;
     87     max-height: 0;
     88     position: absolute;
     89     top: 100%;
     90     z-index: 0;
     91 
     92     -webkit-perspective: 400px;
     93     -moz-perspective: 400px;
     94     -ms-perspective: 400px;
     95     -o-perspective: 400px;
     96     perspective: 400px;
     97 }
     98 .submenu li {
     99     opacity: 0;
    100 
    101     -webkit-transform: rotateY(90deg);
    102     -moz-transform: rotateY(90deg);
    103     -ms-transform: rotateY(90deg);
    104     -o-transform: rotateY(90deg);
    105     transform: rotateY(90deg);
    106 
    107     -webkit-transition: opacity .4s, -webkit-transform .5s;
    108     -moz-transition: opacity .4s, -moz-transform .5s;
    109     -ms-transition: opacity .4s, -ms-transform .5s;
    110     -o-transition: opacity .4s, -o-transform .5s;
    111     transition: opacity .4s, transform .5s;
    112 }
    113 /* 放上后 a标签变成白色 */
    114 .menu .submenu li:hover a {
    115     border-left: 3px solid #454545;
    116     border-radius: 0;
    117     color: #ffffff;
    118 }
    119 .menu > li:hover .submenu, .menu > li:focus .submenu {
    120     max-height: 2000px;
    121     z-index: 10;
    122 }
    123 .menu > li:hover .submenu li,
    124 .menu > li:focus .submenu li {
    125     opacity: 1;
    126 
    127     -webkit-transform: none;
    128     -moz-transform: none;
    129     -ms-transform: none;
    130     -o-transform: none;
    131     transform: none;
    132 }
    133 
    134 
    135 
    136 /* CSS3 delays for transition effects */
    137 .menu li:hover .submenu li:nth-child(1) {
    138     -webkit-transition-delay: 0s;
    139     -moz-transition-delay: 0s;
    140     -ms-transition-delay: 0s;
    141     -o-transition-delay: 0s;
    142     transition-delay: 0s;
    143 }
    144 .menu li:hover .submenu li:nth-child(2) {
    145     -webkit-transition-delay: 50ms;
    146     -moz-transition-delay: 50ms;
    147     -ms-transition-delay: 50ms;
    148     -o-transition-delay: 50ms;
    149     transition-delay: 50ms;
    150 }
    151 .menu li:hover .submenu li:nth-child(3) {
    152     -webkit-transition-delay: 100ms;
    153     -moz-transition-delay: 100ms;
    154     -ms-transition-delay: 100ms;
    155     -o-transition-delay: 100ms;
    156     transition-delay: 100ms;
    157 }
    158 .menu li:hover .submenu li:nth-child(4) {
    159     -webkit-transition-delay: 150ms;
    160     -moz-transition-delay: 150ms;
    161     -ms-transition-delay: 150ms;
    162     -o-transition-delay: 150ms;
    163     transition-delay: 150ms;
    164 }
    165 .menu li:hover .submenu li:nth-child(5) {
    166     -webkit-transition-delay: 200ms;
    167     -moz-transition-delay: 200ms;
    168     -ms-transition-delay: 200ms;
    169     -o-transition-delay: 200ms;
    170     transition-delay: 200ms;
    171 }
    172 .menu li:hover .submenu li:nth-child(6) {
    173     -webkit-transition-delay: 250ms;
    174     -moz-transition-delay: 250ms;
    175     -ms-transition-delay: 250ms;
    176     -o-transition-delay: 250ms;
    177     transition-delay: 250ms;
    178 }
    179 .menu li:hover .submenu li:nth-child(7) {
    180     -webkit-transition-delay: 300ms;
    181     -moz-transition-delay: 300ms;
    182     -ms-transition-delay: 300ms;
    183     -o-transition-delay: 300ms;
    184     transition-delay: 300ms;
    185 }
    186 .menu li:hover .submenu li:nth-child(8) {
    187     -webkit-transition-delay: 350ms;
    188     -moz-transition-delay: 350ms;
    189     -ms-transition-delay: 350ms;
    190     -o-transition-delay: 350ms;
    191     transition-delay: 350ms;
    192 }
    193 
    194 .submenu li:nth-child(1) {
    195     -webkit-transition-delay: 350ms;
    196     -moz-transition-delay: 350ms;
    197     -ms-transition-delay: 350ms;
    198     -o-transition-delay: 350ms;
    199     transition-delay: 350ms;
    200 }
    201 .submenu li:nth-child(2) {
    202     -webkit-transition-delay: 300ms;
    203     -moz-transition-delay: 300ms;
    204     -ms-transition-delay: 300ms;
    205     -o-transition-delay: 300ms;
    206     transition-delay: 300ms;
    207 }
    208 .submenu li:nth-child(3) {
    209     -webkit-transition-delay: 250ms;
    210     -moz-transition-delay: 250ms;
    211     -ms-transition-delay: 250ms;
    212     -o-transition-delay: 250ms;
    213     transition-delay: 250ms;
    214 }
    215 .submenu li:nth-child(4) {
    216     -webkit-transition-delay: 200ms;
    217     -moz-transition-delay: 200ms;
    218     -ms-transition-delay: 200ms;
    219     -o-transition-delay: 200ms;
    220     transition-delay: 200ms;
    221 }
    222 .submenu li:nth-child(5) {
    223     -webkit-transition-delay: 150ms;
    224     -moz-transition-delay: 150ms;
    225     -ms-transition-delay: 150ms;
    226     -o-transition-delay: 150ms;
    227     transition-delay: 150ms;
    228 }
    229 .submenu li:nth-child(6) {
    230     -webkit-transition-delay: 100ms;
    231     -moz-transition-delay: 100ms;
    232     -ms-transition-delay: 100ms;
    233     -o-transition-delay: 100ms;
    234     transition-delay: 100ms;
    235 }
    236 .submenu li:nth-child(7) {
    237     -webkit-transition-delay: 50ms;
    238     -moz-transition-delay: 50ms;
    239     -ms-transition-delay: 50ms;
    240     -o-transition-delay: 50ms;
    241     transition-delay: 50ms;
    242 }
    243 .submenu li:nth-child(8) {
    244     -webkit-transition-delay: 0s;
    245     -moz-transition-delay: 0s;
    246     -ms-transition-delay: 0s;
    247     -o-transition-delay: 0s;
    248     transition-delay: 0s;
    249 }

    天哪 ,这么多,哈哈哈...一点不复杂,来给你屡屡....

    19---60行 是对导航栏的基本样式设置:

      24行对 li 元素进行了背景颜色的线性渐变和上下边框颜色的设置,40行的设置使得一级的 li 元素在同一行显示 ,46行给第一个li 元素加了个圆角边框。49-60设置了a 的样式,包括行高(用来垂直居中,配合display:block)、字体颜色大小等。

      设置完后的样子是:

      

     61--79行是对鼠标放上或者元素触发焦点时的样式设置:

      61-74是对每个 li 的 颜色和边框颜色的改变,75-79,给a 添加一个左侧的橙色框,而且是圆角的。。嘿嘿,不喜欢的话,你自己设置吧,切!!!!

      设置完后的样子是:(怎么感觉像是在给谁)

      

    85--132 用来把二级导航隐藏并添加获取焦点后的样式变化设置:

      85-97,添加了一条属性max-height:0;让二级的 ul  看不到了(同时在99行让 li  透明,也看不到。),然后再120行 让它获取焦点后加上最大高度,同时让在241行 让 li opacity为1。

      在96行添加了属性perspective属性,这个属性想了半天还是一知半解。设置元素被查看位置的视图 配合 属性perspective-origin 来使用对3D转换元素进行查看位置的设置。。实在不懂就下次详细分析一下吧,期待下一次的CSS3属性详解。

      好了看一下现在什么样了:

      

    基本的样子是有了,但是二级导航展示的不够有层次感:接下来给二级的 ul 下面的 li  加上动画的延迟就会有层次感了:、

    也就是137行下面的样式代码了,就是加上delay 延迟,很简单的哦。

    哇卡卡卡卡卡,,大功告成了!! 效果就是刚开始展示的那个样子了。

    如果颜色不喜欢自己可以设置那些渐变的颜色和 触发焦点事件后的颜色的变化。

    今天就这样吧,也是抽出时间看的,唉,感慨时间太少啊。。。我的青春年华。55555555555555555555555555

    (注意:帅哥一枚,喜欢请关注微博和博客哦 — _ —).

  • 相关阅读:
    aws-rds for mysql 5.7.34搭建备库
    Redis 未授权访问漏洞利用总结(转)
    mongoexport/mongimport命令详解
    mongodump/mongorestore命令详解
    redis stream类型 常用命令
    system_time_zone参数值由来
    MySQL加密解密函数AES_ENCRYPT AES_DECRYPT
    MySQL开启SSL加密
    MDL锁获取顺序和优先先
    explicit_defaults_for_timestamp 参数说明
  • 原文地址:https://www.cnblogs.com/xinxingyu/p/4794544.html
Copyright © 2011-2022 走看看