首页 > 其他分享 >用html做立方体,并旋转

用html做立方体,并旋转

时间:2024-07-09 20:29:34浏览次数:17  
标签:box translateZ nth transform 旋转 rotateY html 立方体 type

用html做立方体,并旋转

前言

刚开始学HTML时以为只能做网页,可是,在这里插入图片描述
HTML彻底颠覆了我的认知。

分析

经我一波操作,搭出来一个正方体。
首先,要完成我们这个项目有三个重要的地方,分别是:
观察层:视角
3D体:开启HTML3d模式
3D面:旋转
从观察层开始,视角距离我们要用perspactive来实现近大远小。这是HTML坐标系
在这里插入图片描述
注意它的旋转方向。
3d层,3d打开方式。transform-style: preserve-3d;语句。
旋转,涉及到动画,等会儿再讲。

开肝

构建3d体。
这样做:创建6个button,把他们放在一起,开启3d,制作三维效果,最后调整位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            border: 1px solid #fff;
            background: rgba(255, 255, 255,0.75);
            color: #fff;
            font-size: 100px;
            line-height: 200px;
            text-align: center;
            position: absolute;
            transition: 2s;
        }
        body{
            perspective: 800px;
            display: flex;
            justify-content: center;
            align-items: center;
            background: #000;
            height: 100vh;
        }
        .box:nth-of-type(1){transform: rotateY(90deg) translateZ(100px);}
        .box:nth-of-type(2){transform: rotateY(-90deg) translateZ(100px);}
        .box:nth-of-type(3){transform: rotateX(90deg) translateZ(100px);}
        .box:nth-of-type(4){transform: rotateX(-90deg) translateZ(100px);}
        .box:nth-of-type(5){transform: rotateY(0deg) translateZ(100px);}
        .box:nth-of-type(6){transform: rotateY(180deg) translateZ(100px);}
        .boxs{
            position: absolute;
            /* transform: rotateX(45deg) rotateY(45deg); */
            transform-style: preserve-3d;
            width: 200px;
            height: 200px;
            animation: go 3s infinite linear;
            animation-play-state: running;
        }
    </style>
</head>
<body>
    <div class="boxs">
        <div class="box first">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
    </div>
</body>
</html>

效果:
在这里插入图片描述
有可能看不太清,我改了一下。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            border: 1px solid #fff;
            background: rgba(255, 255, 255,0.75);
            color: #fff;
            font-size: 100px;
            line-height: 200px;
            text-align: center;
            position: absolute;
            transition: 2s;
        }
        body{
            perspective: 800px;
            display: flex;
            justify-content: center;
            align-items: center;
            background: #000;
            height: 100vh;
        }
        .box:nth-of-type(1){transform: rotateY(90deg) translateZ(100px);}
        .box:nth-of-type(2){transform: rotateY(-90deg) translateZ(100px);}
        .box:nth-of-type(3){transform: rotateX(90deg) translateZ(100px);}
        .box:nth-of-type(4){transform: rotateX(-90deg) translateZ(100px);}
        .box:nth-of-type(5){transform: rotateY(0deg) translateZ(100px);}
        .box:nth-of-type(6){transform: rotateY(180deg) translateZ(100px);}
        .boxs{
            position: absolute;
            transform: rotateX(45deg) rotateY(45deg);
            transform-style: preserve-3d;
            width: 200px;
            height: 200px;
            animation: go 3s infinite linear;
            animation-play-state: running;
        }
    </style>
</head>
<body>
    <div class="boxs">
        <div class="box first">1</div>
        <div class="box">2</div>
        <div class="box">3</div>
        <div class="box">4</div>
        <div class="box">5</div>
        <div class="box">6</div>
    </div>
</body>
</html>

效果:
在这里插入图片描述
很不错。
接下来就实现旋转了,动画效果,要用到

@keyframes go{
            0%{}
            100%{}
        }

只要可以计算,就可以放进0%和100%后的大括号里,刚开始,我们要把它设为正面,也就是rotateX和rotateY为0deg,deg就是角度,然后,再100%时我们可以将它的rotateX和rotateY设为720deg。
代码长这样:

@keyframes go{
            0%{transform: rotateX(0deg) rotateY(0deg);}
            100%{transform: rotateX(720deg) rotateY(360deg);}
        }

最终代码

我添加了一点特殊效果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            border: 1px solid #fff;
            background: rgba(255, 255, 255,0.75);
            color: #fff;
            font-size: 100px;
            line-height: 200px;
            text-align: center;
            position: absolute;
            transition: 2s;
        }
        body{
            perspective: 800px;
            display: flex;
            justify-content: center;
            align-items: center;
            background: #000;
            height: 100vh;
        }
        .boxs,.boxs2{
            position: absolute;
            transform: rotateX(45deg) rotateY(45deg);
            transform-style: preserve-3d;
            width: 200px;
            height: 200px;
            animation: go 3s infinite linear;
            animation-play-state: running;
        }
        .boxs:hover{
            animation-play-state: paused;
        }
        .box:nth-of-type(2){transform: rotateY(-90deg) translateZ(100px);}
        .box:nth-of-type(3){transform: rotateX(90deg) translateZ(100px);}
        .box:nth-of-type(4){transform: rotateX(-90deg) translateZ(100px);}
        .box:nth-of-type(5){transform: rotateY(0deg) translateZ(100px);}
        .box:nth-of-type(6){transform: rotateY(180deg) translateZ(100px);}
        .boxs2>.box:nth-of-type(1){transform: rotateY(90deg) translateZ(25px);}
        .boxs2>.box:nth-of-type(2){transform: rotateY(-90deg) translateZ(25px);}
        .boxs2>.box:nth-of-type(3){transform: rotateX(90deg) translateZ(25px);}
        .boxs2>.box:nth-of-type(4){transform: rotateX(-90deg) translateZ(25px);}
        .boxs2>.box:nth-of-type(5){transform: rotateY(0deg) translateZ(25px);}
        .boxs2>.box:nth-of-type(6){transform: rotateY(180deg) translateZ(25px);}
        .boxs2>.box{
            width: 50px;
            height: 50px;
            font-size: 36px;
            line-height: 50px;
            background: rgba(140, 228, 8, 0.25);
        }
        .boxs2{
            width: 50px;
            height: 50px;
        }
        .first{
            transform-origin: 0%;
            transform: translateZ(100px) translateX(200px) rotateY(90deg);
        }
        .boxs:hover .first{
            transform: translateZ(100px) translateX(200px) rotateY(0deg);
        }
        @keyframes go{
            0%{transform: rotateX(0deg) rotateY(0deg);}
            100%{transform: rotateX(720deg) rotateY(360deg);}
        }
    </style>
</head>
<body>
    <div class="boxs2">
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
    <div class="boxs">
        <div class="box first"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
</body>
</html>

如果将鼠标放在正方体上,会有一个面开门,会看见一个淡绿色的正方体在里面转。

最后

敬请期待!

标签:box,translateZ,nth,transform,旋转,rotateY,html,立方体,type
From: https://blog.csdn.net/2401_82944012/article/details/140224084

相关文章

  • JavaWeb__HTML&CSS
    目录一、HTML1、网页的组成部分2、HTML文件的书写规范3.HTML标签的介绍4、标签的语法5、常用标签介绍二、CSS1、CSS技术介绍2、CSS语法规则3、CSS和HTML的结合方式3.1、行内式3.2、内嵌式3.3、外部样式表4、CSS选择器4.1、标签名选择器4.2、id选择器4.3、class选择......
  • 前端面试基础html/js/css
    一、css1.说一下css盒子模型CSS盒子模型(BoxModel)是CSS中用于描述元素尺寸和布局的一个重要概念。它定义了元素的内容、内边距、边框、外边距和高度的计算方式。盒子模型对于网页布局和响应式设计至关重要。在CSS中,每个元素都可以被视为一个盒子,这个盒子由内容(content)、......
  • HTML总讲
    HTML元素语法HTML元素以开始标签起始HTML元素以结束标签终止元素的内容是开始标签与结束标签之间的内容某些HTML元素具有空内容(emptycontent)空元素在开始标签中进行关闭(以开始标签的结束而结束)大多数HTML元素可拥有属性空的HTML元素没有内容的HTML元素被称为空......
  • 【HTML学习】网站基础架构
    因为工作需要,我开始接触网站。用了二十多年的互联网,对于网页的基础架构并不了解,以至于只是一个半自动化的wordpress,很多内容都不会弄。最近学了HTML相关知识,总算有了些许了解。将内容分享出来,希望能够帮助到对网站结构和HTML一窍不通的读者朋友们。首先,先发一张我的网站首页......
  • docx转html方案验证-支持latex,表格,图片(aspose)
    方案总结:1:poi(html属性支持)存在一个bug,对于table中的cell中既有文本又有图片的在转化后图片丢失2:tika(主要是提取内容,转换出来的html不太好)3.openoffice(依赖安装,转出的html不太好)4.aspose(功能强大但是付费),但也可以免费使用,缺点:不支持扩展原因代码不是开源的5.mamm......
  • docx转html方案验证-支持latex,表格,图片(poi)
    方案总结:1:poi(html属性支持)存在一个bug,对于table中的cell中既有文本又有图片的在转化后图片丢失2:tika(主要是提取内容,转换出来的html不太好)3.openoffice(依赖安装,转出的html不太好)4.aspose(功能强大但是付费),但也可以免费使用,缺点:不支持扩展原因代码不是开源的5.mamm......
  • md文件批量转html
    1.requirements.txtbeautifulsoup4==4.12.3Markdown==3.62.main.pyimportmarkdownimportosimportshutilfrombs4importBeautifulSoupimportuuidimportargparsedefmd2html(src_folder,dest_folder):foriteminos.listdir(src_folder):......
  • 前端JS特效第19集:HTML5鼠标跟随星星光标特效
    HTML5鼠标跟随星星光标特效,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml">......
  • 前端JS特效第20集:HTML5图片瀑布流带筛选功能代码
    HTML5图片瀑布流带筛选功能代码,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtml><htmllang="en"class="no-js"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,init......
  • 前端JS特效第21集:HTML5响应式多种切换效果轮播大图切换js特效代码
    HTML5响应式多种切换效果轮播大图切换js特效代码,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999......