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. 质量:“PM,你怎么可以放弃我?!”

    最近遇到一件有趣的事儿,一位文玩老友为了攒一串多宝,新得几颗高品松石,开心不已与我们分享.闲扯中,他说出了攒多宝的要求: 直径偏差2mm以内 每种品类的珠子都要是高品 品类只能是南红(满色满肉).蜜蜡 ...

  2. 测者的测试技术手册:AI的自动化单元测试

    测者的测试技术手册:AI的自动化单元测试 谈新技术:AI的自动化单元测试    

  3. Linux 中磁盘阵列RAID10损坏以及修复

    在Linux 中磁盘阵列RAID10配置中我们已经正确配置了RAID10 ,一般来说在RAID10中最多允许50%的磁盘损毁,当然除了,同一磁盘RAID1中的硬盘设备全部损毁. 这次我们讨论一下:假设 ...

  4. Java 环境部署之Idea :解决Idea 中gradle编译 war 包编码不对

    IDE进行Gradle操作,那么还需要设置IDE的参数.例如在IDEA中,需要打开File->Other Settings->Default Settings->Gradle,在Gr ...

  5. Win10 - MySQL 5.7 密码重置

    Win10 - MySQL 5.7 密码重置 所有行为均发生在系统管理员权限的 Cmd 或 Powershell 下 注意! 本行为会导致数据库重置 # 重新安装 mysql 服务 mysqld -- ...

  6. 小程序的js处理步骤

    <!-- 包含请求路由 --> var hostUrl = require('../../config.js').hostUrl; Page({ <!-- 页面的初始数据 --> ...

  7. 无法启动mysql服务”1067 进程意外终止”解决办法【简记】

    本文章主要是总结了各种导致mysql提示无法启动MYSQL服务”1067 进程意外终止”的一些解决办法,有碰到mysql无法启动的同学可尝试参考. 在win7的服务器里开启MySql服务提示“wind ...

  8. 如何提高 windows 的使用效率?--巧用运行命令

    windows 操作系统可以使用 win+R 运行一些命令执行任务,好处是:高效.快速.准确. 启动程序 将程序 chrome 写入以下注册表中, SOFTWARE\Microsoft\Windows ...

  9. Python开发【内置模块篇】

    动态导入模块 动态导入模块 导入一个库名为字符串的 module_t = __import__('m1.t') print (module_t) #m1 import importlib m=impo ...

  10. Linux运维基础

    一.服务器硬件 二.Linux的发展史 三.Linux的系统安装和配置 四.Xshell的安装和优化 五.远程连接排错 六.Linux命令初识 七.Linux系统初识与优化 八.Linux目录结构 九 ...