【CSS】少年,你想拥有写轮眼么?
最近笔者在公司内部开展了一次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】少年,你想拥有写轮眼么?的更多相关文章
- 想拥有一款钢铁侠Jarvis管家的软件吗?
漫威的<钢铁侠>电影很好看,里面钢铁侠的管家Jarvis,可以说非常酷.既能管理日常生活,还能组装钢铁战衣.跟随托尼出生入死,形影不离. 那么现实生活中,想不想拥有这一款软件?看看下面这个 ...
- 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小
少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...
- 想拥有自己的Python程序包,你只需15步
来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...
- 【面试必备】CSS盒模型的点点滴滴
从接触CSS布局开始,就一直在听盒模型的概念了,网上的文章有很多,深浅不一.有些人会认为盒模型很简单,不就是border.margin.padding.content嘛,一个元素所占的空间就是把它们都 ...
- 关于CSS中的PX值(像素)
场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...
- [转]CSS 模块
CSS 模块 如果你想知道 CSS 最近发展的转折点,你应该选择去观看 Christopher Chedeau 在2014年11月的 NationJS 大会上做的名称为 CSS in JS 的分享.不 ...
- IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)
一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...
- Quantum CSS,一个超快的CSS引擎
开始 本文翻译自Inside a super fast CSS engine: Quantum CSS,如果想要阅读原文,可以点击前往,以下内容夹杂本人一些思考,翻译也并不一定完全. 碎碎念 为什么翻 ...
- css预处理器sass使用教程(多图预警)
css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...
随机推荐
- java基础 4 继承(1)抽象类与接口的区别
抽象类: 是用来捕捉子类的通用特性的,至少包含一个抽象方法,该抽象方法必须在子类中实现,由于抽象类没有抽象方法的具体实现,因此不能对抽象类进行实例化. 接口: 定义了一组方法,是抽象方法的集合,但是接 ...
- OSGI是什么
OSGI(Open Services Gateway Initiative),或者通俗点说JAVA动态模块系统,定义了一套模块应用开发的框架.OSGI容器实现方案如Knopflerfish, Equi ...
- MySQL查询count(*)、count(1)、count(field)的区别收集
经过查询研究得出这个和MySQL中用什么引擎有关,比如InnoDB和MyISAM在处理这count(*).count(1).count(field)都有不同的方式,还有就是和版本都有关系,不同的版本会 ...
- 运维平台之CMDB系统建设
CMDB是运维的基础核心系统,所有的元数据和共享数据管理源,类似于业务中的账号平台的作用.本篇文章,我将从概念篇.模型篇.到实现与实施篇具体的进行阐述. CMDB也称配置管理,配置管理一直被认为是 I ...
- Selenium系列之--测试框架断言【转】
selenium提供了三种模式的断言:assert .verify.waitfor 1)Assert(断言) 失败时,该测试将终止. 2)Verify(验证) 失败时,该测试将继续执行,并将错误记入日 ...
- css3最新版中文参考手册在线浏览
对于CSS 3.0,它对于我们Web设计人员来说不只是新奇的技术,更重要的是这些全新概念的Web应用给我们的设计开发提高了效率以及更多的无限可能性,我们将不必再依赖图片或者 Javascript 去完 ...
- RSA私钥加密公钥解密、各种密钥格式转换
此随笔解决RSA加解密相关的3个问题,详情可以查看源码. 1.公钥加密.私钥解密2.各种格式RSA密钥之间的转换3.不限制加密原文的长度
- properties文件读取配置信息
public static void main(String[] args){ String printerName=""; String path = "C:\\Bar ...
- IOS开发之----常用的基本GDB命令【转】
原文地址:http://blog.sina.com.cn/s/blog_71715bf801016d2y.html gdb不是万能的,可是没有gdb却是万万不能的.这里给大家简单介绍下iOS开发中最基 ...
- 《C++ Primer Plus》学习笔记3
<C++ Primer Plus>学习笔记3 第8章 函数探幽 ============================================================== ...