前端练手3D爱心

news2025/2/25 0:57:22

文章目录

      • 盒子模型常用属性(认识)
      • 效果一 爱心半边
      • 效果二 爱心整合生成
      • 效果三 实现立方体爱心
      • 最终效果 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>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试宝典~Symbol、相同的Set、Getter、控制动画、js中哪些操作会造成内存泄漏?等......

前端JavaScript面试题&#x1f353;&#x1f353;Symbol&#x1f353;&#x1f353;相同的Set&#x1f353;&#x1f353;Getter&#x1f353;&#x1f353;控制动画&#x1f353;&#x1f353;js中哪些操作会造成内存泄漏?html页面的骨架&#xff0c;相当于人的骨头&#xff…

vscode下载和安装教程和配置中文插件(超详细)

前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 前言&#xff1a; vscode主要是用于前端的编程工具&#xff0c;其他编程的语言也可以在vscode里面编程运行。 优点&#xff1a;简洁、占用内存小、界面美观 一、下载步骤 1.到官网根据自己的操…

vue里面使用pdfjs-dist+fabric实现pdf电子签章!!!

2022.9.6 一、需求 最近领导提了一个新需求&#xff1a;仿照e签宝&#xff0c;实现pdf电子签章&#xff01; 最终实现效果图 这是做出来的效果图&#xff0c;当然还有很多待修改 二、思路 然后我就去看了下人家e签宝的操作界面&#xff0c;左侧是印章&#xff0c;右侧是…

Vue 原理整理

目录 1. 组件化基础>&#xff08;MVVM模型&#xff09; 2. Vue的响应式原理 3.为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty&#xff1f; 4.computed 的实现原理 5. computed 和 watch 有什么区别及运用场景? 6. Vue 中的 key 到底有什么用&#xff…

VUE中watch的详细使用教程

1、watch是什么&#xff1f; watch:是vue中常用的侦听器&#xff08;监听器&#xff09;&#xff0c;用来监听数据的变化 2、watch的使用方式如下 watch: { 这里写你在data中定义的变量名或别处方法名: { handler(数据改变后新的值, 数据改变之前旧的值) { 这里写你拿到变化值后…

uniApp实现热更新

热更新 热更新是开发中常见且常用的一种软件版本控制的方式&#xff0c;在uniapp进行使用热更新将软件实现更新操作 思路: 服务器中存储着最新版本号&#xff0c;前端进行查询可以在首次进入应用时进行请求版本号进行一个匹对如果版本号一致则不提示&#xff0c;反之则提示进行…

Layui的layer.confirm弹框用法,很详细

Layui的弹框用法一、官网示例二、自定义一些样式1、自定义标题2、给提示框内容加上图标3、定义按钮的位置4、自定义关闭按钮5、自定义遮罩6、自定义点击弹框外遮罩关闭弹框7、定义唯一弹框8、自定义弹框出场动画9、关闭弹框动画10、设置弹框可以最大或者最小化11、设置弹框固定…

前端react axios 发送post请求fastapi响应报错422 (Unprocessable Entity)

post请求fastapi响应报错:422 (Unprocessable Entity) 最近在学习和使用fastapi的时候遇到了一个问题,就是发送了post请求后服务器端回应:422 (Unprocessable Entity), 具体含义: HTTP 422 状态码表示服务器理解请求实体的内容类型&#xff0c;并且请求实体的语法是正确的&am…

CSS盒子居中的6种方法!

大家好, 我是菜鸟,今天给大家带来几种css盒子居中的方法! 1.flex布局设置居中 常见的一种方式就是使用flex布局设置居中。 利用弹性布局(flex)&#xff0c;实现水平居中&#xff0c;其中justify-content 用于设置弹性盒子元素在主轴&#xff08;横轴&#xff09;方向上的对…

如何成功安装webpack

按照B站里的视频总是报错&#xff0c;于是去CSDN里尝试了多种方法&#xff0c;也不知道是哪种方法有效了&#xff0c;叠加了多种方法&#xff0c;都记下来。 做换行变色的例子时不会变色。因为jQuery包属于es6语法&#xff0c;并不是所有浏览器都能支持es6语法。因此&#xff0…

resetFields重置初始值不生效的原因

问题 最近在做项目的时候, dialog组件回调close里面 一般我都会加个resetFields 重置初始值和校验 其他地方都没问题, 在table组件里面出问题了, 后来经过监听vue tools, 查看到resetFields后, formData没变, 最后也找到原因了. 解决 1、用 dialog【新增】、【修改】数据 2、…

uniapp 项目搭建

1、uni-app 简介 uni-app 是一个使用 Vue.js 开发所有前端应用的框架。开发者编写一套代码&#xff0c;可发布到 iOS、Android、H5、以及各种小程序&#xff08;微信/支付宝/百度/头条/QQ/钉钉/淘宝&#xff09;、快应用等多个平台。 详细的 uni-app 官方文档&#xff0c;请翻…

一个简单的网页设计HTML5作业

前言&#xff1a; HTML5是Web中核心语言HTML的规范&#xff0c;用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的&#xff0c;在浏览器中通过一些技术处理将其转换成为了可识别的信息。HTML5在从前HTML4.01的基础上进行了一定的改进&#xff0c;虽然技术人员在开发…

如何在vue项目中使用rem布局

如何在vue项目中使用rem布局 场景&#xff1a; 在我们开发移动端项目中&#xff0c;实现手机页面布局&#xff0c;需要使用rem布局&#xff0c;那么该如何使用呢&#xff1f; 本文就详细的讲解了在vue项目中使用rem布局的整个过程&#xff0c;可以仔细阅读哦&#xff01; 方法&…

对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson

文章目录一、 json-lib二、 Google的Gson1.简介2. 配置步骤1. MAVEN 依赖引入2. gsonUtil 工具类3. 排除不要序列化的熟悉注解类 Exclude三. 阿里巴巴的FastJson1.简介2.配置步骤1.引入maven2. 配置 CustomFastjsonConfig3. 测试4. 开源的Jackson简介&#xff1a;Jackson配置Ob…

手把手教你入门Vue,猴子都能看懂的教程

目录标题一、Vue简介二、模板语法2.1 插值语法2.2 指令语法三、数据绑定3.1 单向数据绑定3.2 双向数据绑定四、写法区别4.1 el写法4.2 data写法五、MVVM模型六、数据代理七、事件处理7.1 基本使用7.2 修饰符7.3 键盘事件7.3.1 系统提供7.3.2 原始key值7.3.3 系统修饰键八、计算…

【Node.js】一文带你开发博客项目之接口(处理请求、搭建开发环境、开发路由)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿 offer&#xff08;秋招&#xff09; &#x1f947;推荐学习&…

微信小程序实现文字长按复制、一键复制功能

一、不引入外部组件的实现方式 <!-- index.wxml --> <view><!-- 长按复制 --><view bindlongtap"copyText" data-key"{{item.cdkey}}">{{ item.cdkey }}</view><text bindlongtap"copyText" data-key"{{i…

【Web实战-Tomcat-Servlet-Thymeleaf -JDBC-MySQL】浏览器页面显示数据库数据(水果库存系统)

&#x1f947;作者 .29. 的✔博客主页✔ &#x1f947;记录JavaWeb学习的专栏&#xff1a;Web专栏 &#x1f947;拼搏起来吧&#xff0c;未来会给你开出一个无法拒绝的条件… 您的点赞&#xff0c;收藏以及关注是对作者最大的鼓励喔 ~~ 客户端展示库存数据前言一、Thymeleaf - …

每天一个CSS小特效,文字闪烁——【钢铁侠:爱你三千遍】

文章目录前言效果图HTML篇CSS篇1. 盒子模型设置2. 动画设置完整代码前言 我是前端小刘不怕牛牛&#xff0c;love you 3000&#xff0c;愿你能遇到值得的人。 今天分享一个唯美的文字闪烁CSS特效 希望大家能喜欢 效果图 HTML篇 代码&#xff1a; <div class"main"…