day40-3d Background Boxes(3D背景盒子转换)

news2024/11/27 12:31:50

50 天学习 50 个项目 - HTMLCSS and JavaScript

day40-3d Background Boxes(3D背景盒子转换)

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>3D Boxes Background</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
    <!-- 点击变换按钮 -->
    <button id="btn" class="magic">变换 🎩</button>
    <!-- 3D容器 -->
    <div id="boxes" class="boxes big"></div>
    <script src="script.js"></script>
</body>

</html>

style.css

/* 引入字体 */
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');

* {
    /* 内减模式 width=border+padding+内容的宽度 */
    box-sizing: border-box;
}

body {
    background-color: #fafafa;
    font-family: 'Roboto', sans-serif;
    /* 子元素竖直居中排列 */
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
}

/* 按钮 */
.magic {
    background-color: #f9ca24;
    color: #fff;
    font-family: 'Poppins', sans-serif;
    border: 0;
    border-radius: 3px;
    font-size: 16px;
    padding: 12px 20px;
    cursor: pointer;
    /* 固定定位 距离窗口 1rem */
    position: fixed;
    top: 1rem;
    /* 字间距 */
    letter-spacing: 1px;
    /* 底部阴影 */
    box-shadow: 0 3px rgba(249, 202, 36, 0.5);
    z-index: 100;
    /* 去除按钮元素的默认外边框 */
    outline: none;
}

/* 伪类选择器 点击按钮 按钮无阴影 向下移动 */
.magic:active {
    box-shadow: none;
    transform: translateY(2px);
}

/* 3D容器 */
.boxes {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    height: 500px;
    width: 500px;
    position: relative;
    /* 默认下是all */
    transition: 0.4s ease;
}

/* 小盒子显示时,宽高变大 */
.boxes.big {
    width: 600px;
    height: 600px;
}

/* 大盒子内的小盒子 */
.boxes.big .box {
    transform: rotateZ(360deg);
}

/* 小盒子 */
.box {
    background-image: url('https://media.giphy.com/media/EZqwsBSPlvSda/giphy.gif');
    background-repeat: no-repeat;
    background-size: 500px 500px;
    position: relative;
    /* 小盒子的大小会影响后续js生成小盒子 */
    height: 125px;
    width: 125px;
    transition: 0.4s ease;
}

/* 小盒子右侧的影音由伪元素实现 */
.box::after {
    content: '';
    background-color: #f6e58d;
    position: absolute;
    top: 8px;
    right: -15px;
    height: 100%;
    width: 15px;
    /* 向下倾斜45度 */
    transform: skewY(45deg);
}

/* 底部阴影 */
.box::before {
    content: '';
    background-color: #f9ca24;
    position: absolute;
    bottom: -15px;
    left: 8px;
    height: 15px;
    width: 100%;
    /* 向右倾斜45度 */
    transform: skewX(45deg);
}

script.js


// 重点 flex position transform 伪元素 transition transform: skewY(45deg); transform: skewX(45deg);
// 1.获取元素节点
const boxesContainer = document.getElementById('boxes')//大盒子容器
const btn = document.getElementById('btn')//按钮
// 2.绑定点击事件 通过切换大盒子的big类,即宽高来切换显示效果
btn.addEventListener('click', () => boxesContainer.classList.toggle('big'))
// 函数:创建小盒子
function createBoxes() {
    // 4*4
    for (let i = 0; i < 4; i++) {
        for (let j = 0; j < 4; j++) {
            const box = document.createElement('div')
            box.classList.add('box')
            // 设置图片的位置,即显示图片的哪块区域
            box.style.backgroundPosition = `${-j * 125}px ${-i * 125}px`
            boxesContainer.appendChild(box)
        }
    }
}
// 初始化创建小盒子
createBoxes()

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

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

相关文章

【Java基础学习打卡17】基本数据类型

目录 前言一、数据类型分类1.基本数据类型2.引用数据类型 二、基本数据类型1.整数类型2.浮点类型3.字符类型4.布尔类型 三、基本数据类型转换1.自动类型转换2.强制类型转换 总结 前言 本文介绍Java中的基本数据类型&#xff0c;共有8种&#xff0c;是Java编程的基础。编程的实…

7-Linux下的网络配置

win下的ipconfig linux下的ifconfig ping 测试主机之间的连通性 设置主机名和hosts映射 设置主机名 查看主机名&#xff1a;hostname修改主机名&#xff1a;vim /etc/hostname &#xff0c;重启后生效 ![[1-Linux目录结构#^f9a9d2]] 设置hosts映射 在win中&#xff1a; …

flask实现一个登录界面

flask实现一个登录界面 基础的Flask项目结构 forms.py&#xff1a;定义登录表单和表单字段的文件。templates/login.html&#xff1a;用于渲染登录表单的 HTML 模板文件。routes.py&#xff1a;定义应用的路由和视图函数的文件。__init__.py&#xff1a;创建并初始化 Flask 应…

Ubuntu 20.04 Ubuntu18.04安装录屏软件Kazam

1.在Ubuntu Software里面输入Kazam&#xff0c;就可以找不到这个软件&#xff0c;直接点击install就可以了 2.使用方法&#xff1a; 选择Screencast&#xff08;录屏&#xff09; Fullscreen&#xff08;全屏&#xff09;-----Windows&#xff08;窗口&#xff09;--------Ar…

Rust vs Go:常用语法对比(十一)

题目来自 Rust Vs Go: Which Language Is Better For Developing High-Performance Applications?[1] 202. Sum of squares Calculate the sum of squares s of data, an array of floating point values. 计算平方和 package mainimport ( "math")func main() { da…

5、joern安装

文章目录 一、安装环境二、安装步骤1、joern地址2、安装中可能出现的问题 一、安装环境 1. java 8   2. gradle 2.0.0(按照官网步骤安装)   3. Graphviz (sudo apt install graphviz-dev)   4. python > 3.5 二、安装步骤 1、joern地址 joern地址 2、安装中可能出…

flutter开发实战-旋转loading指示器

flutter开发实战-旋转loading指示器。 一、交织动画 有些时候我们可能会需要一些复杂的动画&#xff0c;这些动画可能由一个动画序列或重叠的动画组成。一个动画组合在不同阶段包含了多种动画&#xff0c;要实现这种效果&#xff0c;需要使用交织动画&#xff08;Stagger Anim…

同步网盘使用中的五大突出优势

同步网盘是一种流行的云存储解决方案&#xff0c;它可以将您本地计算机上的文件与云端存储空间同步&#xff0c;以保证文件的备份和访问。那么&#xff0c;同步网盘使用中的突出优势是什么呢&#xff1f;下面就为您详细介绍。 一、数据备份 同步网盘最大的优势之一就是可以自动…

【042】解密C++ STL:深入理解并使用queue容器

解密C STL&#xff1a;深入理解并使用queue容器 引言一、queue容器概述二、queue容器的底层实现原理三、queue容器常用API四、queue的使用案例4.1、使用queue容器实现一个高效的算法4.2、实现生产者-消费者模型 总结 引言 &#x1f4a1; 作者简介&#xff1a;一个热爱分享高性能…

基于linux下的高并发服务器开发(第二章)- Linux多进程开发

基于linux下的高并发服务器开发&#xff08;第二章&#xff09;- 2.1 进程概述_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客01 / 程序和进程02 / 单道、多道程序设计03 / 时间片04/ 并行和并发05/ 进程控制块&#xff08;PCB&#xff09;https://blog.csdn.net/w…

聊天机器人如何增加电子商务销售额

聊天机器人和自动化对企业和客户来说都是福音。自动对话和聊天机器人&#xff08;以下统称为“自动化”&#xff09;通过自动回答问题或分配会话信息来帮助用户浏览品牌网站或电商商店。即时答案对客户来说非常有用&#xff0c;使用自动化也可以让原本与客户聊天的客服员工专注…

jQueryAPI

文章目录 1.jQuery 选择器1.1 jQuery 基础选择器1.2 jQuery 层级选择器1.3 隐式迭代1.4 jQuery 筛选选择器1.5 jQuery 筛选方法1.6 jQuery 里面的排他思想1.7 链式编程 2.jQuery 样式操作2.1 操作 css 方法2.2 设置类样式方法2.3 类操作与className区别 3.jQuery 效果3.1 显示隐…

Nginx下载和安装教程、Nginx目录结构、Nginx具体应用

1、Nginx概述 Nginx是一款轻量级的开源Web服务器软件&#xff0c;也是一种反向代理服务器。它以其高性能和灵活性而被广泛应用于互联网领域。本文将介绍Nginx的概述、下载和安装以及目录结构。 &#xff08;1&#xff09;Nginx介绍 Nginx最初由Igor Sysoev开发&#xff0c;目…

【MangoDB】学习笔记

这里写自定义目录标题 1 简介1.1 和MySQL的概念对比1.2 数据类型 1 简介 1.1 和MySQL的概念对比 1.2 数据类型

005.PADS VX2.4自定义快捷键设置及修改

005.PADS VX2.4自定义快捷键设置及修改 若部分快捷键不符合操作习惯或者部分功能系统未设置快捷键&#xff0c;可自定义快捷键功能&#xff0c;自定义快捷键功能需要注意设置的按键需要与无模命令区分&#xff0c;以免与无模命令冲突&#xff1b;如若需要修改某个快捷功能&…

隐马尔可夫HMM算法

算法简介&#xff1a; 一个系统每时每刻都存在着不同的状态&#xff0c;他们的状态由各种复杂的机制形成&#xff0c;且状态随着变化而不断改变&#xff0c;而这些复杂的机制就是一些高度非线性且复杂的射关系。 举一个例子。例如&#xff1a;一辆汽车在一条从左往右的道路上行…

华为OD机试真题 Java 实现【数据分类】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、输入2、输出3、解题思路 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&…

去掉mysql数据库表中日期时间字段的6位微秒

问题&#xff1a; 在DRF框架的models.py中有一个字段&#xff1a; create_time models.DateTimeField(auto_now_addTrue) 问题是在向数据库中插入数据时&#xff0c;此字段会带有6位的微秒&#xff0c;对精度要求没那么高&#xff08;看着很不爽&#xff09;&#xff0c;需…

每日一题——多数元素

多数元素 题目链接 方法一&#xff1a;暴力解法 直接利用两层循环&#xff0c;外层循环用来枚举数组的每一个元素&#xff0c;内层循环用来计算每个元素出现的次数&#xff0c;这样就可以求出多数元素了。 显然&#xff0c;这个方法的时间复杂度为O(N^2)&#xff0c;效率太低…

C#is、as关键字及获取当前活动窗体的实例

这篇日志记录一下C#中is关键字及as关键字的用法。 Is&#xff1a;判断检查对象是否与给定类型兼容 As&#xff1a;将对象转换为指定类型&#xff08;强转&#xff09;&#xff0c;就跟&#xff08;int&#xff09;这样的用法是一样的。 获取当前窗体的活动子窗体。 有一个属…