前端练手3D爱心
Posted 神慕蔡蔡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端练手3D爱心相关的知识,希望对你有一定的参考价值。
文章目录
盒子模型常用属性(认识)
overflow: hidden;定义盒子不随浮动
margin-left: 50px:使盒子距离外边距左(右上下)50px
margin: 100px auto:使盒子距离外边距上下左右100px
margin: 使盒子距离外边距上右下左为50px 0 0 50px;
margin: 20px 30px:使盒子距离外边距上下20px,左右30px
margin: 10px:使盒子距离外边距上下左右都是10px
border: 5px solid red:定义盒子边框(5px 单实线 红色) dotted点double双实线
border-radius: 50px:使盒子边角变圆
border-radius: 50%(1-8个值,顺时针):使盒子变圆
border-top-left-radius: 50%:使盒子左上角变圆
display: inline-block:将块级元素div盒子等放到一行
效果一 爱心半边
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>爱心半圆</title>
<style type="text/css">
*
margin: 0;
padding: 0;
div
/*宽*/
width: 100px;
/*高*/
height: 170px;
/*边款颜色*/
border: 2px solid red;
/*盒子居中*/
margin: 100px auto;
/*盒子变圆:border-radius: 50%; */
/*border-radius: 左上角 中间线 右上角;*/
border-radius: 50% 50% 0/40% 50% 0;
/* border-radius: 50%; */
/* 去掉下面多余的线 */
border-left: 0;
border-bottom: 0;
/* y坐标45°倾斜左边 */
transform: rotateZ(45deg);
</style>
</head>
<body>
<div></div>
</body>
</html>
效果:
效果二 爱心整合生成
js将半爱心旋转一周生成爱心
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>整合一个爱心</title>
<style type="text/css">
/* 清空值 */
*
margin: 0;
padding: 0;
/* 背景修改为黑色 */
body
background: #000;
/* 引用div内的love3d元素*/
.love3d
position: relative;
width: 100px;
height: 170px;
margin: 100px auto;
/* 引用script内的heart */
.heart
/* 相对于love3d 定位 */
position: absolute;
/* 定位坐标 36个半爱心的位置 0会重叠为一个半圆 */
left: 0;
top: 0;
width: 100px;
height: 170px;
border: 2px solid red;
border-radius: 50% 50% 0/40% 50% 0;
border-left: 0;
border-bottom: 0;
</style>
</head>
<body>
<!-- div类名love3d -->
<div class="love3d"></div>
<script type="text/javascript">
//在document文档下通过ClassName获取Elements元素
//类数组长度为1
var love3d = document.getElementsByClassName("love3d")[0];
for (var i = 0; i < 36; i++)
// 创建一个元素
var tDiv = document.createElement("div");
//对象类名
tDiv.className = "heart";
//将所有半圆整体Y旋转10°,Z旋转45°,x坐标设置35像素大小
tDiv.style.transform = "rotateY(" + i * 10 + "deg) rotateZ(45deg) translateX(35px)";
// love3d元素内添加tDiv
love3d.appendChild(tDiv);
</script>
</body>
</html>
效果:
效果三 实现立方体爱心
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>立方体旋转</title>
<style type="text/css">
/* 立体效果设置 */
body
perspective: 1000px;
#cube
position: relative;
width: 200px;
height: 200px;
margin: 300px auto;
/* z方向的百分之五十为101 */
transform-origin: 50% 50% -101%;
/* 盒子修改为3d空间 */
transform-style: preserve-3d;
/* 鼠标移动2秒的过渡 */
transition: 2s;
#cube div
position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
border: 2px solid red;
/* 对于下面的div标签 */
#cube div:nth-child(1)
/* 上 */
top: -202px;
/* 旋转基地 xyz方向 */
/*默认值 transform-origin: 50% 50% 0; */
transform-origin: bottom;
/* 围绕x坐标 */
transform: rotateX(90deg);
#cube div:nth-child(2)
top: 202px;
/* 下 */
/* 围绕 上边对称 旋转-90° */
transform-origin: top;
transform: rotateX(-90deg);
#cube div:nth-child(3)
left: -202px;
/* 左 */
/* 围绕y坐标 */
transform-origin: right;
transform: rotateY(-90deg);
#cube div:nth-child(4)
left: 202px;
/* 右 */
transform-origin: left;
transform: rotateY(90deg);
#cube div:nth-child(5)
top: 0px;
/* 前 */
#cube div:nth-child(6)
top: 0px;
/* 后 */
/* 宽加边款的长度 */
transform: translateZ(-202px);
#cube:hover
/* 实现鼠标停留在页面 以360°旋转 */
transform: rotateY(360deg);
</style>
</head>
<body>
<div id="cube">
<div>上</div>
<div>下</div>
<div>左</div>
<div>右</div>
<div>前</div>
<div>后</div>
</div>
</body>
</html>
效果
最终效果 3D爱心
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>整合一个爱心</title>
<style type="text/css">
/* 清空值 */
*
margin: 0;
padding: 0;
/* 背景修改为黑色 */
body
background: #000;
/* 引用div内的love3d元素*/
/* 爱心3D调整 */
.love3d
position: absolute;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
/* 浏览器定位居中 */
/* margin: 100px auto; */
/* 开启3D效果 */
margin-left: -50px;
margin-top: -80px;
transform-style: preserve-3d;
/* css自定义动画,参数:名称 时间 匀速 无限重复 */
animation: yes 10s linear infinite;
/* 启动自定义动画 0-360°*/
@keyframes yes
from
transform: rotateX(0deg) rotateY(0deg);
to
transform: rotateX(360deg) rotateY(180deg);
/* 引用script内的heart */
.heart
/* 相对于love3d 定位 */
position: absolute;
/* 定位坐标 36个半爱心的位置 0会重叠为一个半圆 */
left: 0;
top: 0;
width: 100px;
height: 170px;
border: 2px solid red;
border-radius: 50% 50% 0/40% 50% 0;
border-left: 0;
border-bottom: 0;
/* 图片3d调整 */
.cube
position: relative;
width: 50px;
height: 50px;
transform-style: preserve-3d;
/* 调整图片的位置 */
transform: translateX(32px) translateY(54px) translateZ(27px);
.cube div
position: absolute;
left: 0;
top: 0;
width: 50px;
height: 50px;
.cube div:nth-child(1)
/* 上 */
top: -50px;
/* 旋转基地 xyz方向 */
/*默认值 transform-origin: 50% 50% 0; */
transform-origin: bottom;
/* 围绕x坐标 */
transform: rotateX(90deg);
.cube div:nth-child(2)
top: 50px;
/* 下 */
/* 围绕 上边对称 旋转-90° */
transform-origin: top;
transform: rotateX(-90deg);
.cube div:nth-child(3)
left: -50px;
/* 左 */
/* 围绕y坐标 */
transform-origin: right;
transform: rotateY(-90deg);
.cube div:nth-child(4)
left: 50px;
/* 右 */
transform-origin: left;
transform: rotateY(90deg);
.cube div:nth-child(5)
/* 前 */
.cube div:nth-child(6)
/* 后 */
/* 宽加边款的长度 */
transform: translateZ(-50px);
.cube div img
width: 50px;
height: 50px;
</style>
</head>
<body>
<!-- div类名love3d -->
<div class="love3d">
<!-- div 盒子 -->
<div class="cube">
<div><img src="./a.webp"></div>
<div><img src="./a.webp"></div>
<div><img src="./a.webp"></div>
<div><img src="./a.webp"></div>
<div><img src="./a.webp"></div>
<div><img src="./a.webp"></div>
</div>
</div>
<script type="text/javascript">
//在document文档下通过ClassName获取Elements元素
//类数组长度为1
var love3d = document.getElementsByClassName("love3d")[0];
for (var i = 0; i < 36; i++)
// 创建一个元素
var tDiv = document.createElement("div");
//对象类名
tDiv.className = "heart";
//将所有半圆整体Y旋转10°,Z旋转45°,x坐标设置35像素大小
tDiv.style.transform = "rotateY(" + i * 10 + "deg) rotateZ(45deg) translateX(35px)";
// love3d元素内添加tDiv
love3d.appendChild(tDiv);
</script>
</body>
</html>
以上是关于前端练手3D爱心的主要内容,如果未能解决你的问题,请参考以下文章