3D相框案例讲解(详细)

前言

通过现阶段的学习,我们已经掌握了HTML,CSS和JS部分的相关知识点,现在让我们通过一篇案例,来巩固我们近期所学的知识点。

详细视频讲解戳这里

任务一 了解目标案例样式

1.1了解案例

3D相框

1.2 分析案例

首先我们看到一个完整的图片被分成16份,每张小图片都有黄色阴影衬托除3D效果,当我们点击按钮时,所有小图片按Z轴旋转360°并合称为一张照片,此时大照片也有黄色阴影衬托3D效果,再次点击按钮,大图片一同样的方式变回小照片。

源图片

1.3 整理思路

在HTML中创建按钮部分以及一个盒子。在CSS中修饰按钮,设置图片,定义图片移动方向及方式,定义阴影。在JS中实现按钮与盒子的交互,以及将一张图片分成16等份。

任务二 创建3D相框文件包

创建一个本地文件


将源代码,以及所需图片放在一起。

任务三 HTML框架部分

3.1 按钮部分

按钮部分简单,仅需id和类名即可

<button id="a" class="c">Magic </button>

3.2 盒子部分

盒子部分同理,不同点是有两个类名,因为以后照片要向外扩,所以有两个类名,分别适应不同情况。

<div id="b" class="c1 c2"></div>

任务四 CSS初始样式部分

4.1 body样式

*{

  box-sizing: border-box;

}

body {

  background-color: rgb(255, 255, 255);

  display: flex;

  flex-direction: column;

  align-items: center;

  justify-content: center;

  height: 100vh;

}

*{ } 这是一个通用选择器

flex-direction: column; - 这个属性设置flex容器的主轴方向为垂直

align-items: center; - 这个属性设置flex容器内项目在交叉轴上的对齐方式。

justify-content: center; - 这个属性设置flex容器内项目在主轴上的对齐方式。

4.2 按钮样式

.c{

  background-color: #f9ca25;

  color: #ffffff;

  border: 0;

  border-radius: 5px;

  font-size: 18px;

  padding: 12px 20px;

  cursor: pointer;

  position: fixed;

  top: 30px;

  z-index: 1;

}

border-radius: 5px; - 设置元素的边框圆角为5像素。

cursor: pointer; - 当鼠标悬停在元素上时,鼠标光标会变成指针形状。

position: fixed; - 设置元素的位置为固定定位。

z-index: 1; - 设置元素的堆叠顺序为1。

运行如下:

4.3 盒子样式

.c1{

  display: flex;

  flex-wrap: wrap;

  justify-content: space-around;

  width: 500px;

  height: 500px;

  position: relative;

}

.c2{

  width: 600px;

  height: 600px;

}

c1为图片完整前盒子,c2为图片拆分后盒子大小。

flex-wrap: wrap; - 设置flex容器的换行行为。

justify-content: space-around; - 设置flex容器内项目在主轴上的对齐方式。

position: relative; - 设置元素的位置为相对定位。

任务五 JS交互部分

5.1 按钮与盒子交互

const r1 = document.getElementById('b')

const r2 = document.getElementById('a')

r2.addEventListener('click', () => r1.classList.toggle('c2'))

意为实现id为a和id为b相互交互

任务六 JS图片分裂

6.1 功能实现

function fun(){

  for(let i = 0; i <= 3; i++){

    for(let j= 0; j <= 3; j++){

      const x = document.createElement('div')

      x.classList.add('x')

      x.style.backgroundPosition = `${-j * 125}px ${-i * 125}px`

      r1.appendChild(x)

    }

  }

}

fun()

这里我们定义了一个名为fun的函数,并在函数内部创建了一个4x4的div元素网格。每个div元素都被添加到一个名为r1的容器中,并且每个div都有一个x类。

详情解析:

  1. 定义了一个名为fun的函数
  2. 开始一个外层循环,循环变量i从0开始,直到小于或等于3(即循环4次)。
  3. 在外层循环内部,开始一个内层循环,循环变量j从0开始,直到小于或等于3(即循环4次)。
  4. 在内层循环内部,创建一个新的div元素,并将其赋值给常量x。
  5. 给新创建的div元素添加一个名为x的类。这使得该元素可以通过CSS样式进行样式化。
  6. 设置新创建的div元素的backgroundPosition样式属性。这里使用了模板字符串来计算背景图片的位置。-j * 125和-i * 125的计算结果用于确定背景图像的显示位置。
  7. 将新创建的div元素x添加到名为r1的容器中。
  8. 调用fun函数,执行上述代码,创建并添加16个div元素到r1容器中。

任务七 CSS修饰图片

7.1 图片部分

.x{

  background-image: url('../源代码/EZqwsBSPlvSda.webp');

  background-repeat: no-repeat;

  background-size: 500px 500px;

  position: relative;

  width: 125px;

  height: 125px;

  transition: 0.7s ease;

}

background-repeat: no-repeat; - 设置背景图像不重复。

position: relative; - 设置元素的位置为相对定位。

transition: 0.7s ease; - 定义一个过渡效果,当元素的某些属性值发生变化时,这个过渡效果会被应用。

.c1.c2 .x{

    trandform: rotateZ(360deg);

}

这里我们使用了后代选择器和类选择器的组合来应用样式。

transform: rotateZ(360deg); - 这个属性应用了一个CSS变换,使得匹配的元素围绕Z轴旋转360度。

7.2 3D背景阴影部分

.x::after{

  content: '';

  background-color: #f6e58d;

  position: absolute;

  top: 8px;

  right: -15px;

  height: 100%;

  width: 15px;

  transform: skewY(45deg);

}

.x::before{

  content: '';

  background-color: #f9ca25;

  position: absolute;

  bottom: -15px;

  left: 8px;

  height: 15px;

  width: 100%;

  transform: skewX(45deg);

}

这段CSS代码使用了伪元素::after和::before来给具有类x的元素添加装饰性的效果。

position: absolute; - 将伪元素的定位设置为绝对定位。

transform: skewY(45deg); - 应用一个Y轴倾斜的变换效果,倾斜角度为45度,使得伪元素沿Y轴倾斜。

整合代码


<!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-sizing: border-box;}body {background-color: rgb(255, 255, 255);display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100vh;}.c{background-color: #f9ca25;color: #ffffff;border: 0;border-radius: 5px;font-size: 18px;padding: 12px 20px;cursor: pointer;position: fixed;top: 30px;z-index: 1;}.c1{display: flex;flex-wrap: wrap;justify-content: space-around;width: 500px;height: 500px;position: relative;}.c2{width: 600px;height: 600px;}.c1.c2 .x{transform: rotateZ(360deg);}.x{background-image: url(.//3d.webp);background-repeat: no-repeat;background-size: 500px 500px;position: relative;width: 125px;height: 125px;transition: 0.7s ease;  }.x::after{content: '';background-color: #f6e58d;position: absolute;top: 8px;right: -15px;height: 100%;width: 15px;transform: skewY(45deg);}.x::before{content: '';background-color: #f9ca25;position: absolute;bottom: -15px;left: 8px;height: 15px;width: 100%;transform: skewX(45deg);}</style>
</head>
<body><button id="a" class="c">Magic </button><div id="b" class="c1 c2"></div><script>const r1 = document.getElementById('b')const r2 = document.getElementById('a')r2.addEventListener('click', () => r1.classList.toggle('c2'))function fun(){for(let i = 0; i <= 3; i++){for(let j= 0; j <= 3; j++){const x = document.createElement('div')x.classList.add('x')x.style.backgroundPosition = `${-j * 125}px ${-i * 125}px`r1.appendChild(x)}}}fun()</script>
</body>
</html>

效果图

将全体代码写完后运行

3D相框

 

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

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

相关文章

SuperMap GIS基础产品FAQ集锦(20241216)

一、SuperMap iDesktopX 问题1&#xff1a;想问一下 SuperMap iDesktopX可以修改倾斜入库后数据的位置吗 11.2.1 【解决办法】在配置文件&#xff08;*.scp&#xff09;中找打position属性&#xff0c;修改其中的xyz值&#xff0c;用于改变位置&#xff1b;修改后如果想要相机…

2.11.静态链表

一.静态链表的基本概念&#xff1a; 1.上图说明&#xff1a;索引为0处是头结点&#xff0c;头结点不存储数据&#xff0c;但存储下一个结点的数组下标&#xff0c;本例中头结点里存储的下一个结点的数组下标为2&#xff0c;即索引为2的结点为头结点后的第一个结点&#xff0c;以…

【Childishness and Playfulness】

奥迪双钻&#xff0c;旋风冲锋龙卷风&#xff0c;巨无霸 智能芯片 东西南北中&#xff0c;好像已经忘了怎么折叠了&#xff0c;折千纸鹤&#xff0c;折小船&#xff0c;折舞狮&#xff0c;折飞机 红外线小灯&#xff0c;纽扣电池&#xff0c;各种形状投影 爷爷的手电筒&am…

【C++初阶】第9课—标准模板库STL(string_3)

文章目录 1. string类对象的查找操作1.1 c_str返回c格式字符串1.2 substr获取string类对象子串1.3 find和rfind查找字符串内容1.4 find_first_of与find_first_not_of1.5 find_last_of与find_last_not_of1.6 copy复制string类对象内的字符串内容1.7 compare对比string类字符串1.…

【教程】如何下载WandB平台的运行数据?

【教程】如何下载WandB平台的运行数据&#xff1f; 前言 CSDN主页&#xff1a;https://blog.csdn.net/rvdgdsva 博客园主页&#xff1a;https://www.cnblogs.com/hassle Weights & Biases (WandB)是一个用于机器学习的平台&#xff0c;它提供了一套工具来帮助你跟踪、比…

vscode设置终端代理

转载请标明出处&#xff1a;小帆的帆的博客 设置终端代理 修改项目的.vscode/settings.json {"terminal.integrated.env.windows": {"http_proxy": "http://127.0.0.1:7890","https_proxy": "http://127.0.0.1:7890"}, }…

【Linux】自定义项目-进度条

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 准备工作&#xff1a;"\r"与"\n"字符 ①&#xff1a;基本含义 在C语言和Linux环境中&#xff0c;\r是回车符&#xff0c;\n是换行符&#xff0c;用于控制文本格式和输出…

Linux从0到1——初识线程【什么是线程/线程控制/详解tid】

Linux从0到1——初识线程 1. 什么是线程&#xff1f;1.1 线程的概念1.2 结合代码理解线程1.3 重谈地址空间1.4 线程的优缺点 2. 线程异常和线程用途3. Linux进程VS线程4. 详解pthread_create的arg参数4.1 给线程传参4.2 一次创建多个线程 5. 线程控制5.1 线程退出5.2 线程分离5…

[免费]SpringBoot+Vue校园社团管理系统(优质版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue校园社团管理系统(优质版)&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue校园社团管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的迅速发展&#x…

114 二叉树展开为链表

解题思路&#xff1a; \qquad 题目中已经明确&#xff0c;要用先序遍历的顺序展开&#xff0c;那么就需要按照“中-左-右”的顺序遍历二叉树&#xff0c;剩下的问题在于如何在遍历过程中完成链表指针的更新。 \qquad 由于“右子节点”需要链接到左子树最后一个节点之后&#…

Kylin麒麟操作系统 | Nginx服务部署

目录 一、理论储备1. Nginx概述2. Nginx与Apache的区别3. Nginx的服务配置 二、任务实施任务1 Nginx的编译安装1. Server配置2. 客户端测试 任务2 Nginx反向代理1. Server1配置2. Server2配置3. 客户端测试 一、理论储备 1. Nginx概述 Nginx是一个轻量级的web服务器&#xff…

类OCSP靶场-Kioptrix系列-Kioptrix Level 1

一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3 目录爆破 1.4. 敏感信息 2.根据服务搜索漏洞 2.1. 搜索exp 2.2. 编译exp 2.3. 查看exp使用方法&#xff0c;并利用 3. 提权 二、第二种方法 一、前情提要 Kioptrix Level是免费靶场&#x…

Golang囊地鼠gopher

开发知识点-golang 介绍红队专题-Golang工具Fscan简介主要功能ubuntu 安装windows 安装常用命令:项目框架源文件common目录Plugins目录Webscan目录入口点插件扫描类型爆破插件common.ScantypeWebtitle函数webpoc扫描POC 执行CEL-GO 实践CEL指纹识别免杀源码特征参考链接红队专…

快速上手Spring注解、SpringAop

1 Spring 注解的使用 1 IOC 的概念 IOC&#xff08;Inversion of Control&#xff09;&#xff1a;控制反转。 使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程中对象创建控制权由程序转移到外部&#xff0c;此思想称为控制反转。通俗的讲就…

数据地图怎么做?推荐这款数据可视化地图生成器

在数字化与信息化高速发展的今天&#xff0c;企业迎来了前所未有的发展机遇&#xff0c;规模迅速扩张&#xff0c;市场版图不断延伸。然而&#xff0c;伴随着这种快速的发展&#xff0c;一个不容忽视的问题逐渐浮出水面——如何精准高效地掌握分布在各地的分公司、业务点乃至整…

鸿蒙项目云捐助第九讲鸿蒙App应用的捐助详情页功能实现

鸿蒙项目云捐助第九讲鸿蒙App应用的捐助详情页功能实现 这里接下来继续实现捐助详情页的布局页面&#xff0c;也就是当用户进入到分类页面后&#xff0c;点击分类的每一个商品就进入到捐助商品的详情页&#xff0c;这里的布局可以从下面的模板演化而来。 下面根据这个模板来进…

【数学】矩阵的逆与伪逆 EEGLAB

文章目录 前言matlab代码作用EEGLAB 中的代码总结参考文献 前言 在 EEGLAB 的使用中&#xff0c;运行程序时出现了矩阵接近奇异值&#xff0c;或者缩放错误。结果可能不准确。RCOND 1.873732e-20 的 bug&#xff0c;调查 EEGLAB 后发现是 raw 数据的问题。 matlab代码 A_1 …

华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!

文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器&#xff08;父子单向通信&#xff09;1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器&#xff08;父子双向通信&#xff09;1. Link装饰器的特点3. Link使用示例 四…

Pytorch | 对比Pytorch中的十种优化器:基于CIFAR10上的ResNet分类器

Pytorch | 对比Pytorch中的十种优化器&#xff1a;基于CIFAR10上的ResNet分类器 CIFAR10数据集ResNet提出背景网络结构特点工作原理优势 代码实现分析utils.pymain.py导入必要的库设备选择与数据预处理定义加载训练集和测试集主函数部分训练部分测试部分 结果10种优化器对应的训…

Linux系统操作03|chmod、vim

上文&#xff1a; Linux系统操作02|基本命令-CSDN博客 目录 六、chmod&#xff1a;给文件设置权限 1、字母法 2、数字法&#xff08;用的最多&#xff09; 七、vim&#xff1a;代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…