最近笔者在公司内部开展了一次CSS讲座,由于授课经验不太足,授课效果自我感觉并不太好,不过课中有一个笔者用CSS写的一个小效果,其中还是包含了蛮多CSS的常见知识点的,正好也有部分同学很感兴趣如何实现,于是便有了此文。

  先来看看最终效果:(动画需要依靠hover事件来触发,请把鼠标放上去)如果看不到请点击这里

  

  如果你耐心的看完了,最终效果如下图:

  

  那么,效果看完了,让我们先来整理下上面的效果总共用了哪些css3效果呢?(可能有些火影迷已经按捺不住了XD)

  可能在继续之前有同学会问:这里面用了多少图片呢?答案当然是没有,不信的同学可以查看下dom,那么我们继续

  因为整个效果还比较复杂,我们得一步步分解开来看:

  首先是最简单的眼球:

<div class='eye'></div>
<style>
.eye{
width: 100px;
height: 100px;
border-radius: 100px;
box-sizing: border-box;
border: 2px solid #000;
position: relative;
background: radial-gradient(at center center, #fd2312, #920205);
}
.eye:before, .eye:after{
content: '';
position: absolute;
border-radius: 100%;
box-sizing: border-box;
}
.eye:before{
width: 60%;
height: 60%;
border: 2px solid #000;
left: 50%;
top: 50%;
margin: -30% 0 0 -30%;
}
.eye:after{
border: 10px solid #000;
left: 50%;
top: 50%;
transform: translate3d(-50%, -50%, 0);
z-index: 1;
}
</style>

  眼球的代码很简单,就一个div标签,然后利用伪元素,就能画出瞳孔,再使用径向渐变,就能画出红色的眼球背景色,效果如下图:

  接着我们来看看那个动来动去的勾玉应该怎么画呢?参加过去年CSS conf的同学可能还记得会上有一位同学分享了画“八字胡”的方法,其实笔者也借鉴了该方法,主要利用border来实现的:

<span class='jewel-container'>
<i class="jewel"></i>
</span>
<style>
//勾玉圆头的部分,其实它就是个圆
.jewel{
width: 100px;
height: 100px;
border-radius: 100%;
position: absolute;
left: 0;
top: 0;
-webkit-transform: rotate(-150deg);
transform: rotate(-150deg);
background-color: currentColor;
}
//勾玉的尾巴,请注意border的width和riadus的取值
.jewel:before{
content: '';
position: absolute;
width: 100px;
top: 50px;
left: 0px;
height: 120px;
border-color: currentColor;
border-style: solid;
border-width: 0 0 0 100px;
border-radius: 0 0 0 100%;
}
</style>

  如上图所示,蓝色的部分就是i标签,而半透明的红色部分则是伪元素。当设置他们为同色的时候就形成了之前demo中转动的勾玉,至于转动,稍微设置一下transform-origin属性,再旋转就可以了。

  接着是3个小勾玉合并变大成一个万花筒勾玉的过程,这就只是一个纯粹的css animation了,本身就没什么技巧性了。

  最后是那个视觉上从远到近飞来的“乌鸦”:

<div class='crow eg'>
<i></i>
</div>
<style>
.crow{
position: relative;
width: 0;
height: 0;
opacity: 0;
z-index: 3;
left: -30px;
top: 0;
-webkit-transition: all 6s;
transition: all 6s;
-webkit-transition-delay: 19s;
transition-delay: 19s;
}
.crow > i{
position: absolute;
left: -20px;
top: -20px;
border: 20px solid transparent;
border-bottom-color: #000;
-webkit-transform: rotateX(80deg);
transform: rotateX(80deg);
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
}
.crow:before, .crow:after{
content: '';
position: absolute;
width: 0;
height: 0;
left: -20px;
top: -20px;
border: 20px solid transparent;
border-bottom-color: #000;
}
.crow:before{
border-bottom-color: #000;
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
transform: rotateX(130deg) rotateY(0deg) rotateZ(40deg) translateX(-2px);
-webkit-animation: fly 1s linear infinite;
animation: fly 1s linear infinite;
}
.crow:after{
border-bottom-color: #000;
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
transform: rotateX(130deg) rotateY(0deg) rotateZ(-40deg) translateX(2px);
-webkit-animation: fly2 1s linear infinite;
animation: fly2 1s linear infinite;
}
.crow.eg:hover > i{
-webkit-transform: rotateX(0);
transform: rotateX(0);
}
.crow.eg:before{
-webkit-animation: fly 1s linear 3;
animation: fly 1s linear 3;
}
.crow.eg:hover:before{
-webkit-transform: rotateX(0) rotateY(0) rotateZ(90deg) translateX(-10px) translateY(10px);
transform: rotateX(0) rotateY(0) rotateZ(90deg) translateX(-10px) translateY(10px);
}
.crow.eg:after{
-webkit-animation: fly2 1s linear 3;
animation: fly2 1s linear 3;
}
.crow.eg:hover:after{
-webkit-transform: rotateX(0) rotateY(0) rotateZ(-90deg) translateX(10px) translateY(10px);
transform: rotateX(0) rotateY(0) rotateZ(-90deg) translateX(10px) translateY(10px);
}
</style>

  仍然只用了一个标签来实现“乌鸦”(不过这个乌鸦的完成度确实不怎么高...)的,利用了一下CSS3 中的rotate3d来进行了一些简单的3d旋转。

  最后,加上一些动画把之前的东西串起来,就做好了一只“开瞳”的写轮眼了。

  

  P.S.其实就CSS目前的发展状况而言,它对新手是有一定的门槛的,特别是CSS3增加了太多的灵活性和可操作性,给了我们特别多的能力,但是不到时候,可能我们的不知道“前端”已经具备这样一种能力,虽然未来可能会逐渐成型的web animation API会解决这一问题,但是在目前阶段,想要在css上有所提升,还是需要大家在日常生活中,多想多练,时不时把自己的一些构想尝试着实现以下,说不定,能有一些意外的收获。

  

  

【CSS】少年,你想拥有写轮眼么?的更多相关文章

  1. 想拥有一款钢铁侠Jarvis管家的软件吗?

    漫威的<钢铁侠>电影很好看,里面钢铁侠的管家Jarvis,可以说非常酷.既能管理日常生活,还能组装钢铁战衣.跟随托尼出生入死,形影不离. 那么现实生活中,想不想拥有这一款软件?看看下面这个 ...

  2. 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小

    少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...

  3. 想拥有自己的Python程序包,你只需15步

    来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...

  4. 【面试必备】CSS盒模型的点点滴滴

    从接触CSS布局开始,就一直在听盒模型的概念了,网上的文章有很多,深浅不一.有些人会认为盒模型很简单,不就是border.margin.padding.content嘛,一个元素所占的空间就是把它们都 ...

  5. 关于CSS中的PX值(像素)

    场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...

  6. [转]CSS 模块

    CSS 模块 如果你想知道 CSS 最近发展的转折点,你应该选择去观看 Christopher Chedeau 在2014年11月的 NationJS 大会上做的名称为 CSS in JS 的分享.不 ...

  7. IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)

    一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...

  8. Quantum CSS,一个超快的CSS引擎

    开始 本文翻译自Inside a super fast CSS engine: Quantum CSS,如果想要阅读原文,可以点击前往,以下内容夹杂本人一些思考,翻译也并不一定完全. 碎碎念 为什么翻 ...

  9. css预处理器sass使用教程(多图预警)

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

随机推荐

  1. curl post请求方式

    curl -l -H "application/x-www-form-urlencoded; charset=UTF-8" -X POST -d "query=SELEC ...

  2. JavaOne Online Hands-on Labs

    http://www.oracle.com/technetwork/java/index-156938.html

  3. 【网络】TCP的拥塞控制

    一.拥塞控制的一般原理 拥塞:对网络中某一资源的需求超过了该资源所能提供的可用部分 拥塞控制是防止过多的数据注入到网络,这样可以使网络中的路由器或链路不致过载,拥塞控制是一个全局性的过程. 流量控制往 ...

  4. Reload file in vim

    68down voteaccepted Give this a try: :e From :h :e: Edit the current file. This is useful to re-edit ...

  5. redis connetced refused remote

    239down vote I've been stuck with the same issue, and the preceding answer did not help me (albeit w ...

  6. Citrix XenServer

    Citrix XenServer xenserver-test cpu特性码:77fafbff-bfebfbff-00000021-2c100800 xe snapshot-list xen还原快照 ...

  7. 让你的 EditText 所有清除

    原文地址:让你的 EditText 所有清除 參考原文:Giving your Edit Texts the All Clear 项目地址(欢迎 Star):ClearEditText 在输入文本的时 ...

  8. CSS 相对|绝对(relative/absolute)定位系列(一)

    一.有话要说 以前写内容基本上都是:眼睛一亮——哟呵,这个不错,写!然后去古人所说的茅房里蹲会儿,就有写作的思路了.但是,构思相对/绝对(relative/absolute)定位系列却有好些时日,考虑 ...

  9. Jenkins系列之-—01 简介&新建任务

    一.Jenkins 简介 Jenkins是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目.l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安装-只要把 ...

  10. 项目期复习总结1:背景图合并,hack,浏览器内核前缀,伪类after before

    文件夹: 1.背景图合并和CSS Spirit 2.PS基本快捷键 3.hack技术基本书写,为什么不用? 4.内核前缀 5.伪类afterbefore 1.背景图合并和CSS Spirit 背景图合 ...