基于css的一些动画
最近因为期末复习周,博客更新鸽了很久,趁着考完试还记得这件事,把之前的大作业里出现过的css动画总结一下
页脚的联系方式图标
这个图片原型是一个静态图
动画效果如下
html
<div class='footer'>
<div class='container'>
<div class='footer-main'>
<div class='col-md-6 footer-left'>
<ul>
<li><a href='#'><span class='fb'> </span></a></li>
<li><a href='#'><span class='twit'> </span></a></li>
<li><a href='#'><span class='in'> </span></a></li>
</ul>
</div>
</div>
</div>
</div>
css
.footer{
background: #3193d1;/*可选,动画的父级div的背景颜色*/
padding: 2em 0;
width: 100%;/*decide by yourself*/
margin-left: 0;
}
.footer-left ul{
padding: 0;
}
.footer-left ul li{
list-style: none;
display: inline-block;
}
.footer-left ul li span{
background-image: url(../img/footer-sprit.png);
width: 30px;
height: 30px;
/*这样设置行高考虑到图片的大小,只展现这么大的方块来显示图标*/
display: block;
/*以块形式呈现元素*/
transition: 0.5s all;
-webkit-transition:0.5s all;
-moz-transition:0.5s all;
-o-transition:0.5s all;
-ms-transition:0.5s all;
/*display on different browsers*/
}
.footer-left ul li span.fb{
background-position: 0 0;
}
.footer-left ul li span.twit{
background-position: -30px 0;
/*向右移动30px,显示中上位置的图标*/
}
.footer-left ul li span.in{
background-position: -60px 0;
}
.footer-left ul li span.fb:hover{
background-position:0px -30px;
/*第一个参数是向左偏移,第二个是向下偏移,取负数则向相反的方向移动*/
}
.footer-left ul li span.twit:hover{
background-position:-30px -30px;
}
.footer-left ul li span.in:hover{
background-position:-60px -30px;
}
展示板块
该展示板块用css过渡,鼠标指针悬浮出现动画
html
<div class='mg' style='margin-left: 20px'>
<div class='tile' style='margin-left: 120px'>
<div class='text11'>
<h1>text</h1>
<!--<img src='#'> 方块的背景图-->
<h2 class='animate-text'>text</h2>
<p class='animate-text'>text</p>
<div class='dots'>
<span></span> <span></span> <span></span>
</div>
</div>
</div>
</div>
css
.mg .tile{margin-left: 120px}
.tile {
width: 570px;
height: 300px;
margin: 20px;
background-color: #99aeff;/*加载动画后的方块的颜色*/
display: inline-block;
/*block和inline-block的区别,前者独占一行,后者可以并排*/
background-size: cover;/*把图片放大到元素容器合适的尺寸*/
/*如果设置一个100%,平铺x轴,两个100%铺满容器,图片可能会被拉伸*/
position: relative;
cursor: pointer;
transition: all 0.4s ease-out;
/*默认值为all 0 ease
all是设置过渡效果 第一个数字是过渡时间 ease是一个函数,用来控制过渡的快慢状态*/
box-shadow: 0px 35px 77px -17px rgba(0, 0, 0, 0.44);
/*四个数字,水平阴影位置,垂直阴影位置,模糊距离(可选),阴影大小(可选),阴影颜色*/
overflow: hidden;/*隐藏溢出部分*/
color: white;
font-family: 'HPE';
}
read more
同上一个,也是通过指针悬浮来显示动画
html
<div class='tool'>
<a class='tooltips' href='#'><span>Read more</span></a>
</div>
css
.tool{position: relative; display: inline;}
a.tooltips span {
position: absolute;
width: 168px;
background: #FFFFFF;
border: 2px solid #ea5b60;
height: 42px;
text-align: center;
color: #000;
padding: 14px 0px 0px 0px;
}
a.tooltips span:hover {
background: #ea5b60;
color: #fff;
transition: 0.5s all;
-webkit-transition: 0.5s all;
-moz-transition: 0.5s all;
-o-transition: 0.5s all;
-ms-transition: 0.5s all;
}
a.tooltips span:before {
content: '';
position: absolute;
top: 22%;
left: 81%;
margin-left: -12px;
width: 0;
height: 0;
border-top: 29px solid #ea5b60;
border-right: 28px solid transparent;
border-left: 28px solid transparent;
transform: rotate(90deg);
}
a.tooltips span:after {
content: '';
position: absolute;
top: 21%;
left: 79%;
margin-left: -8px;
width: 0;
height: 0;
border-top: 30px solid #FFFFFF;
border-right: 31px solid transparent;
border-left: 30px solid transparent;
transform: rotate(90deg);
}
.container1{
padding-right: 15px;
padding-left: 15px;
margin-left: auto;
margin-right: auto;
}
划线动态
在文字上下方加动态划线
html
<div class='text1'>
<a href='#'>text</a>
</div>
css
.text1{
position: relative;
}
.text1::before,
.text1::after{
content: "";
z-index: -1;
position: absolute;
left: 0;
right: 0;
height: 2px;
background: lightskyblue;
transform: scaleX(0);
transition: transform 0.2s ease-in-out;
}
.text1::before{
top: 0;
tranform-origin: center right;
}
.text1::after{
bottom: 0;
transform-origin: center left;
}
.text1:hover{
cursor: pointer;
}
.text1:hover::before{
transform-origin: center left;
transform: scaleX(1);
}
.text:hover::after{
transform-origin: center right;
transform: sclaeX(1);
}
划线动画(升级版)
在上一个的基础上,对相关元素重写,呈现如下图效果
html
<div class="row">
<div class="type both clock">text
<div class="inner"></div>
</div>
</div>
css
.type {
position: relative;
/* font-size: 1em; */
/* 不加relative会显示全屏划线 */
}
.type .inner {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* 如果说只要上下或者左右划线动画,可以不用加.inner标签,如果需要四条边,
则需要加上.inner标签的before和after,并设置相关属性 */
.type::before, .type::after, .type .inner::before, .type .inner::after
/* 这里有个一定要设置四个对象,一个对象对应一条边,before对应左和上,after对应右和下 */
{
position: absolute;
content: '';
display: block;
background: lightskyblue;
-webkit-transition: -webkit-transform 1s;
transition: -webkit-transform 1s;
transition: transform 1s;
transition: transform 1s, -webkit-transform 1s;
}
.type.both::before, .type.both::after {
left: 0;
width: 100%;
height: 2px;
-webkit-transform: scaleX(0);
transform: scaleX(0);
}
.type.both .inner::after, .type.both .inner::before {
top: 0;
width: 2px;
height: 100%;
-webkit-transform: scaleY(0);
transform: scaleY(0);
}
.type.both .inner::before {
left: 0;
}
.type.both .inner::after {
right: 0;
}
.type.both .inner:hover::before, .type.both .inner:hover::after {
transform: scaleY(1);
-webkit-transform: scaleY(1);
}
.type.both::before {
top: 0;
}
.type.both::after {
bottom: 0;
}
.type.both:hover::before, .type.both:hover::after {
transform: scaleX(1);
-webkit-transform: scaleX(1);
}
.type.both:hover .inner::before, .type.both:hover .inner::after {
transform: scaleY(1);
-webkit-transform: scaleY(1);
}
/* 关于transform-origin属性
top left | left top 等价于 0 0;
top | top center | center top 等价于 50% 0
right top | top right 等价于 100% 0
left | left center | center left 等价于 0 50%
center | center center 等价于 50% 50%(默认值)
right | right center | center right 等价于 100% 50%
bottom left | left bottom 等价于 0 100%
bottom | bottom center | center bottom 等价于 50% 100%
bottom right | right bottom 等价于 100% 100%
*/
.type.both.clock .inner::before {
transform-origin: top center;
-webkit-transform-origin: top center;
}
.type.both.clock .inner::after {
transform-origin: bottom center;
-webkit-transform-origin: bottom center;
}
.type.both.clock::before {
transform-origin: right center;
-webkit-transform-origin: right center;
}
.type.both.clock::after {
transform-origin: left center;
-webkit-transform-origin: left center;
}
.type.both.clock:hover .inner::before {
transform-origin: bottom center;
-webkit-transform-origin: bottom center;
}
.type.both.clock:hover .inner::after {
transform-origin: top center;
-webkit-transform-origin: top center;
}
.type.both.clock:hover::before {
transform-origin: left center;
-webkit-transform-origin: left center;
}
.type.both.clock:hover::after {
transform-origin: right center;
-webkit-transform-origin: right center;
}
.row {
/* padding: 0.5em 1em 0.65em; */
width: 50px;
height: 20px;
}
.type {
padding: 0.5em 1em 0.5em;
/* margin: 0 10px; */
width: 22px;
height: 20px;
}
如果不设置transform-origin
属性,将会变为这种形式
css
.type {
position: relative;
/* font-size: 1em; */
/* 不加relative会显示全屏划线 */
}
.type .inner {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* 如果说只要上下或者左右划线动画,可以不用加.inner标签,如果需要四条边,
则需要加上.inner标签的before和after,并设置相关属性 */
.type::before, .type::after, .type .inner::before, .type .inner::after
/* 这里有个一定要设置四个对象,一个对象对应一条边,before对应左和上,after对应右和下 */
{
position: absolute;
content: '';
display: block;
background: lightskyblue;
-webkit-transition: -webkit-transform 1s;
transition: -webkit-transform 1s;
transition: transform 1s;
transition: transform 1s, -webkit-transform 1s;
}
.type.both::before, .type.both::after {
left: 0;
width: 100%;
height: 2px;
-webkit-transform: scaleX(0);
transform: scaleX(0);
}
.type.both .inner::after, .type.both .inner::before {
top: 0;
width: 2px;
height: 100%;
-webkit-transform: scaleY(0);
transform: scaleY(0);
}
.type.both .inner::before {
left: 0;
}
.type.both .inner::after {
right: 0;
}
.type.both .inner:hover::before, .type.both .inner:hover::after {
transform: scaleY(1);
-webkit-transform: scaleY(1);
}
.type.both::before {
top: 0;
}
.type.both::after {
bottom: 0;
}
.type.both:hover::before, .type.both:hover::after {
transform: scaleX(1);
-webkit-transform: scaleX(1);
}
.type.both:hover .inner::before, .type.both:hover .inner::after {
transform: scaleY(1);
-webkit-transform: scaleY(1);
}
.row {
/* padding: 0.5em 1em 0.65em; */
width: 50px;
height: 20px;
}
.type {
padding: 0.5em 1em 0.5em;
/* margin: 0 10px; */
width: 22px;
height: 20px;
}
其他总结
- 一个div里套了多个div,如果浏览器在低分辨率下,子div换行,除了检查子div有没有设置
display: inline-block;
,还要看看父div有没有设置具体宽度- 如果很多时候如果样式的效果和图片不符,不妨检查下div的相关css参数,如长宽、
display
,position
等- 浏览器f12里的element一栏里可对css进行实时调试
transform-origin
的方向,决定了动画线条的移动方向,在设置参数时自己在脑里演示一遍
参考链接
基于css的一些动画的更多相关文章
- 第四十二课:基于CSS的动画引擎
由于低版本浏览器不支持css3 animation,因此我们需要根据浏览器来选择不同的动画引擎.如果浏览器支持css3 animation,那么就使用此动画引擎,如果不支持,就使用javascript ...
- CSS VS JS动画,哪个更快[译]
英文原文:https://davidwalsh.name/css-js-animation 原作者Julian Shapiro是Velocity.js的作者,Velocity.js是一个高效易用的js ...
- JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能
摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...
- 使用javascript和css模拟帧动画的几种方法浅析
我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1 ...
- 一款基于jquery ui的动画提交表单
今天要给大家分享一款基于jquery ui的动画提交表单.这款提交表单的的效果是以动画的形式依次列表所需填写的信息.效果非常不错,效果图如下: 在线预览 源码下载 实现的代码. html代码: & ...
- 分享一款基于jquery的圆形动画按钮
之前为大家介绍过一款纯css3实现的圆形旋转分享按钮.今天要给大家带来一款基于jquery的圆形动画按钮.这款按钮鼠标经过的时候以边框转圈,然后逐渐消息,在实例中给出了四种颜色的demo.效果图如下: ...
- 基于js全屏动画焦点图幻灯片
今天给大家分享一款基于js全屏动画焦点图幻灯片.这款焦点图内的内容以动画形式出现和消失.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="sl ...
- 一款基于jquery的喜欢动画按钮
今天给大家带来一款基于jquery的喜欢动画按钮.这个实例中给了三种动画特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <p class='heading'> C ...
- How Javascript works (Javascript工作原理) (十三) CSS 和 JS 动画底层原理及如何优化其性能
个人总结:读完这篇文章需要20分钟. 这是 JavaScript 工作原理的第十三章. 概述 正如你所知,动画在创建令人叹服的网络应用中扮演着一个关键角色.由于用户越来越注重用户体验,商户开始意识到完 ...
随机推荐
- 「AGC030D」Inversion Sum
「AGC030D」Inversion Sum 传送门 妙啊. 由于逆序对的个数最多只有 \(O(n^2)\) 对,而对于每一个询问与其相关的逆序对数也最多只有 \(O(n)\) 对,我们可以对于每一对 ...
- C语言:位运算加密
数据加密解密是一个常用的功能,如果你不希望让别人看到文件中的内容,可以通过密钥(也称"密码")将文件的内容加密.比如文本文件(.txt),加密前的内容是能够读懂的,加密后的内容是& ...
- ajax请求对返回数据data的处理
1,ajax请求会根据响应头的返回数据类型对返回的数据data变量进行不同的处理 $.get("data/user-permission-submit-" + ddo.manipu ...
- element取消全局loading
背景 前两天在开发一个管理后台项目时, 遇到了一个问题,后端接口返回特别慢,由于该接口调用的是第三方API,无法通过后端去处理.此时想到用loading动画,但随之而来也产生了不少问题, 在此记录一下 ...
- odoo源码学习之任务中的阶段字段stage_id
# 案例0004针对form表单 class Task(models.Model): _name = "project.task" _description = "对于项 ...
- WEB安全新玩法 [10] 防范竞争条件支付漏洞
服务器端业务逻辑,特别是涉及数据库读写时,存在着关键步骤的时序问题,如果设计或代码编写不当就可能存在竞争条件漏洞.攻击者可以利用多线程并发技术,在数据库的余额字段更新之前,同时发起多次兑换积分或购买商 ...
- Django的ORM如何执行group by 语句
问题描述: 使用Django的ORM建立了如下Model: class Book(models.Model): name = models.CharField(max_length=300) page ...
- tomcat与springmvc 结合 之---第17篇 StandContext容器和SpringMVC的WebApplicationContext的联系
writedby 张艳涛, 上一篇分析了,dispatcherservlet通过getServletConfig 方法获取了web.xml定义的<param-init>属性的过程 那么在如 ...
- 安装npm后,nrm ls报错问题
一.nrm : 无法加载文件 E:\nodejs\nrm.ps1,因为在此系统上禁止运行脚本.有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135 ...
- xss.haozi靶机
X00 <script>alert(1)</script> X01 </textarea><script>alert(1)</script> ...