我是c站的一个小博主L_ar,近期我会每天分享前端知识包括(原生的web语句,以及vue2和vue3,微信小程序的写法及知识点)本篇文章收录于html特效专栏中,如果想每天在我这学到一些东西,请关注我并订阅专栏,每天都分享前端知识哦~
前端是做什么的?
1.前端工程师主要利用HMTL与CSS建构页面(其中html构建骨架,css构建样式),用JavaScript获取后端数据以及完善交互以及用户体验。 2.通俗来讲,前端在一个项目里,拿到UI设计师设计的设计稿,然后实现UI设计师设计稿,调用后端程序员给的数据接口以获取数据,然后测试,最后部署上线。 3.前端可以对设计图负责,大部分情况下,不需要特别的去理解业务逻辑,因为我们90后都是玩着十几年手机电脑长大的,十几年的经验足够我们在潜意识里想明白应该怎么做,怎么去一步步实现,会有什么意外情况。 4.我感觉前端发展有个很大的缺陷----晋升问题. 正如第三点所言,作为领导必须对项目有足够的了解,显然是要重点包括业务逻辑,这点上,后端开发者需要涉及数据库逻辑,是必须要跟业务逻辑打交道的(重中之重),因此,大部分的领导岗位都是后端开发者更有晋升的机会。当然,个别公司有专门的前端组长(这也不算什么),如果说前端开发者在自己工作范围之外还要腾出时间去研究业务逻辑,属实是觉得出力不讨好(因为这样的操作需要持续很久才能看出效果),而且再怎么研究业务逻辑也不会比每时每刻跟业务逻辑打交道的后端开发者了解更多。说实在的,大部分情况下,前端在配合后端进行开发.后端需要了解业务逻辑,要跟领导和客户商量细节,露脸机会很大,在老板面前刷脸次数众多。这些都是拉开前后端程序员晋升机会差距的因素。
前端的特效视觉:
层次结构的表现
动态效果,如缩放,覆盖,滑出网页或单个视觉元素,可帮助用户理解网页信息架构。通常是通过转场和菜单来展开网页。
表现层级关系
为了展现层与层的关系,是抽屉,是打开,还是平级切换等等。让用户知道这个界面和上一个、下一个的关系。
清晰明确
动效可以清晰地表明各种数据块中间的逻辑结构,即使在数据高度饱和的情况下也能使一切从观感上有组织性。
添加了图层
在网站制作过程中加上特效,每个元素都在用户滚动页面或者是鼠标经过的地方有动态效果,就像在平面层上多出了一个动态层,这样看起来更加有层次感。
我想借此专栏发布的内容帮助那些正在入坑前端的家人们,同时作为我以后复习的笔记,希望我们可以互相帮助,共同加油!!!
1.隐藏式侧边栏菜单
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>隐藏式侧边栏菜单</title>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
*{
/* 初始化 */
margin: 0;
padding: 0;
}
body{
/* 100%窗口高度 */
height: 100vh;
background-color: rgb(138, 130, 137);
}
.container{
width: 30px;/* 设置左边显示(鼠标为选中时状态的宽度)*/
height: 600px;/* 设置左边显示(鼠标为选中时状态的高度)*/
/* 绝对固定定位 */
position: fixed;
left: 0px;
/* 垂直居中 */
top: 20%;
/* transform: translateY(-50%); */
background-color: #222;
/* 右上右下圆角 */
border-radius: 0 15px 15px 0;
overflow: hidden;/* 溢出隐藏 */
/* 动画过渡 */
transition: 0.3s;
}
.container:hover{
/* 鼠标移入,展开 改变圆角大小 */
width: 130px;
border-radius: 0 50px 50px 0;
}
.container:hover li a{
/* 鼠标移入,改变字体颜色 */
color: rgb(255, 255, 255);
}
/* 添加左侧橙色条状 */
.container::before{
content: "";
width: 50%;/*鼠标悬停时显示左侧橙色条宽度*/
height: 100%;/*鼠标悬停时显示左侧橙色条高度*/
position: absolute;/*绝对定位*/
top: 0px;
left: 0px;
z-index: -1;/* 将z轴设置为-1不让其遮挡图标*/
background-color: rgb(255, 136, 0);
}
/* 设置上方快 */
.container .top{
width: calc(100% - 30px);/* 动态设置宽度:宽度比100%的宽度少30px。*/
margin-left: 30px;/*左外间距设为30px与上面的.container{}中的width一致*/
height: 20%;/*鼠标悬停时从20%开始计算(也就是第一个块)*/
background-color: #222;/*设置跟着块的上方的块颜色*/
border-radius: 0 0 0 20px;/*设置上方的黑块的左下角的弧度*/
/* 动画过渡 */
transition: 0.2s;
}
/* 这只中间快 */
.container .middle{
width: calc(100% - 60px);
height: 10%;/*每次鼠标悬停时选中的部分为10%(也就是一个橙色的块)*/
background-color: rgb(255, 136, 0);/*设置中间选择时的快的背景色*/
margin-left: 30px;/*左外间距设为30px与上面的.container{}中的width一致*/
border-radius: 20px;/*设置边角弧度*/
}
/* 设置下方块 原理上上方快一样*/
.container .bottom{
width: calc(100% - 30px);
height: 100%;
margin-left: 30px;
background-color: #222;
border-radius: 20px 0 0 0;
}
.container li{
/* 绝对定位 */
position: absolute;
/* 通过var函数调用自定义属性--lqj */
top: var(--lqj);
width: 100%;
height: 10%;
font-size: 30px;
/* 弹性布局 水平垂直居中 */
display: flex;
justify-content: center;
align-items: center;
}
.container li a{
/* 字体颜色透明 */
color: transparent;
/* 动画过渡 */
transition: 0.3s;
}
/* 分别为每一个li元素设置.top的高度 */
/* ~是兄弟选择器 */
.container li:nth-child(1):hover ~ .top{
height: 20%;
}
.container li:nth-child(2):hover ~ .top{
height: 30%;
}
.container li:nth-child(3):hover ~ .top{
height: 40%;
}
.container li:nth-child(4):hover ~ .top{
height: 50%;
}
.container li:nth-child(5):hover ~ .top{
height: 60%;
}
.container li:nth-child(6):hover ~ .top{
height: 70%;
}
</style>
</head>
<body>
<div class="container">
<!-- --lqj是自定义属性,通过var函数可调用 -->
<li style="--lqj:20%;">
<a href="#">
<i class="fa fa-home" aria-hidden="false"></i>
</a>
</li>
<li style="--lqj:30%;">
<a href="#">
<i class="fa fa-th-large" aria-hidden="true"></i>
</a>
</li>
<li style="--lqj:40%;">
<a href="#">
<i class="fa fa-shopping-bag" aria-hidden="true"></i>
</a>
</li>
<li style="--lqj:50%;">
<a href="#">
<i class="fa fa-user" aria-hidden="true"></i>
</a>
</li>
<li style="--lqj:60%;">
<a href="#">
<i class="fa fa-cog" aria-hidden="true"></i>
</a>
</li>
<li style="--lqj:70%;">
<a href="#">
<i class="fa fa-sign-out" aria-hidden="true"></i>
</a>
</li>
<div class="top"></div>
<div class="middle"></div>
<div class="bottom"></div>
</div>
</body>
</html>
2.动态线性渐变背景
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>背景不停渐变效果</title>
<style>
body{
/* 初始化 取消内外边距 */
margin: 0;
padding: 0;
/* 100%窗口高度 */
height: 100vh;
/* 弹性布局 水平垂直居中 */
display: flex;
justify-content: center;
align-items: center;
/* 渐变背景 */
background: linear-gradient(125deg,#0381ff,#ffe601,#ff0000,#ea00ff,#00fff2);
/* 指定背景图像的大小 */
background-size: 500%;
/* 执行动画:动画名 时长 线性的 无限次播放 */
animation: bgAnimation 10s linear infinite;
}
.text{
color: #fff;
font-size: 30px;
/* 字间距 */
letter-spacing: 15px;
}
/* 定义动画 */
@keyframes bgAnimation {
0%{
background-position: 0% 0%;
}
50%{
background-position: 100% 100%;
}
100%{
background-position: 0% 0%;
}
}
</style>
</head>
<body>
<div class="text">动态线性渐变背景</div>
</body>
</html>
3.全屏覆盖导航栏
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>全屏导航栏菜单</title>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
*{
/* 初始化 取消页面的内外边距 */
margin: 0;
padding: 0;
/* 这个是告诉浏览器:你想要设置的边框和内边距的值是包含在总宽高内的 */
box-sizing: border-box;
}
.con{
/* 弹性布局 水平、垂直居中 */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
/* 100%的窗口高度 */
height: 100vh;
/* 行高 */
line-height: 80px;
font-size: 30px;
/* 字间距 */
letter-spacing: 15px;
}
.wrapper{
/* 固定定位 窗口滚动也不会移动 */
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* 渐变背景 */
background: linear-gradient(200deg,#91ff00,#ffbb00);
/* 将元素剪切为一个圆形【25px表示圆的直径】【calc(100% - 45px) 45px表示圆心】 */
clip-path: circle(25px at calc(100% - 45px) 45px);
/* 过渡动画 */
transition: all 0.3s ease-in-out;
}
.menu-btn{
position: absolute;
right: 20px;
top: 20px;
z-index: 2;
/* 渐变背景 */
background: linear-gradient(200deg,#f02f86,#00e1ff);
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
border-radius: 50%;
color: #fff;
font-size: 20px;
cursor: pointer;
/* 这里也加个过渡动画 */
transition: all 0.3s ease;
}
/* 把复选框隐藏 */
#menu_btn{
display: none;
}
#menu_btn:checked ~ .wrapper{
/* 将元素剪切为一个圆形 75%表示圆的直径 */
clip-path: circle(75%);
}
#menu_btn:checked ~ .menu-btn{
color: #d576ba;
background: #fff;
}
/* 当复选框为选中态时,改变图标 */
#menu_btn:checked ~ .menu-btn i::before{
content: "f00d";
}
.wrapper ul{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
list-style: none;
text-align: center;
}
.wrapper ul li{
margin: 30px 0px;
}
.wrapper ul li a{
color: #fff;
text-decoration: none;
font-size: 30px;
font-weight: 500;
padding: 5px 50px;
position: relative;
line-height: 50px;
}
.wrapper ul li a::after{
content: "";
position: absolute;
width: 100%;
height: 50px;
background: #fff;
z-index: -1;
border-radius: 50px;
left: 0px;
transform: scaleY(0);
/* 加个动画过渡 */
transition: transform 0.3s ease;
}
.wrapper ul li a:hover::after{
transform: scaleY(1);
}
.wrapper ul li a:hover{
color: #d576ba;
}
</style>
</head>
<body>
<input type="checkbox" id="menu_btn">
<label class="menu-btn" for="menu_btn">
<i class="fa fa-bars" aria-hidden="true"></i>
</label>
<div class="con">
<h1>全屏覆盖导航栏</h1>
</div>
<div class="wrapper">
<ul class="menu">
<li><a href="#">首页</a></li>
<li><a href="#">关于</a></li>
<li><a href="#">服务</a></li>
<li><a href="#">联系我们</a></li>
<li><a href="#">用户反馈</a></li>
</ul>
</div>
</body>
</html>
4.简约式导航栏
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>简约不简单的社交分享按钮</title>
<!-- <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> -->
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
body{
/* 取消页面内外边距 */
margin: 0;
padding: 0;
/* 100%窗口高度 */
height: 100vh;
/* 弹性布局 水平、垂直居中 */
display: flex;
justify-content: center;
align-items: center;
/* 渐变背景 */
background: linear-gradient(200deg,#ec8f02,#15944e);
}
.btn-box a{
font-size: 40px;
color: #ff0582;
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
margin: 0 16px;
display: inline-block;
/* 相对定位 */
position: relative;
/* 动画过渡:时长 线性的 */
transition: 0.5s linear;
}
.btn-box a::before,.btn-box a::after{
content: "";
/* 绝对定位 */
position: absolute;
/* 这个是告诉浏览器:你想要设置的边框和内边距的值是包含在总宽高内的 */
box-sizing: border-box;
width: 100%;
height: 100%;
left: 0;
top: 0;
/* 加个动画过渡 */
transition: 0.5s linear;
}
.btn-box a:hover{
/* 缩小为原来的0.8倍 */
transform: scale(0.8);
}
.btn-box a:hover::before{
border-left: 4px solid;
border-right: 4px solid;
/* 沿X轴倾斜20度 */
transform: skewX(20deg);
}
.btn-box a:hover::after{
border-top: 4px solid;
border-bottom: 4px solid;
/* 沿Y轴倾斜-20度 */
transform: skewY(-20deg);
}
</style>
</head>
<body>
<!-- 引用图标 -->
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
<!-- 引用图标 -->
<div class="btn-box">
<a href="#"><ion-icon name="game-controller-outline"></ion-icon></a>
<a href="#"><ion-icon name="megaphone-outline"></ion-icon></a>
<a href="#"><ion-icon name="person-circle-outline"></ion-icon></a>
<a href="#"><ion-icon name="videocam-outline"></ion-icon></i></a>
</div>
</body>
</html>
5.光闪导航栏
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>闪亮的玻璃图标悬浮效果</title>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
<style>
*{
margin:0;
padding:0;
/* 这个是告诉浏览器:你想要设置的边框和内边距的值是包含在总宽高内的 */
box-sizing: border-box;
}
.container{
position: absolute;
width: 100%;
/* 100%窗口高度 */
height: 100vh;
/* 弹性布局 水平垂直居中 */
display: flex;
justify-content: center;
align-items: center;
/* 渐变背景 自上而下 */
background: linear-gradient(to bottom, #2193b0, #6dd5ed);
}
.container::before{
content: "";
position: absolute;
bottom:0px;
width: 100%;
height: 50%;
z-index: 1;
border-top: 1px solid rgba(50, 255, 9, 0.753);
/* 背景模糊 */
backdrop-filter: blur(5px);
}
.container .color{
position: absolute;
/* 模糊滤镜 数值越大越模糊 */
filter: blur(200px);
}
.container .color:nth-child(1){
background: #fd746c;
width: 800px;
height: 800px;
top:-450px;
}
.container .color:nth-child(2){
background: #cf8bf3;
width: 600px;
height: 600px;
bottom: -150px;
left: 100px;
}
.container .color:nth-child(3){
background: #fdb99b;
width: 400px;
height: 400px;
bottom: 50px;
right: 100px;
}
ul{
position: relative;
display: flex;
z-index: 2;
}
ul li{
position: relative;
list-style: none;
margin: 10px;
}
ul li a{
position: relative;
width: 80px;
height: 80px;
display: inline-block;
border-radius: 10px;
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
color: #fff;
font-size: 32px;
border:1px solid rgba(238, 0, 0, 0.4);
border-right: 1px solid rgba(82, 255, 1, 0.2);
border-bottom: 1px solid rgba(8, 252, 191, 0.664);
/* 盒子阴影 */
box-shadow: 0px 5px 45px rgba(0,0,0,0.1);
/* 背景模糊 */
backdrop-filter: blur(2px);
/* 加个动画过渡,动画才不会太过生硬 */
transition: all 0.5s;
overflow: hidden;
}
ul li a:hover{
/* 鼠标移入元素沿Y轴上移 */
transform: translateY(-20px);
}
/* 加个扫光动画 */
ul li a::before{
content: "";
position: absolute;
top:0px;
left:0px;
width: 50px;
height: 100%;
background-color: rgb(255, 255, 255);
/* 元素沿X轴45横切,沿X轴右移150px */
transform: skewX(45deg) translateX(150px);
/* 动画过渡 */
transition: all 0.5s;
}
ul li a:hover::before{
/* 元素沿X轴45横切,沿X轴左移150px */
transform: skewX(45deg) translateX(-150px);
}
</style>
</head>
<body>
<div class="container">
<div class="color"></div>
<div class="color"></div>
<div class="color"></div>
<ul>
<li>
<a href="#"><i class="fa fa-qq" aria-hidden="true"></i></a>
</li>
<li>
<a href="#"><i class="fa fa-weixin" aria-hidden="true"></i></a>
</li>
<li>
<a href="#"><i class="fa fa-weibo" aria-hidden="true"></i></a>
</li>
<li>
<a href="#"><i class="fa fa-tencent-weibo" aria-hidden="true"></i></a>
</li>
<li>
<a href="#"><i class="fa fa-telegram" aria-hidden="true"></i></a>
</li>
</ul>
</div>
</body>
</html>
6.伸缩导航栏
代码:
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin:0;
padding:0;
}
body{
height: 100vh;
/* 背景渐变 */
background: linear-gradient(200deg,#d9ff01,#ff0e7e);
}
/* 三个元素都需要弹性布局,所以写在一块 */
body,.navbar,.navbar ul{
display: flex;
justify-content: center;
align-items: center;
}
.navbar{
position: relative;
padding: 20px;
background-color: #fff;
border-radius: 50px;
}
.navbar input{
width: 40px;
height: 40px;
/* 这里我们把复选框不透明度设置为0,直接变透明 */
opacity: 0;
/* 鼠标变小手 */
cursor: pointer;
}
.navbar span{
position: absolute;
left:25px;
width: 30px;
height: 4px;
/* 现在将两条线放到一起,然后单独设置第二条线的位置,calc方法可以自动计算数值 */
top: calc(50% - 10px);
border-radius: 15px;
background-color: #999;
/* 现在span覆盖着复选框,鼠标放到span上是点不中复选框的,下面这个属性就可以解决这个问题,即便鼠标放到span上点击也能选中或取消选中复选框 */
pointer-events: none;
/* 收回来的时候过渡刚好是相反的 */
transition: transform 0.3s ease-in-out,top 0.3s ease-in-out 0.3s;
/* 现在过渡效果有点快,有点生硬 */
}
/* 因为第二条线在navbar这个元素内的第三个位置,所以这里写3 */
.navbar span:nth-child(3){
top: calc(50% 6px);
}
.navbar ul{
width: 0;
/* 溢出隐藏 */
overflow: hidden;
/* 在这里加个过渡,可以让展开和收起自然一些 */
transition: all 0.5s;
/* 大家应该也发现了,现在导航栏收起的时候,这个圆是扁的 */
/* 这个问题是因为文字被换行显示了,两个汉字竖着排列了,所以盒子被撑大了,下面这个属性就可以解决这个问题,让文字不换行显示 */
white-space: nowrap;
}
.navbar ul li{
list-style: none;
margin: 0px 15px;
}
.navbar ul li a{
text-decoration: none;
font-size: 20px;
font-weight: 700;
color:#333;
}
.navbar ul li a:hover{
color:#fb7299;
}
/* :checked是当复选框被选中的时候,~这个是兄弟选择器,查找同一级的ul */
.navbar input:checked ~ ul{
width: 350px;
}
.navbar input:checked ~ span:nth-child(2){
top: calc(50% - 2px);
transform: rotate(-45deg);
background-color: #fb7299;
/* 这里先执行top,然后0.3秒后执行transform */
transition: top 0.3s ease-in-out,transform 0.3s ease-in-out 0.3s;
}
.navbar input:checked ~ span:nth-child(3){
top: calc(50% - 2px);
transform: rotate(45deg);
background-color: #fb7299;
transition: top 0.3s ease-in-out,transform 0.3s ease-in-out 0.3s;
}
</style>
</head>
<body>
<span style="font-size:30px;color: #000000;">作为C站的人家,请</span>
<div class="navbar">
<input type="checkbox">
<span></span>
<span></span>
<ul>
<li><a href="javascript:void(0)">点赞</a></li>
<li><a href="javascript:void(0)">关注</a></li>
<li><a href="javascript:void(0)">收藏</a></li>
<li><a href="javascript:void(0)">评论</a></li>
<li><a href="javascript:void(0)">分享</a></li>
</ul>
</div>
<span style="font-size:30px;color: #000000;">我们共同进步吧!</span>
</body>
</html>
7.其他选项模糊效果
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>菜单悬停效果</title>
<style>
*{
/* 初始化 取消页面的内外边距 */
margin: 0;
padding: 0;
}
body{
/* 100%窗口高度 */
height: 100vh;
/* 渐变背景 本人比较偏爱渐变背景 */
background: linear-gradient(200deg,#896ae7,#e98293);
}
ul{
/* 绝对定位 水平、垂直居中 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
/* 弹性布局 */
display: flex;
margin: 0;
padding: 0;
}
ul li{
list-style: none;
/* 这里加个动画过渡 */
transition: 0.5s;
}
ul li a{
/* 相对定位 */
position: relative;
display: block;
text-align: center;
margin: 0 30px;
color: #333;
font-size: 40px;
text-decoration: none;
}
ul:hover li{
/* 不透明度 */
opacity: 0.2;
/* 模糊度 */
filter: blur(2px);
}
ul li:hover{
opacity: 1;
filter: blur(0px);
}
</style>
</head>
<body>
<ul>
<li><a href="#">C站</a></li>
<li><a href="#">朋友们</a></li>
<li><a href="#">你们好</a></li>
<li><a href="#">我是萌新</a></li>
<li><a href="#">L_ar</a></li>
</ul>
</body>
</html>
8.悬停后文字上浮导航特效
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>悬停后文字上浮特效</title>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<style>
*{
/* 初始化 取消页面元素内外边距 */
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
/* 100%窗口高度 */
height: 100vh;
/* 弹性布局 水平、垂直居中 */
display: flex;
justify-content: center;
align-items: center;
/* 渐变背景 */
background: linear-gradient(200deg,#eef1f5,#e6e9f0);
}
.nav{
display: flex;
background-color: #ff00b3;
height: 100px;
/* 圆角 */
border-radius: 20px;
/* 溢出隐藏 */
overflow: hidden;
/* 阴影 */
box-shadow: 0 8px 16px rgba(0,0,0,0.15);
}
.nav .menu{
list-style: none;
display: flex;
justify-content: center;
}
.nav .menu .item{
position: relative;
cursor: pointer;
padding: 0 10px;
width: 150px;
height: 100%;
/* 加个动画过渡 */
transition: all 0.4s ease;
}
.nav .menu .item:hover{
background-color: #ff0000;
}
.nav .menu .item .link{
display: block;
position: relative;
width: 100%;
height: 100px;
color: #fff;
text-decoration: none;
overflow: hidden;
/* 加个动画过渡 */
transition: all 0.4s ease;
}
.nav .menu .item .link .fa{
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
width: 100%;
text-align: center;
font-size: 32px;
/* 加个动画过渡 */
transition: all 0.4s ease;
}
.nav .menu .item .link span{
position: absolute;
width: 100%;
bottom: -50%;
left: 0;
text-align: center;
opacity: 0;
/* 加个动画过渡 */
transition: all 0.4s ease;
}
.nav .menu .item:hover .link span{
/* 鼠标移入文本出现、上移 */
opacity: 1;
bottom: 18px;
}
.nav .menu .item:hover .link .fa{
/* 鼠标移入图标上移 */
transform: translateY(-95%);
}
</style>
</head>
<body>
<nav class="nav">
<ul class="menu">
<li class="item">
<a href="#" class="link">
<i class="fa fa-home" aria-hidden="true"></i>
<span>首页</span>
</a>
</li>
<li class="item">
<a href="#" class="link">
<i class="fa fa-heart" aria-hidden="true"></i>
<span>动态</span>
</a>
</li>
<li class="item">
<a href="#" class="link">
<i class="fa fa-plus-circle" aria-hidden="true"></i>
<span>发布</span>
</a>
</li>
<li class="item">
<a href="#" class="link">
<i class="fa fa-bell" aria-hidden="true"></i>
<span>消息</span>
</a>
</li>
<li class="item">
<a href="#" class="link">
<i class="fa fa-user" aria-hidden="true"></i>
<span>我的</span>
</a>
</li>
</ul>
</nav>
</body>
</html>
9.旋转式导航栏
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>旋转菜单</title>
<link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- 图标来源 -->
<style>
*{
margin: 0;
padding: 0;
}
body{
background: linear-gradient(to right, #00cbfd, #7bff00);
height: 100vh;
}
.menu-toggler{
position: absolute;
display: block;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 40px;
height: 40px;
z-index: 2;
opacity: 0;
cursor: pointer;
}
.menu-toggler:hover label,
.menu-toggler:hover label::before,
.menu-toggler:hover label::after{
background: rgb(255, 0, 191);
}
.menu-toggler:checked label{
background: transparent;
}
.menu-toggler:checked label::before,
.menu-toggler:checked label::after{
top: 0;
width: 40px;
transform-origin: 50% 50%;
}
.menu-toggler:checked label::before{
transform: rotate(45deg);
}
.menu-toggler:checked label::after{
transform: rotate(-45deg);
}
.menu-toggler:checked ~ ul .menu-item{
opacity: 1;
}
.menu-toggler:checked ~ ul .menu-item:nth-child(1){
transform: rotate(0deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item:nth-child(2){
transform: rotate(60deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item:nth-child(3){
transform: rotate(120deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item:nth-child(4){
transform: rotate(180deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item:nth-child(5){
transform: rotate(240deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item:nth-child(6){
transform: rotate(300deg) translateX(-110px);
}
.menu-toggler:checked ~ ul .menu-item a{
pointer-events: auto;
}
.menu-toggler label{
width: 40px;
height: 5px;
display: block;
z-index: 1;
border-radius: 2.5px;
background: rgba(61, 21, 240, 0.7);
transition: transform 0.5s, top 0.5s;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
.menu-toggler label::before,
.menu-toggler label::after{
width: 40px;
height: 5px;
display: block;
z-index: 1;
border-radius: 2.5px;
background: rgba(248, 91, 91, 0.7);
transition: transform 0.5s, top 0.5s;
content: "";
position: absolute;
left: 0;
}
.menu-toggler label::before{
top: 10px;
}
.menu-toggler label::after{
top: -10px;
}
.menu-item:nth-child(1) a{
transform: rotate(0deg);
}
.menu-item:nth-child(2) a{
transform: rotate(-60deg);
}
.menu-item:nth-child(3) a{
transform: rotate(-120deg);
}
.menu-item:nth-child(4) a{
transform: rotate(-180deg);
}
.menu-item:nth-child(5) a{
transform: rotate(-240deg);
}
.menu-item:nth-child(6) a{
transform: rotate(-30deg);
}
.menu-item{
position: absolute;
display: block;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 80px;
height: 80px;
opacity: 0;
transition: 0.5s;
}
.menu-item a{
display: block;
width: inherit;
height: inherit;
line-height: 80px;
color: rgba(255,255,255,0.7);
background: rgba(255,255,255,0.2);
border-radius: 50%;
text-align: center;
text-decoration: none;
font-size: 40px;
pointer-events: none;
transition: 0.2s;
}
.menu-item a:hover{
box-shadow: 0 0 0 2px rgba(255,255,255,0.3);
color: #fff;
background: rgba(255,255,255,0.3);
font-size: 45px;
}
</style>
</head>
<body>
<nav class="menu">
<input type="checkbox" class="menu-toggler" id="menu_toggler" checked>
<label for="menu_toggler"></label>
<ul>
<li class="menu-item">
<a href="#"><i class="fa fa-qq" aria-hidden="true"></i></a>
</li>
<li class="menu-item">
<a href="#"><i class="fa fa-weixin" aria-hidden="true"></i></a>
</li>
<li class="menu-item">
<a href="#"><i class="fa fa-weibo" aria-hidden="true"></i></a>
</li>
<li class="menu-item">
<a href="#"><i class="fa fa-tencent-weibo" aria-hidden="true"></i></a>
</li>
<li class="menu-item">
<a href="#"><i class="fa fa-telegram" aria-hidden="true"></i></a>
</li>
<li class="menu-item">
<a href="#"><i class="fa fa-renren" aria-hidden="true"></i></a>
</li>
</ul>
</nav>
</body>
</html>
10.经典加载特效
代码:
代码语言:javascript复制<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title>波浪文字效果</title>
<style>
*{
/* 初始化 */
margin: 0;
padding: 0;
}
body{
/* 100%窗口高度 */
height: 100vh;
/* 弹性布局 水平垂直居中 */
display: flex;
justify-content: center;
align-items: center;
background-color: #000;
}
.wavy{
/* 相对定位 */
position: relative;
/* 倒影效果 */
-webkit-box-reflect: below -12px linear-gradient(transparent,rgba(0,0,0,0.2));
}
.wavy span{
position: relative;
display: inline-block;
color: #fff;
font-size: 50px;
text-transform: uppercase;
letter-spacing: 8px;
/* 执行动画:动画名 时长 加速后减速 无限次播放 */
animation: wavyAnimate 1s ease-in-out infinite;
/* 通过var函数调用自定义属性--i,在计算出动画延迟时间 */
animation-delay: calc(0.1s * var(--i));
}
/* 定义动画 */
@keyframes wavyAnimate {
0%{
transform: translateY(0);
}
20%{
transform: translateY(-20px);
}
40%,100%{
transform: translateY(0);
}
}
</style>
</head>
<body>
<div class="wavy">
<!-- --i是自定义属性,可通过var函数调用 -->
<span style="--i:1;">l</span>
<span style="--i:2;">o</span>
<span style="--i:3;">a</span>
<span style="--i:4;">d</span>
<span style="--i:5;">i</span>
<span style="--i:6;">n</span>
<span style="--i:7;">g</span>
<span style="--i:8;">.</span>
<span style="--i:9;">.</span>
<span style="--i:10;">.</span>
</div>
</body>
</html>