七巧板的由来

先来个科普吧,是我在查资料过程中看到的,感觉很有意思。

宋朝有个叫黄伯思的人,对几何图形很有研究,他热情好客,发明了一种用6张小桌子组成的“宴几”——请客吃饭的小桌子。后来有人把它改进为7张桌组成的宴几,可以根据吃饭人数的不同,把桌子拼成不同的形状,比如3人拼成三角形,4人拼成四方形,6人拼成六方形……这样用餐时人人方便,气氛更好。后来,有人把宴几缩小改变到只有七块板,用它拼图,演变成一种玩具。

因为它十分巧妙好玩,所以人们叫它“七巧板”。

今天,在世界上几乎没有人不知道七巧板和七巧图,它在国外被称为“唐图”(Tangram),意思是来自中国的拼图(不是唐代发明的图)。

纳尼,原来Tangram是咱们中国的,。。。

方案

看完了有趣的东西,该开始正题了,就是无论使用什么技术给我整出个七巧板来。。。(在前端页面里)

结合自己的知识体系,思考了下大概的思路:

Canvas,万能的Cavans一定可以解决问题,加上之前做过Painter。灵活性+扩展性满足。

CSS3,每个版子是一个dom元素,然后使用css3搞定。灵活性 扩展性不如canvas。

svg,这个应该也可以吧,但自己对这方面的知识匮乏。

。。。暂时未想出。

考虑到时间成本(太紧了)和其他。。。原因,决定使用css3的方案。

开始想板子使用图片来做,但多亏自己以前写过一篇‘用CSS代码写出的各种形状图形的方法’,里面收录了使用CSS3制作20种图形的方法,有兴趣的同学可以看下,查了下可以满足所需的7种板子的形状。

用到属性

transform

translation

技术验证

开始之前先要验证下,所要用到的CSS3是否可以兼容所要需平台,这多亏http://caniuse.com/。

因为我要运行在移动端,查了下要用到的css3属性,在安卓2.3以上都支持,但需加前缀,所以可以放心使用。

编码实现

首先我们需要一个容器和起个元素用来表示七块板子。

div>

div>

div>

div>

div>

div>

div>

div>

其实我们总共用到的图形总共有三种,三角形、正方形行和平行四边形。这在上面提到的文章里面全有,这里涉及到的一点点数学的知识,就是这些板子之间是有一定大小关系的,只需一点点数学知识姐可以解决了。

至此板子的表示就不是问题了,其次还需把板子移动到指定位置才可以拼成好看的图形,这全靠css3的 transform搞定,可以实现平移、缩放、旋转、变形多种操作。

这里我们设置wap的position为relative。所有板子都为absolute。并设置top和left为零,这样初始化时所有的板子都位于左上角,然后将板子的transform-origin设为左上角,就实现了定位时的好计算,下面是css部分的代码。

.wrap{position:relative;width:300px;height:400px;

}.t{position:absolute;top:0;left:0;width:0;height:0;transform-origin:0 0;

}.t1{border-top:212.13203435596425732025330863145px solid red;border-right:212.13203435596425732025330863145px solid transparent;transform:translate(150px, 150px) rotate(-135deg);

}.t2{border-top:212.13203435596425732025330863145px solid #fdaf17;border-right:212.13203435596425732025330863145px solid transparent;transform:translate(150px, 150px) rotate(135deg);

}.t3{width:106.06601717798212866012665431573px;height:106.06601717798212866012665431573px;background:#c3d946;transform:translate(150px,150px) rotate(45deg);

}.t4{border-top:106.06601717798212866012665431573px solid #00bdd0;border-right:106.06601717798212866012665431573px solid transparent;transform:translate(150px,150px) rotate(-45deg);

}.t5{border-top:106.06601717798212866012665431573px solid #5dbe79;border-right:106.06601717798212866012665431573px solid transparent;transform:translate(75px,225px) rotate(45deg);

}.t6{width:150px;height:75px;transform:translate(300px) rotate(90deg) skew(45deg);background:#ffdd01;

}.t7{border-top:150px solid #0177bf;border-right:150px solid transparent;transform:translate(300px,300px) rotate(180deg);

}

DEMO

好了,七巧板终于做好了让我们来看下效果吧。

留个jsfiddle的代码,博客园不能欠入,只能留个链接了http://jsfiddle.net/yanhaijing/3tf8ac6q/1/

提高

仅此而已了吗,当然不是,还有很多可考虑的东西,这里的css都是写死的,灵活性太差,如果用LESS的话(我用的就是less),我们可以设置一个基本长度变量(less支持变量和数学运算哦),然后其他的全部基于这个变量计算,这样只要改变这个变量,就能轻松改变整个七巧板的大小,可扩展性是不是有很大进步(实际上我就是这么做的,但jsfiddle不支持less语法,所以我就写了个css版的)。

其实还可以通过css3变化出多种图形,据说七巧板的可以拼出的图形多大几千种之多。。。快快开动你的脑筋来制作吧,做好了记得给博主留个链接啊。

进一步的提高就是通过CSS3的transtion,制作动画,在配合key-frame,可以制作七巧板变形的复杂动画,效果美轮美奂啊。

这里只贴一个图片吧,不提供代码了。。。

参考资料

CSS3动画详解(http://beiyuu.com/css3-animation/)

腾讯动画手册(http://ecd.tencent.com/css3/guide.html)

用html做七巧板的方法,纯CSS3打造七巧板相关推荐

  1. vue 图片被背景色覆盖_如何使用纯css3打造有点意思的故障艺术(附React/Vue加强组件版)...

    前言 很早之前就看到国外很多酷炫的网站在实践"故障艺术", 或者错位动画", 感觉非常有意思, 现在APP端的抖音启动界面有着这种设计的影子, 作为一名用于探索未知的前端 ...

  2. html5云朵效果,纯CSS3打造逼真的多层云彩动画特效

    这是一款效果非常炫酷的纯CSS3逼真的多层云彩动画特效.该特效使用多张透明的云彩PNG图片作为背景图片,使用CSS animation动画来制作云彩水平飘动的动画效果. 使用方法 HTML结构 该多层 ...

  3. [原创]纯CSS3打造的3D翻页翻转特效

    刚接触CSS3动画,心血来潮实现了一个心目中自己设计的翻页效果的3D动画,页面纯CSS3,目前只能在Chrome中玩,理论上可以支持Safari. 1. 新建HTML,代码如下(数据和翻页后的数据都是 ...

  4. 轻松使用纯css3打造有点意思的故障艺术(附React加强组件版)

    前言 很早之前就看到国外很多酷炫的网站在实践"故障艺术", 或者错位动画", 感觉非常有意思, 现在APP端的抖音启动界面有着这种设计的影子, 作为一名用于探索未知的前端 ...

  5. 用html做七巧板的方法,纯HTML5绘制的七巧板

    纯HTML5绘制的七巧板 var tangram = [ {p:[{x:0,y:0},{x:800,y:0},{x:400,y:400}],color:"#caff67"}, {p ...

  6. 来自程序员的圣诞浪漫纯CSS3打造的圣诞祝福【献给前端初学者】内附代码以及运行方法

    如果你想编一个简单的圣诞树送给你的男/女朋友的话, 这里也许有你要的东西, 对于你也许他很简单,不值一提. 但是对于小白,也许是他入门HTML.css3的极佳小项目 代码运行方式:代码运行很简单,解压 ...

  7. html 让按钮立体,纯CSS3打造立体质感按钮

    此CSS3按钮包含5个实例DEMO,自适应宽度,立体感强并带有鼠标滑过效果.开发产品.软件必备素材.下载 此效果. CSS3按钮HTML代码: Click me! Come on, don't be ...

  8. CSS3制作七巧板动画

    欢迎访问我的博客GISer空间. 1. CSS3:每块板作为为一个dom元素. 1.1 用一个容器和七个元素来表示七块板. <div class="wrap">< ...

  9. html5用css做样式边框,纯CSS3实现自定义Tooltip边框 涂鸦风格

    本文作者html5tricks,转载请注明出处 这是一款用纯CSS3打造的自定义Tooltip边框的应用,之前我们讨论过如何用CSS3来实现不同样式的Tooltip,今天的这款Tooltip却可以用C ...

  10. 8个超震撼的HTML5和纯CSS3动画源码

    HTML5和CSS3之所以强大,不仅因为现在大量的浏览器的支持,更是因为它们已经越来越能满足现代开发的需要.Flash在几年之后肯定会消亡,那么HTML5和CSS3将会替代Flash.今天我们要给大家 ...

最新文章

  1. c语言从stdin读入
  2. BZOJ-3171-循环格-TJOI2013-费用流
  3. 最新综述:对话系统之用户模拟器
  4. ABAP Authorization trace工具
  5. 如此沙雕的代码注释,还是程序员会玩!
  6. 漫步最优化十——极值类型
  7. Java面试问题:新的任务提交到线程池,线程池是怎样处理
  8. 安卓程序代写 网上程序代写[原]Android开发技巧--ListView
  9. html 模糊匹配,CSS 属性选择器 模糊匹配的使用
  10. Android 视频直播 ( 从快播到直播,从高清到无码 )十年视频开发项目
  11. 使用PPT扣图,去掉背景
  12. 虚拟机与Linu系统安装与配置详细教程
  13. 实例讲解FusionInsight MRS RTD 实时决策引擎在医保行业应用
  14. 你唯一需要擅长的事情
  15. base64 的加密和解密
  16. Datawhale组队学习NLP之transformer Task03 BERT
  17. J0ker的CISSP之路:复习-Access Control(4)
  18. 服务器在线监控,EasyNmon
  19. Direct3D基础——Direct3D概述
  20. 安卓沉浸式状态栏,android沉浸式状态栏工具类封装

热门文章

  1. result_of 用法
  2. java库的使用--Failsafe
  3. HDU 6599 Palindromic_Automaton
  4. The Perfect Match: 3D Point Cloud Matching with Smoothed Densities
  5. matlab上位机电机,基于MATLAB的电机综合性能测试系统上位机软件设计
  6. 主键外键超键候选键的联系和区别_主键、外键、超键、候选键
  7. 参数检验和非参数检验的区别
  8. python打开qq并登录_python爬虫入门之qq登陆初探
  9. 少年群侠传服务器维护时间,少年群侠传开服表
  10. c语言scan例子,SCAN和C-SCAN算法图解