热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS3画一个滚动的骰子

今天利用CSS3来画一个自动滚动的骰子。思路:骰子的六个面分别用六个ul标签,每个面的点数就是li标签,点数的排列采用伸缩布局,然后采用定位和transform属性将六个面翻转折叠成立方体。1

今天利用CSS3来画一个自动滚动的骰子。

思路:骰子的六个面分别用六个ul标签,每个面的点数就是li标签,点数的排列采用伸缩布局,然后采用定位和transform属性将六个面翻转折叠成立方体。

1、HTML结构:用一个类名为box的大盒子将六个面(ul)包起来,方便给整个骰子定位和添加动画;每个ul里的li代表每个面的点数,其中第四、五、六面每一列的点数分别用一个div包起来

 1  <div class="box">
 2         <ul class="one">
 3             <li>li>
 4         ul>
 5         <ul class="two">
 6             <li>li>
 7             <li>li>
 8         ul>
 9         <ul class="three">
10             <li>li>
11             <li>li>
12             <li>li>
13         ul>
14         <ul class="gtThree four">
15             <div>
16                 <li>li>
17                 <li>li>
18             div>
19             <div>
20                 <li>li>
21                 <li>li>
22             div>
23 
24         ul>
25         <ul class="gtThree five">
26             <div>
27                 <li>li>
28                 <li>li>
29             div>
30             <div>
31                 <li>li>
32             div>
33             <div>
34                 <li>li>
35                 <li>li>
36             div>
37         ul>
38         <ul class="gtThree six">
39             <div>
40                 <li>li>
41                 <li>li>
42                 <li>li>
43             div>
44             <div>
45                 <li>li>
46                 <li>li>
47                 <li>li>
48             div>
49         ul>
50     div>

2、利用伸缩(弹性)布局画出骰子六个面的点数

2.1给每个ul添加一个弹性布局,把每个li切成圆

 1 ul {
 2     width: 250px;
 3     height: 250px;
 4     background-color: white;
 5     padding: 0;
 6     list-style: none;
 7     border-radius: 40px;
 8     display: flex;
 9 }
10 
11 li {
12     width: 60px;
13     height: 60px;
14     border-radius: 50%;
15     background-color: red;
16 }

2.2 第一面:主轴居中,副轴居中

1 .one {
2      justify-content: center;
3      align-items: center;
4 }

2.2第二面:将主轴改为垂直方向,两点均匀分开(space-around:两点之间的空白部分是两点前后各空白部分的两倍),副轴居中

1 .two {
2     flex-direction: column;
3     align-items: center;
4     justify-content: space-around;
5 }

2.3第三面:将三点(水平)均匀分成三列,再分别给中间点设置副轴(垂直)居中,第三点设置位于副轴结尾

 1 .three {
 2     justify-content: space-around;
 3 }
 4 
 5 .three li:first-child {
 6     margin-top: 10px;
 7 }
 8 
 9 .three li:nth-child(2) {
10     align-self: center;
11 }
12 
13 .three li:nth-child(3) {
14     align-self: flex-end;
15     margin-bottom: 10px;
16 }

2.4第四,五,六面:每一列均分(flex:1)排列,然后每一列再分别添加一个弹性布局,并将主轴改为垂直方向,其中的点数在主轴上均匀排列,副轴居中

1 .gtThree div {
2     flex: 1;
3     display: flex;
4     flex-direction: column;
5     justify-content: space-around;
6     align-items: center;
7 }

3、利用定位和transform属性将每个面折叠成一个立方体:给每个ul设置一个绝对定位(定位父级是div.box),这样每个面都叠在一起,然后分别:

第一面(后面):不动;

第二面(右侧面):沿Y轴旋转90度,旋转轴是其右边框

第三面(左侧面):沿Y轴旋转-90度,旋转轴是其左边框

第四面(底面):沿X轴旋转-90度,旋转轴是其下边框

第五面(顶面):沿X轴旋转90度,旋转轴是其上边框

第六面(前面):沿Z轴平移250个像素

注:记得给body添加视距属性perspective(视距就是模拟一个镜头到元素的距离),否则看不出立体的效果

 1 body {
 2     perspective: 1800px;
 3     background-color: black;
 4 }
 5 ul {
 6     position: absolute;
 7     left: 0;
 8     top: 0;
 9 }
10 .one {
11     transform: translateZ(0);
12 }
13 
14 .two {
15     transform: rotateY(90deg);
16     transform-origin: right;
17     
18 }
19 
20 .three {
21     transform: rotateY(-90deg);
22     transform-origin: left;
23 
24 }
25 
26 .four{
27     transform: rotateX(-90deg);
28     transform-origin: bottom;
29 }
30 .five{
31     transform: rotateX(90deg);
32     transform-origin: top;
33 }
34 .six{
35     transform: translateZ(250px);
36 } 

 4、给骰子添加动画,让骰子动起来:定义一个change动画,让骰子自由旋转,角度可以自己慢慢调

注:transform-style: preserve-3d; 开启3D动画,必须写,否则没有3D动画效果

 1 .box{
 2     transform-style: preserve-3d;  
 3     animation: change 30s linear infinite;          
 4 }
 5 @keyframes change {
 6     from{
 7         transform: rotateY(360deg) rotateX(720deg) rotateZ(-720deg);
 8     }to{
 9         transform:  rotateY(-360deg) rotateX(-720deg) rotateZ(720deg);
10         }
11 }

4.1鼠标移入事件:各个面分别展开

 1 .box:hover .one{
 2     transform: translateZ(-50px);
 3 }
 4 .box:hover .two{
 5     left: 50px;
 6 }
 7 .box:hover .three{
 8     left: -50px;
 9 }
10 .box:hover .four{
11     top: 50px;
12 }
13 .box:hover .five{
14     top: -50px;
15 }
16 .box:hover .six{
17     transform: translateZ(300px);
18 }

 

★★★附上完整CSS代码(HTML见上方)

  1 body {
  2     perspective: 1800px;
  3     background-color: black;
  4 }
  5 .box{
  6     width: 250px;
  7     height: 250px;
  8     position: relative;
  9     margin: 150px auto;
 10     transform-style: preserve-3d;  
 11     animation: change 30s linear infinite;      
 12     
 13 }
 14 .box:hover .one{
 15     transform: translateZ(-50px);
 16 }
 17 .box:hover .two{
 18     left: 50px;
 19 }
 20 .box:hover .three{
 21     left: -50px;
 22 }
 23 .box:hover .four{
 24     top: 50px;
 25 }
 26 .box:hover .five{
 27     top: -50px;
 28 }
 29 .box:hover .six{
 30     transform: translateZ(300px);
 31 }
 32 ul {
 33     width: 250px;
 34     height: 250px;
 35     background-color: white;
 36     padding: 0;
 37     list-style: none;
 38     border-radius: 40px;
 39     display: flex;
 40     position: absolute;
 41     /* opacity: .9; */
 42     transition: all 1s;
 43     left: 0;
 44     top: 0;
 45     border: 1px solid black;    
 46 }
 47 
 48 li {
 49     width: 60px;
 50     height: 60px;
 51     border-radius: 50%;
 52     background-color: red;
 53 }
 54 
 55 .one {
 56     justify-content: center;
 57     align-items: center;
 58     transform: translateZ(0);
 59 }
 60 
 61 .two {
 62     flex-direction: column;
 63     align-items: center;
 64     justify-content: space-around;
 65     
 66     transform: rotateY(90deg);
 67     transform-origin: right;
 68     
 69 }
 70 
 71 .three {
 72     justify-content: space-around;
 73 
 74     transform: rotateY(-90deg);
 75     transform-origin: left;
 76 
 77 }
 78 
 79 .three li:first-child {
 80     margin-top: 10px;
 81 }
 82 
 83 .three li:nth-child(2) {
 84     align-self: center;
 85 }
 86 
 87 .three li:nth-child(3) {
 88     align-self: flex-end;
 89     margin-bottom: 10px;
 90 }
 91 
 92 .four{
 93     transform: rotateX(-90deg);
 94     transform-origin: bottom;
 95 }
 96 .five{
 97     transform: rotateX(90deg);
 98     transform-origin: top;
 99 }
100 .six{
101     transform: translateZ(250px);
102 } 
103 .gtThree div {
104     flex: 1;
105     display: flex;
106     flex-direction: column;
107     justify-content: space-around;
108     align-items: center;
109 }
110 
111 @keyframes change {
112     from{
113         transform: rotateY(360deg) rotateX(720deg) rotateZ(-720deg);
114     }to{
115         transform:  rotateY(-360deg) rotateX(-720deg) rotateZ(720deg);
116         }
117 }

 


推荐阅读
  • 在DIV内垂直居中UL - Centering Vertically an UL inside a DIV
    iamtryingtomakeanavigationmenuinsidea200pxx200pxsquare,thisnavigationlist(UL)chang ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 这篇文章将为大家详细讲解有关如何使用JavaScript动态设置CSS3属性值,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读 ... [详细]
  • 一篇文章搞定css3 3d效果
    css33d学习心得卡片反转魔方banner图首先我们要学习好css33d一定要有一定的立体感通过这个图片应该清楚的了解到了x轴y轴z轴是什么概念了。首先先给大家看一个小 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
author-avatar
寡凫lo单鹄官方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有