纯HTML+CSS写出一颗会飘动的树,有没有惊艳到你呢?
前言
使用HTML+CSS能写出什么惊人的效果呢?
针对这个问题,我总会看到类似的回答,比如没有JS,前端永远都是静态的;HTML5要搭配JS,要不然一文不值。
JS固然强大,但CSS也并非一文不值,这里我就要为CSS3鸣不平了,说出上面那些回答的人可能真的不了解CSS的强大之处。
今天这篇文章我们就一起来看看使用纯HTML+CSS如何写出一棵会飘动的树吧,看看你有没有被惊艳到。
文章末尾附有Github源码地址。
CSS
会飘动的树-原型
首先我们来看看这棵树的原型图吧。
原型图
然后我们再去一步步分析下这个图是如何实现的吧。
原理分析
整棵树的HTML部分实际是由一系列的DIV构成,每个父DIV内部包含两个子DIV,代表左右分叉的树枝,然后一层层往下,形成类似二叉树的结构。
通过CSS的scale属性,给每个子DIV元素缩小宽高比例,实际看起来就是树枝越往外层越细的效果。
最后给左右两侧的树枝不同的动画效果,就可以看出整棵树在跳动的效果了。
图形拆分
将整个图形进行拆分,一整颗大树实际上是由很多的树枝组成,我们先来看看单根树枝是如何实现的。
拆分后的图形效果是这样的。
拆分后
只要我们将这一根树枝的实现原理弄懂了,就可以很容易的知道整棵树是如何实现的了。
HTML部分的代码实际都是由一系列的DIV构成。
每一层DIV下面有两个子DIV,这里因为只展示了一根树枝,所以看到的父DIV只有一个子DIV。
CSS代码
CSS部分的代码是整棵树实现的核心。
最外层树根DIV基本属性
最外层DIV也是树根,它的基本属性很重要。包含宽度和高度,定位信息,设置动画。
基本CSS属性
我们定义的树根DIV其实是水平状态的,所以需要再额外加上一个动画让树根DIV旋转成垂直状态。
树根DIV
左右树枝DIV
每个div下面的第一个子div,表示的是树枝的右侧分支,通过上面基本CSS属性已经设置了一个rot动画。
第二个子div,表示的是树枝的左侧分支,需要设置另外一个动画rot-inv。
左侧分支
树根动画rot-root
树根动画主要是设置旋转角度,将水平的div,旋转为垂直方向的div,增加了正负5度的偏差,就会有树根左右摇动的效果。
树根动画
左侧树枝动画
左侧树枝的动画效果包括逆时针旋转一定的角度,同时会通过scale属性缩小宽高,表现出树枝越来越细的效果。
左侧树枝动画
右侧树枝动画
右侧树枝动画效果包括顺时针旋转一定的角度,同时通过scale属性缩小宽高,表现出树枝越来越细的效果。
右侧树枝动画
这个项目到这里就算是做完了,想要完整代码自己学习练手的小伙伴进我的群自助领取,已经上传到学习群里了:640633433,欢迎初学和进阶中的小伙伴。
至此,所有部分的代码就讲解完毕了。如果运行完成后,就可以得到文章一开始‘摇动的树’的效果了。
纯HTML+CSS写出一颗会飘动的树,有没有惊艳到你呢?的更多相关文章
- css写出0.5px边框(一)
在移动端会出现线条太粗的现象,简单来说,是因为手机端的像素单位和ui的图比例是2:1,所以ui图的1px边框对我们来说就是0.5px,但是浏览器渲染的最小单位就是1px,下面给几种方法用css写出0. ...
- css写出三角形(兼容IE)
css写出三角形 利用css写三角形,兼容IE7 .arrow-up { width:0px; height:0px; border-left:10px solid transparent; bo ...
- html+css写出类似word目录样式的内容
word目录的格式里这种很常见,要用html+css写出来刚开始还有点懵. 左右两边都是内容撑开宽度,中间内容的宽度也不是确定的,也是随着左右两边的内容动态变化的. 最终解决思路是,给右边内容加上白色 ...
- 用纯css写出三角形
1.新建一个元素,随便什么元素,不过我习惯性的会用块元素来做.如果行内元素就display:block它.<div class="triangle"></div& ...
- 不用任何图片,只用简单的css写出唯美的钟表,就问你行吗?
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAGHCAIAAABJR31QAAAgAElEQVR4nOy9aXhc1ZUurPvcH7f73n ...
- 仿淘宝左侧菜单导航栏纯Html + css 写的
这俩天闲来没事淘宝逛了一圈看到淘宝的左侧导航菜单做的是真心的棒啊,一时兴起,查了点资料抓了几个图片仿淘宝写了个css,时间紧写的不太好,大神勿喷,给小白做个参考 废话不多说先来个效果图 接下来直接上代 ...
- 用css写出下拉框(代码转自wq群)
做网易云音乐首页时遇到的问题,鼠标指在右上角头像时出现下拉框. <style>/* css*/ #body{ float: left; } #xialakuang{ background- ...
- 用html标签+css写出旋转的正方体
有一段时间没写代码了,刚写有点手生,无从下手,为了能快速进入状态,就写了这一个小东西,纯用标签和样式表写.下面看一下我写的. 这一段是样式表: <style> *{ margin: 0; ...
- html+css写出响应式侧边导航栏
html部分:先写用div画好六个导航的卡片,再利用css添加响应效果 <div class='card-holder'> <div class='card-wrapper'> ...
随机推荐
- 统计大写字母个数&压缩和去重(过滤)
找出给定字符串中大写字符(即'A'-'Z')的个数 接口说明 原型:int CalcCapital(String str); 返回值:int 知识点 字符串 运行时间限制 10M 内存限制 128 输 ...
- erlang节点互通查看
在局域网内部,一般用短节点名来完成短节点的全联通. 全联通的前提之一是cookie要相同,cookie记录在一个文件中. 对于同一个物理机上的两个erlang节点,不用其他配置就可以全 ...
- C#正则表达式引发的CPU跑高问题以及解决方法
3月23日(周日)下午16:30左右,博客园主站负载均衡中的2台Web服务器CPU玩起了爬楼梯的游戏(见上图),一直爬到了接近100%.发现这个状况后,我们立即将这2台阿里云临时磁盘云服务器从负载均衡 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目3
2014-04-28 22:18 题目:计算N的阶乘尾巴上有多少个零? 解法:计算5的个数即可,因为2 * 5 = 10,2的个数肯定比5多.计算5的个数可以在对数时间内搞定. 代码: // 17.3 ...
- C++的字符输入
字符串的输入有6中方式,这六种方式各有各的特点,我这篇学习笔记是自己的经验总结,没有去探讨内存,函数库等的复杂问题,仅仅是为了实用: 第一:cin cin一次接受一个字符,所以有的人会选择定义一个字符 ...
- Python程序执行时的不同电脑路径不同问题
原因:因代码转移时项目路径发生了变化,导致解释器无法找到对应路径,是的程序无法正常执行 需求: 1.我希望代码能在不同的电脑下,不必修改源代码就能正常执行(所需模块已安装的前提下) 2.我希望代码在命 ...
- CentOS 7.5 部署蓝鲸运维平台
环境准备 官方建议 准备至少3台 CentOS 7 以上操作系统的机器 最低配置:2核4G 建议配置: 4核12G 以上 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍 部署前关闭SELin ...
- css:hover状态改变另一个元素样式的使用
效果演示 css:hover状态改变另一个元素样式的使用 .box { width: 150px; height: 150px; background-color: #069; line-height ...
- Linux系统源码安装cloud-init
参考:https://cloud.tencent.com/document/product/213/12587使用以下命令下载 cloud-init 源码包 官网下载地址:https://launch ...
- NodeJs01 文件浏览器
ES6常用新语法 前言 是时候学点新的JS了! 为了在学习NodeJs之前,能及时用上语言的新特性,我们打算从一开始先学习一下JavaScript语言的最基本最常用新语法.本课程的内容,是已经假设你有 ...