CSS入门级装B利器transition

据传说有研究表明凝视美女能增加寿命、放松心情、缓解压力等等好处。为啥我见了美女只会血压升高、情绪激动?难道你们所说的美女图和我理解的美女图我们不在一个频道?还是我太邪恶了?哈哈,随便搜索到一只EMT美女,放出来缓解下情绪,会更有利于集中精神来装逼。废话不多说,上图……

EMT

背影杀……好吧,兴奋之后血压提高了,脑部供血也足够了。我们先不管她了,开始说今天的主题吧。CSS中有好多属性可以显得自己逼格box-shadow\text-shadowtransition、简写规则等等;中级装逼利器animation、属性选择器、伪类等等;高级装逼利器有CSS变量、正则表达式、transform等等。注意!这个标准不是单纯靠难度来划分的。

没办法在页面上没法放代码,我把效果图做成了GIF,我们来看看图:

CSS入门级装B利器transition

是不是觉得自己的逼格瞬间高了起来?动画耶~ 怎么做到的呢,这就是今天要说的入门级的装逼利器transition属性。这是一个CSS3中新增的属性,从单词字面意思理解它的意思是过渡,它的定义是允许css的属性值在一定的时间区间内平滑地过渡。这种效果可以在鼠标单击、获得焦点、被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值。尝试完demo,了解完定义,是不是觉得谁用谁闪亮啊,平滑的动画效果,能让交互变得更细腻亲和。

transition在CSS3中算是比较强悍的属性了,当然还有其他更牛更强大的属性,有机会我专门写文章说明。今天只说它,需要注意的是Internet Explorer 9 以及更早版本的浏览器不支持transition属性。Safari需要前缀-webkit-transition属性。其他的浏览器全部支持。transitiontransition-propertytransition-durationtransition-timing-functiontransition-delay这四个属性的简写属性。简写的规则是:

transition: property duration timing-function delay;

逐个来介绍,先来说transition-property。它是设置已发生了变化的CSS属性的属性名,有点绕嘴。简单解释下就会了解。比如想要让高度height的变化有过渡效果,就写transition:height 1s;。前提是height发生了变化,例如200px→300px。如果设置了没有变化的属性就不会有任何效果渲染,例如height:200px→200px。

transition-duration是设置完成过渡需要多少时间,单位是秒s或毫秒ms。需要注意的是这货的默认是零,也就是说不设置它的话,过渡根本就不可能显示。这也是我上一段文字中transition:height 1s;会写上1s的原因,重要的地方提醒自己要牢记。小tips:1s=1000ms.

transition-duration过渡效果的速度曲线,它的存在让过渡效果出现了平滑感。这货的值有很多,贴出来看看transition-timing-function: linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n);。具体每个值的作用,我列了个表格:

描述
linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。
ease 默认值;规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))
ease-in 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。
ease-out 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。
ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。

transition-delay属性是规定过渡何时开始,单位是秒s或毫秒ms。这个很好理解,比如设置了transition-delay:1.5s;就是过渡动画1.5S之后开始。拿页面上的DEMO来说就是如果我设置了这个属性和值,那么你的鼠标移动上去后1.5s后才会出现过渡效果。小tips:CSS中整数位是0小数位非零的时候整数位可以不写,例如0.5S可以写成.5s。

如果transition需要控制的属性有多个,就需要用半角的英文逗号,将多个属性隔开。

/*单个属性设置,不设置的项为默认值。*/
transition:height 1s; 
transition:color .5s ease-in-out .5s;
/*多个属性设置。*/
transition:height 1s,color .5s ease-in-out .5s;

关于transition的知识点基本都已经都在上面了。学习的目的是应用,应用的好就会很惊艳,应用的的不好就会很狗shi,不应用的话知识点就会被慢慢遗忘。关键点在于如何应用……回顾定义我们了解到,能和这货最频繁配合的就是:hover和JS了。自身能力有限,并且本篇又是基础类的介绍。我就不整那些看上去高大上的让人费解的东西了。简单的效果有时候最能提现出很惊艳的效果。

用html5中的<nav>标签来做导航会让我们的代码更具备语义。搜索引擎的spider理解我们的代码也会更容易,也会让我们后期对代码的维护工作更容易。对WAI-ARIA无障碍网页应用也会支持的更好。既然有这么多好处,我们就要用一用了。一个简单的导航:

<nav>
    <a href="">首页</a>
    <a href="">产品</a>
    <a href="">新闻</a>
    <a href="">关于</a>
</nav>
nav a{
    margin:0 5px;
    padding: 5px 10px;
    border-radius: 3px;
    border: thin solid #aaa;
    background-color: #eee;
    text-decoration: none;
    color: #6492eb;
}

直接上图说结果……


再之后的工作就是给<a>添加:hover伪类样式。这样三搞两不搞的一个简单的导航就出现在眼前。不过这样的效果是无法装逼的,我们还需要transition这个利器来提升逼格,让我们快捷便利的进入装逼模式。添加transition之后的代码样式如下:

nav a{
    margin:0 5px;
    padding: 5px 10px;
    border-radius: 3px;
    border: thin solid #aaa;
    background-color: #eee;
    text-decoration: none;
    color: #6492eb;
    transition:background-color 2s,color 2s,border 3s ease-out .5s;   /*这行是新增的代码*/
}
nav a:hover{
    background-color: black;
    color: snow;
    border: thin solid red;
}

别说你看不懂,文章开篇已经把参数的意思介绍的很清楚了。看看完成之后的样子吧,整体效果就是下面的样子,可以用鼠标在导航demo上面移动几次尝试下,是不是比没有加transition的效果要炫的很多?

不要纠结文字的颜色和效果,因为我懒的去解决CSS继承的问题,这些全都是小case,我们主要是看原理。如果说真的要想看没被“污染”的效果或者很纠结transition到底要放到<a>里面还是应该放到伪类:hover里面,我写了一个DEMO作为展示和对比,想看就看>>>猛戳这儿<<<
.
.
.
.
.
开什么玩笑,不可能!虽然是初级装逼利器,但是初级也分低档中档高档好不好下面就开启中级装逼模式让装逼亮瞎别人的氪金狗眼吧!

想让画面更炫更有设计感,单纯的transition已经满足不了,必须配合使用其他技术才能实现。当icon fonts技术和transition碰撞会发生什么?

举个例子最能说明问题,利用icon fonts技术的fontawesome来和transition配合。代码还是上面的代码,但是引入了fontawesome的图标。下面就是示例,可以用鼠标移动上去看看……

引入了fontawesome的图标

哦吼~ 逼格又提升了一个档次!觉得自己帅的不要不要的。嘚瑟啊~ fontawesome的图标都是矢量图,也就是说可以理论上可以无限放大,但是不会失真。而且引用方便……真的是很方便。不过客户的需求总是千变万化、奇形怪状的。

若是fontawesome没有自己要用的图标怎么办?其实到达这种装逼境界的人来说这都不是个问题,解决方案很简单——自己做图标,利用CSS雪碧技术(CSS Sprite)。嗯这是不错的解决方案,很多人都在用。

制作的图标先不说质量和设计问题,首先要解决的是颜色的变化,你会说做几套颜色不同的图片就行了。嗯,以前包括现在还是有不少人是用这个解决方案。例如这面这个css雪碧图↓↓↓↓

css雪碧图

很是壮观不是么,看起来应该是最优的解决方案了,我们都知道任何方案都有自己的缺点和短板,主要是看具体使用环境是什么。那么这种“雪碧图”的解决方案的缺点显而易见的有两点:1,是图片容量变大,影响页面加载速度。2,硬性转换而非过渡线性转换,失去了平滑感交互体验下降。

嘿嘿~ 其实吧这两个缺点给屏蔽掉,就行了。总要有有个具体的方法技巧既能使图片不变大,而且转换还是平滑过渡。我想聪明的你已经想的到了——就是把图片背景换成和网页背景一致的颜色,把图标镂空,然后用transition改变图片父元素背景色就行了~哈哈,这个技术我给起名叫“图标镂空背景色过渡技术”。很巧妙不是么?——这才是真正初级装逼利器的中级技术水平。不过这不是我的独创,我也没这智商。网络上有大神早就把思路技巧给写出来了,我说过的多查资料多查文档才能无往不胜。

下面的展示完全可以考虑成这是一个图标的样子,因为我的页面有背景花纹,所以图片我没法处理成背景色。将就看吧,原理才是最主要的。颜色很丑,主要原因是想让颜色对比强烈一些,例子也就容易看一些。

/*css代码*/
div.demo{
    width:图片宽;
    height:图片高;
    background-color: blue;
    transition:background-color 2s;
}
div.demo:hover{
    background-color: red;
}
/*html代码*/
<div class="demo"><img src="images url" /></div>

雪碧技术又可以焕发光彩了,这些自制的图标也能享受到过渡带来的好处了。不过这玩意也有缺点,因为是在需要显示颜色的地方镂空,那么背景色就不能用透明来处理了,必须要和应用这项技术的页面展示区域背景色保持一致。兼容性和扩撒性就强差人意了,从我的页面有背景花纹的情况来看这种技术的短板就显露出来了。

根据尿性,有初级中级,就会高级……没错!高级装逼模式即将开启!!!

高级装逼模式就是jQuery的animate()与transition配合,哈哈具体怎么配合,我也不清楚。哈哈哈,只能是具体情况具体分析。

突然想起来transition并不能对所有的属性变化都有作用,它是有范围的……如果是不支持的属性的话是没有效果的。copy个表过来吧,原文是英文,我顺手翻译了一下,不对的地方将就看吧!别讲究了~主要是为了方便查询使用。下面就是transition能起作用的CSS属性。

属性名 作用
background-color 背景色
background-position 背景图片定位
border-bottom-color 下边框颜色
border-bottom-width 下边框宽度
border-left-color 左边框颜色
border-left-width 左边框宽度
border-right-color 右边框颜色
border-right-width 右边框宽度
border-spacing 相邻单元格的边框间的距离(仅用于“边框分离”模式)
border-top-color 上边框颜色
border-top-width 上边框宽度
bottom 定位元素下外边距边界与其包含块下边界之间的偏移
clip 剪裁绝对定位元素
color 文本的颜色
font-size 字体的尺寸
font-weight 文本的粗细
height 元素的高度
left 定位元素左外边距边界与其包含块左边界之间的偏移
letter-spacing 字符间距
line-height 行高
margin-bottom 下外边距
margin-left 左外边距
margin-right 右外边距
margin-top 上外边距
max-height 最大高度
max-width 最大宽度
min-height 最小高度
min-width 最小宽度
opacity 元素的不透明级别
outline-color 元素周围的轮廓线颜色
outline-width 元素周围的轮廓线宽度
padding-bottom 下填充距
padding-left 左填充距
padding-right 右填充距
padding-top 上填充距
right 定位元素右外边距边界与其包含块右边界之间的偏移
text-indent 首行文本的缩进
text-shadow 文本阴影
top 定位元素上外边距边界与其包含块上边界之间的偏移
vertical-align 垂直对齐方式
visibility 元素是否可见(隐藏元素依然占据空间)
width 元素宽度
word-spacing 字间隔
z-index 堆叠顺序,值越大越在前。

万法不离其宗,掌握了原理,了解了思路。加上一点想象力,这样才会在任何情况下保证自己的创意源源不断,才能学以致用、知行合一。这才是学习知识最好的实践!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容

  • W3C标准中对css3的transition这是样描述的:“css的transition允许css的属性值在一定的...
    青春前行阅读 1,397评论 0 5
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,594评论 1 180
  • 人的一生看似很长,实则很短。转瞬即逝的岁月不仅在我们的容貌留下了痕迹,更是丰富了我们的精神和灵魂。“死亡”是令人恐...
    慕扬z阅读 298评论 0 0
  • 医院里,遍地呻吟。不管几楼几区,哪个科室,哪个病房,您总是身着一袭白衣出现在病人的眼前。精湛的医术,精准的判断,总...
    快哉风_阅读 361评论 0 1
  • 昨天我的姐姐来了,我觉得姐姐来了非常好。因为爸爸妈妈去上班的时候,我就可以和姐姐一起写作业,我遇到不会写的...
    45cbff51831c阅读 250评论 0 0