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. Android 运行报错 Unknown failure (at android.os.Binder.execTransact(Binder.java:681)) Error while Installing APKs 解决办法

    今天,我用手机测试的时候出现了这个错误 我网站查找了一会资料, 在运行的时候出现提示大致意思:卸载删除已存在应用程序,是否卸载现有应用程序,点击ok就会出现如下错误 原应用程序也没有卸载,然后自己手动 ...

  2. DVWA 黑客攻防演练(八)SQL 注入 SQL Injection

    web 程序中离不开数据库,但到今天 SQL注入是一种常见的攻击手段.如今现在一些 orm 框架(Hibernate)或者一些 mapper 框架( iBatis)会对 SQL 有一个更友好的封装,使 ...

  3. Hibernate从入门到了解

    目录 Hibernate的介绍与执行流程 运行流程: Hibernate运行环境搭建 Hibernate的基础示例 持久类的编写 持久类的介绍 几个考虑遵守的规则: 补充: Hibernate核心文件 ...

  4. redis常用命令大全

    1.基于内存的key-value数据库 2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次 3.支持数据持久化 4.value可以是string,hash, ...

  5. Spark-RDD之Partition源码分析

    概要 Spark RDD主要由Dependency.Partition.Partitioner组成,Partition是其中之一.一份待处理的原始数据会被按照相应的逻辑(例如jdbc和hdfs的spl ...

  6. ERROR in static/js/0.5d7325513eec31f1e291.js from UglifyJs

    今天把vue项目打包是遇到这个问题.这是在服务器上打包时报的错误,本地打包不报错!很头疼!上网查了很多,发现有很多人和我遇到类似的问题,但是都没有解决我的问题!后来灵机一动,解决问题,这就跟大家说一下 ...

  7. THUWC2019:Reach out

    竟然还有机会去THUWC!!! 不过没有上WC线感觉有点可惜-- Day -INF~Day -2 考完NOIP两周滚回来被神仙们吊打 先是做专题,为什么会选到构造啊(ノ`Д)ノ 我构造专题有7道题留作 ...

  8. matplotlib绘图的基本操作

    转自:Laumians博客园 更简明易懂看Matplotlib Python 画图教程 (莫烦Python)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili. ...

  9. Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

    继续学习 最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不 ...

  10. SVN服务器+客户端安装和配置

    先安装客户端.然后安装语言包,然后去小乌龟svn里设置语言为中文. svnServer推荐 subversion和 VisualSVN 网盘下载 TortoiseSVN客户端         汉化包网 ...