前言

使用HTML+CSS能写出什么惊人的效果呢?

针对这个问题,我总会看到类似的回答,比如没有JS,前端永远都是静态的;HTML5要搭配JS,要不然一文不值。

JS固然强大,但CSS也并非一文不值,这里我就要为CSS3鸣不平了,说出上面那些回答的人可能真的不了解CSS的强大之处。

今天这篇文章我们就一起来看看使用纯HTML+CSS如何写出一棵会飘动的树吧,看看你有没有被惊艳到。

文章末尾附有Github源码地址。

CSS

会飘动的树-原型

首先我们来看看这棵树的原型图吧。

原型图

然后我们再去一步步分析下这个图是如何实现的吧。

原理分析

整棵树的HTML部分实际是由一系列的DIV构成,每个父DIV内部包含两个子DIV,代表左右分叉的树枝,然后一层层往下,形成类似二叉树的结构。

通过CSS的scale属性,给每个子DIV元素缩小宽高比例,实际看起来就是树枝越往外层越细的效果。

最后给左右两侧的树枝不同的动画效果,就可以看出整棵树在跳动的效果了。

图形拆分

将整个图形进行拆分,一整颗大树实际上是由很多的树枝组成,我们先来看看单根树枝是如何实现的。

拆分后的图形效果是这样的。

拆分后

只要我们将这一根树枝的实现原理弄懂了,就可以很容易的知道整棵树是如何实现的了。

HTML代码

HTML部分的代码实际都是由一系列的DIV构成。

每一层DIV下面有两个子DIV,这里因为只展示了一根树枝,所以看到的父DIV只有一个子DIV。

HTML代码

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写出一颗会飘动的树,有没有惊艳到你呢?的更多相关文章

  1. css写出0.5px边框(一)

    在移动端会出现线条太粗的现象,简单来说,是因为手机端的像素单位和ui的图比例是2:1,所以ui图的1px边框对我们来说就是0.5px,但是浏览器渲染的最小单位就是1px,下面给几种方法用css写出0. ...

  2. css写出三角形(兼容IE)

    css写出三角形   利用css写三角形,兼容IE7 .arrow-up { width:0px; height:0px; border-left:10px solid transparent; bo ...

  3. html+css写出类似word目录样式的内容

    word目录的格式里这种很常见,要用html+css写出来刚开始还有点懵. 左右两边都是内容撑开宽度,中间内容的宽度也不是确定的,也是随着左右两边的内容动态变化的. 最终解决思路是,给右边内容加上白色 ...

  4. 用纯css写出三角形

    1.新建一个元素,随便什么元素,不过我习惯性的会用块元素来做.如果行内元素就display:block它.<div class="triangle"></div& ...

  5. 不用任何图片,只用简单的css写出唯美的钟表,就问你行吗?

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAGHCAIAAABJR31QAAAgAElEQVR4nOy9aXhc1ZUurPvcH7f73n ...

  6. 仿淘宝左侧菜单导航栏纯Html + css 写的

    这俩天闲来没事淘宝逛了一圈看到淘宝的左侧导航菜单做的是真心的棒啊,一时兴起,查了点资料抓了几个图片仿淘宝写了个css,时间紧写的不太好,大神勿喷,给小白做个参考 废话不多说先来个效果图 接下来直接上代 ...

  7. 用css写出下拉框(代码转自wq群)

    做网易云音乐首页时遇到的问题,鼠标指在右上角头像时出现下拉框. <style>/* css*/ #body{ float: left; } #xialakuang{ background- ...

  8. 用html标签+css写出旋转的正方体

    有一段时间没写代码了,刚写有点手生,无从下手,为了能快速进入状态,就写了这一个小东西,纯用标签和样式表写.下面看一下我写的. 这一段是样式表: <style> *{ margin: 0; ...

  9. html+css写出响应式侧边导航栏

    html部分:先写用div画好六个导航的卡片,再利用css添加响应效果 <div class='card-holder'> <div class='card-wrapper'> ...

随机推荐

  1. 用scrapy数据抓取实践

    本文来自网易云社区 作者:沈高峰 数据分析中需要用到的不少数据都是需要进行抓取的,并且需要对抓取的数据进行解析之后存入数据库.scrapy是一个强大的爬虫框架,本文简单介绍下使用scrapy进行垂直抓 ...

  2. 剑指Offer - 九度1350 - 二叉树的深度

    剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...

  3. 《Cracking the Coding Interview》——第2章:链表——题目7

    2014-03-18 02:57 题目:检查链表是否是回文的,即是否中心对称. 解法:我的做法是将链表从中间对半拆成两条,然后把后半条反转,再与前半条对比.对比完了再将后半条反转了拼回去.这样不涉及额 ...

  4. httpclient传参类型与响应参数接收

    https://blog.csdn.net/qq_26562641/article/details/72817457 https://blog.csdn.net/chenjf0221/article/ ...

  5. Java 复习计划

    前言 打算下学期开学,也就是九月份,去找实习,现在还有三个月时间.(然而还在天天玩 Python..) 定个复习计划. 1. 基础 并发:Java并发编程实战 [ x ] SQL:MySQL,看看书, ...

  6. 【转】PHP对象在内存中的分配

    对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段.堆空 ...

  7. IE8专用hack

    众所周知,ie6.7的hack直接用*即可,但是ie8的话就比较麻烦,在做半透明背景的时候,为了兼容ie6.7,可以为其设置纯色,但是ie8也同样不支持半透明,需要单独为它设置纯色背景.下面的兼容代码 ...

  8. 洛谷 P3765 总统选举 解题报告

    P3765 总统选举 题目背景 黑恶势力的反攻计划被小C成功摧毁,黑恶势力只好投降.秋之国的人民解放了,举国欢庆.此时,原秋之国总统因没能守护好国土,申请辞职,并请秋之国人民的大救星小C钦定下一任.作 ...

  9. echarts移动端字体模糊解决方法

    echarts使用canvas画图,在移动端使用rem时候,若viewport的scale被缩放,则字体会发生模糊,本人采用的解决方法是在不同的dpr下使用不同的字体大小,具体代码如下: 获取字体大小 ...

  10. 用$("...").attr("checked", true)设置勾选无效的原因

    如下图所示,本来想要实现如下图所示的功能,于是我本来是使用$("...").attr("checked", true/false)来实现该功能,但是第一次点击时 ...