0 写在前面

  今天用纯CSS编写了一种带有特效的导航栏,一方面巩固熟悉了导航栏的一般写法,另一方面练习了CSS3的一些新特性。

1 实现效果

  当鼠标划过时,实现了一种动态百叶窗效果。

2 实现细节

2-0 导航栏基本架构

  首先复习导航栏的基本架构,导航栏的实现,采用的是ul-li的结构,为了能够实现导航效果,可以在li内部增加一个a标签。

  实现导航栏结构的html代码如下:

  <div class="container">
<ul class="menu">
<li><a href="#">HOME</a></li>
<li><a href="#">FIRST</a>
<ul class="submenu">
<li><a href="#">one</a></li>
<li><a href="#">two</a></li>
<li><a href="#">three</a></li>
<li><a href="#">four</a></li>
<li><a href="#">five</a></li>
<li><a href="#">six</a></li>
</ul>
</li>
<li><a href="#">SECOND</a>
<ul class="submenu">
<li><a href="#">one</a></li>
<li><a href="#">two</a></li>
<li><a href="#">three</a></li>
<li><a href="#">four</a></li>
<li><a href="#">five</a></li>
<li><a href="#">six</a></li>
</ul>
</li>
<li><a href="#">THIRD</a>
<ul class="submenu">
<li><a href="#">one</a></li>
<li><a href="#">two</a></li>
<li><a href="#">three</a></li>
<li><a href="#">four</a></li>
<li><a href="#">five</a></li>
<li><a href="#">six</a></li>
</ul>
</li>
<li><a href="#">FOURTH</a>
<ul class="submenu">
<li><a href="#">one</a></li>
<li><a href="#">two</a></li>
<li><a href="#">three</a></li>
<li><a href="#">four</a></li>
<li><a href="#">five</a></li>
<li><a href="#">six</a></li>
</ul>
</li>
<li><a href="#">OTHER</a></li>
</ul>
</div>

  页面布局和导航栏需要进行样式的初始化,包括去除body的8px,去除a标签固有样式,去除ul li的固有样式,实现水平方向的导航等。

  需要进行模式化的调整,代码如下:

 *{
margin:;
padding:; /*初始化页面*/
list-style: none; /*清除原点*/
}
body{
background: #ccc;
} .container{
margin: 30px auto; /*导航栏位置的确定上下空30px左右自适应*/
width : 70%;
} .container .menu{
height:58px;
} .menu>li{ /*只将主菜单栏水平布局,需要用>来进行选择*/
float:left; /*导航栏水平布局*/
position: relative; /*为了消除重叠效果,需要让其子元素脱离文档流absolute*/
}

  a标签的模式化调整如下:

 .menu a{
display:block; /*a标签可以覆盖整个容器范围*/
text-decoration: none; /*a标签取消下划线*/
text-align: center; /*文字水平居中*/
color:black;
padding:0 25px;
font-size: 18px;
line-height:36px; /*撑开行高*/
border-left:3px solid rgb(0,0,0,0); /*左边竖线占位(透明度0)*/
text-transform:uppercase; /*全部转成大写字母*/
}

2-1 导航栏渐变背景色

  在这个练习中,我学习使用了一种可以实现渐变色的方案 linear-gradient(#from,#to)

 .menu li{
min-width: 140px; /*设置最小宽度撑开宽度*/
background: linear-gradient(#3d3838,#999999); /*渐变色*/
} .menu li:hover{
background: linear-gradient(#111111,#424242);
}

2-2  3D动画效果绘制

  为了实现动画的3D效果,需要为元素设置一个景深(perspective),也就是元素将对于观察者的距离。

  另外要用到CSS3中的一个3D旋转效果transform:rotate3d(x,y,z,n deg);前三个参数表示绕x,y,z轴旋转,具体绕某一轴旋转,则将该参数置1反之置0,最后一个参数为旋转角度,单位为deg。

  同时,我们还可以调整初始旋转坐标轴的位置 transform-origin:x y; 这两个参数分别表示x y轴初始的偏移位置。

  为了实现旋转的动画,我们需要通过transform:rotate3d给出一个初始状态,一个结束状态,并添加一个过渡transition。即可实现旋转效果。

 .menu li:hover>a{  /*需要选择其直属子元素,而不是全部的a标签子元素*/
color:white;
border-left:3px solid white; /*显示左边小竖线*/
} .submenu{
position:absolute; /*脱离文档流,定位相对于父级第一个有定位的元素*/
left:;
top:100%; /*相对于父级li最底部进行定位*/
perspective:1000px; /*设置景深*/
max-height:; /*默认情况下需要将其隐藏,行高缩小至0*/
z-index:;
} .submenu li{
visibility:hidden; /*这是为了避免仍有元素占位,鼠标划过下方空白区域时会触发的bug*/
transform: rotate3d(1,0,0,90deg); /*3d旋转效果,绕x轴旋转,90°*/
transition: all 0.5s; /*过渡动画,选择all属性,过渡时间为0.5s*/ } .menu>li:hover .submenu{
max-height: 999px;
z-index:;
} .menu>li:hover .submenu li{
visibility: visible; /*调成可见*/
transform: rotate3d(0,0,0,0deg); /*实现3d旋转效果,绕x轴旋转,从90°变化到0°*/
}

2-3 子元素选择器与动画延迟的应用

  在这里我们为了实现百叶窗效果,可以通过子元素选择器nth-child(n),来选择导航栏中不同的项进行旋转

  通过动画延迟transition-delay,来为不同子元素设置旋转间隔。

  另外为了美化效果,在导航栏左上角上加一个圆角效果,用first-child进行选择。

  代码如下:

 .container .menu>li:first-child{
border-radius: 5px 0 0 0;
}
.submenu li:nth-child(1){
transition-delay:;
}
.submenu li:nth-child(2){
transition-delay: 100ms;
}
.submenu li:nth-child(3){
transition-delay: 200ms;
}
.submenu li:nth-child(4){
transition-delay: 300ms;
}
.submenu li:nth-child(5){
transition-delay: 400ms;
}
.submenu li:nth-child(6){
transition-delay: 500ms;
}

3 总结  

  本次通过编写导航栏特效,在复习导航栏基本写法的同时,练习了一些CSS3的特性:

  • 景深:perspective

  • 3D旋转动画特效:

    • transform:rotate3d(0,1,0,45deg);
    • 参数分别为绕x,y,z轴旋转,初始角度。
  • 渐变色效果:linear-gradient(#color1,#color2);

  • 动画延迟:transition-delay

CSS实现动画特效导航栏的更多相关文章

  1. css制作最简单导航栏

    css制作最简单导航栏

  2. 如何使用css、布局横向导航栏

    使用css布局横向导航栏,css应用给网页样式的方式,就相当于,给人怎么去穿上衣服,不同的衣服有不同的穿法,这里我们使用的是内联式.在这里 我们可以适当的把值调的大一点,这样我们就可以很容易的对比. ...

  3. 在CSS中定义【导航栏】超链接样式

    1.案例css代码 <style> .divcss5 a:link{ color:#F00}/* 链接默认为红色 */ .divcss5 a:hover{ color:#000}/* 鼠标 ...

  4. 简单两步使用css控制div下导航栏ul居中显示

    第一步:父层设置文本居中属性 ul{ text-align:center; } 第二步:li设置内联样式 li{ display:inline; } PS 只需以上两步就可以实现导航栏居中显示了,但为 ...

  5. 通过html和css做出下拉导航栏的效果

    通过观察了百度的首页,对于更多产品一栏,觉得可以不涉及JS便可写出下拉导航栏的效果 1.先设计出大体的框架 <div class="nav"> <ul> & ...

  6. css制作简单的导航栏

    //css代码 #menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: ...

  7. CSS案例1(导航栏)

    文本的装饰 text-decoration 通常我们用于给链接修改装饰效果 使用技巧:在一行内的盒子内,我们设定行高等于盒子的高度,就可以使文字垂直居中. <head> <meta ...

  8. css实现手机端导航栏左右滑动

    <html> <head> <meta charset="utf-8"> <meta name="viewport" ...

  9. 通栏导航栏的制作,综合使用CSS属性,代码不超过30行

    这篇文章,小编带领大家一同做一个利用CSS技术实现的导航栏.通过这个导航栏的制作,希望大家能够对前几篇文章中学习到的CSS属性能有一个整体的认识,并能够达到灵活运用的程度. 承接文章:灵活控制块级元素 ...

随机推荐

  1. ServiceHub.DataWarehouseHost.exe内存泄漏问题的处理

    Visual Studio 2017的15.2版本在debug应用程序时,ServiceHub.DataWarehouseHost.exe会出现严重的内存泄漏的问题,一个小时左右,内存耗了将近8GB. ...

  2. ubuntu中使用机密数据Secrets

    目录 AptNetCore使用Secrets管理私密数据 前言 使用 设置UserSecretsId 设置机密 代码中访问机密 脚注 AptNetCore使用Secrets管理私密数据 前言 在项目中 ...

  3. win7 64 位操作系统,进程System,PID为4,扫描连接局域网ip地址的139和445端口

    偶然发现电脑的System进程不间断扫描连接局域网内的其它IP对应的445和139端口,这是个问题. 上网搜索,立即关闭139端口的监听. 方法如下: 本地连接属性-TCP/IP属性-高级-WINS选 ...

  4. Linux 匿名页的反向映射

    我们知道LINUX的内存管理系统中有"反向映射"这一说,目的是为了快速去查找出一个特定的物理页在哪些进程中被映射到了什么地址,这样如果我们想把这一页换出(SWAP),或是迁移(Mi ...

  5. 搭建Jetbrains家族IDE授权服务器

    虽然VS号称宇宙第一IDE但是也有不方便的地方,如果你也是C#码农我不得不向你推荐一个强大的插件ReSharper,他会是你的开发更加便捷,大大加快了开发的速度以及开发的乐趣.但是ReSharper并 ...

  6. mysql面试题

    01. 列举常见的关系型数据库和非关系型都有那些? 1.关系型数据库通过外键关联来建立表与表之间的关系,---------常见的有:SQLite.Oracle.mysql 2.非关系型数据库通常指数据 ...

  7. 英语口语练习系列-C18-Wildest Dreams

    词汇复习 actor 演员 afternoon 下午 alive 活着的 apple 苹果 adjective 形容词 air 空气 animal 动物 April 四月 adult 成年人 airp ...

  8. 【转】Android OkHttp3简介和使用详解

    一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...

  9. PuTTY 串口调试,为普通用户增加访问串口设备权限

    一般情况下,只有 root 用户可以使用 PuTTY 访问串口设备,如果要为普通用户增加访问串口设备的权限,可按如下步骤进行: (以 Ubuntu 14.04.3 系统为例,第一个串口设备,会被识别为 ...

  10. node+mysql 数据库连接池

    1. 什么是数据库连接池? 数据库连接池是程序启动时建立足够的数据库连接,并将这些连接组成一个池,由程序动态地对池中的连接进行申请,使用和释放. 2. 使用数据库连接池原理及优点是什么? 数据库连接池 ...