CSS实现动画特效导航栏
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实现动画特效导航栏的更多相关文章
- css制作最简单导航栏
css制作最简单导航栏
- 如何使用css、布局横向导航栏
使用css布局横向导航栏,css应用给网页样式的方式,就相当于,给人怎么去穿上衣服,不同的衣服有不同的穿法,这里我们使用的是内联式.在这里 我们可以适当的把值调的大一点,这样我们就可以很容易的对比. ...
- 在CSS中定义【导航栏】超链接样式
1.案例css代码 <style> .divcss5 a:link{ color:#F00}/* 链接默认为红色 */ .divcss5 a:hover{ color:#000}/* 鼠标 ...
- 简单两步使用css控制div下导航栏ul居中显示
第一步:父层设置文本居中属性 ul{ text-align:center; } 第二步:li设置内联样式 li{ display:inline; } PS 只需以上两步就可以实现导航栏居中显示了,但为 ...
- 通过html和css做出下拉导航栏的效果
通过观察了百度的首页,对于更多产品一栏,觉得可以不涉及JS便可写出下拉导航栏的效果 1.先设计出大体的框架 <div class="nav"> <ul> & ...
- css制作简单的导航栏
//css代码 #menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: ...
- CSS案例1(导航栏)
文本的装饰 text-decoration 通常我们用于给链接修改装饰效果 使用技巧:在一行内的盒子内,我们设定行高等于盒子的高度,就可以使文字垂直居中. <head> <meta ...
- css实现手机端导航栏左右滑动
<html> <head> <meta charset="utf-8"> <meta name="viewport" ...
- 通栏导航栏的制作,综合使用CSS属性,代码不超过30行
这篇文章,小编带领大家一同做一个利用CSS技术实现的导航栏.通过这个导航栏的制作,希望大家能够对前几篇文章中学习到的CSS属性能有一个整体的认识,并能够达到灵活运用的程度. 承接文章:灵活控制块级元素 ...
随机推荐
- 预置第三方apk到MTK项目相关问题总结
目前5.0之后项目预置方式通用步骤为: 建立apk文件夹; 置目标apk到该文件夹下; 解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件); 在该文件夹下编写Androi ...
- 一些常用的meta标签
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- Cs231n课堂内容记录-Lecture 4-Part2 神经网络
Lecture 7 神经网络二 课程内容记录:https://zhuanlan.zhihu.com/p/21560667?refer=intelligentunit 1.协方差矩阵: 协方差(Cova ...
- Jenkins+git+gitlab实现持续自动集成部署
1 实验环境 三台服务器 gitlab 192.168.7.139 Jenkins 192.168.7.140 java 192.168.7.141 [root ...
- 数据流中的第k大元素的golang实现
设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...
- 英语口语练习系列-C05-水电
<登幽州台歌>·陈子昂 陈子昂(公元659-公元700年),唐代文学家,初唐诗文革新人物之一. Num 诗句 1 前不见古人, 2 后不见来者. 3 念天地之悠悠, 4 独怆然而涕下! T ...
- linux磁盘IO读写性能优化
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文 ...
- 前端学习-基础部分-HTML
开始今日份整理 1.HTML基础标签 1.1 标签 标签格式 HTML规定用英文尖括号,<>包起来,例如<html> HTML中通常标签成对出现,分为开始标签与结束标签,结束标 ...
- js 获取输入框中光标的索引位置
<html> <head></head> <body> <script> function getTxt1CursorPosition(){ ...
- [LeetCode] 5. 最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你 ...