css绘制3D炫动ikun

news2025/2/26 13:27:32

今天做一个3D版的ikun。

先准备图片一张

在这里插入图片描述

代码浅析

页面整体div.contrainer,舞台div.stage,控制盒子div.control,图片盒子div.imgWrap,js载入div.img列表。

<div class="contrainer">
  <div class="stage">
    <div class="control">
      <div class="imgWrap"></div>
    </div>
  </div>
</div>

先设置页面背景色以及div.contrainer固定高度,导入图片。

body {
  background: #000;
}
.contrainer {
  position: relative;
  height: 100vh;
}
.stage {
  position: relative;
  width: 100%;
  height: 100%;
  margin: 0 auto;
  perspective: 120px;
}
.stage .control {
  position: relative;
  width: 100%;
  height: 100%;
}
.stage .control .imgWrap {
  position: absolute;
  width: 100%;
  height: 100%;
  max-width: 400px;
  min-height: 400px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.stage .control .imgWrap .img {
  position: absolute;
  width: 100%;
  height: 100%;
  line-height: 6px;
  font-size: 12px;
  top: 0;
  left: 0;
  background: var(--ikun);
  background-position: -150px 0;
  background-repeat: no-repeat;
  background-size: auto;
  overflow: hidden;
  color: transparent;
  word-break: break-word;
}

我完成了第一步效果

在这里插入图片描述

接下来我们需要加一点效果,给图片div.img加一个滤镜效果filter

.stage .control .imgWrap .img{
  ...
  filter: grayscale(1) invert(1) brightness(0.5);
}

grayscale(黑白效果),值在0-1之间,0为原图,1为完全变灰(0%-100%)

invert(反转效果),值在0-1之间,0为原图,1为完全反转(0%-100%)

brightness(亮度效果),值不为负数,1为原图(百分比也可以,1=100%)
超过1,图会更明亮,0-1相当于遮罩效果
使用 filter: brightness(0.5); 就无须额外制作遮罩

接下来给div.img设置一个味蕾before,同时,也和div.img一样设置背景,并且使用背景混合模式

.stage .control .imgWrap .img::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  background: var(--ikun), red;
  background-blend-mode: lighten;
  margin-left: 10px;
  mix-blend-mode: darken;
  background-repeat: no-repeat;
  background-size: auto;
}

mix-blend-mode是CSS3新增的一个很有意思的属性,它描述了元素的内容应该与元素的直系父元素的内容和元素的背景如何混合。我们将 PS 中图层的概念替换为 HTML 中的元素。

这样我们就得到一下效果

在这里插入图片描述

接下来我们给div…stage,div.control,div.imgWrap,div.img这些盒子加上transform-style: preserve-3d;属性,preserve-3d将指示元素的子元素应位于 3D 空间中,该属性不能被子元素继承,属性的效果作用于子元素,不作用于自身,要结合transform使用,否则没效果。

继续,
我们给div.img加入文字或者符号…之类的,要用到background-clip: text;将文本绘制到背景区域,

效果如下
在这里插入图片描述

整体效果出来了,接下来我们需要用到动画让整体动起来,CSS3中添加的新属性animation是用来为元素实现动画效果的,但是animation无法单独担当起实现动画的效果。承载动画的另一个属性——@keyframes。

@keyframes rotate {
  0% {
    transform: rotateY(0deg);
  }
  50% {
    transform: rotateY(-360deg);
  }
  100% {
    transform: rotateY(-720deg);
  }
}
@keyframes filterChange {
  100% {
    filter: grayscale(1) invert(1) brightness(3);
  }
}

效果如下

在这里插入图片描述

这是一个div.img得到的效果,那么我们多加几个?我们使用js将div.img添加到div.imgWrap中,

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

      let div = document.createElement("div")
      div.className = 'img'
      div.innerText = '..........................................'
      document.getElementsByClassName('imgWrap')[0].appendChild(div)
  }

用js添加了div.img,我们还需要给每个div.img设置transform: rotateY() translateZ();rotateY是Y轴的旋转角度,translateZ是往Z轴移动,

stage .control .imgWrap .img:nth-child(1) {
  transform: rotateY(80deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear; 
}
.stage .control .imgWrap .img:nth-child(2) {
  transform: rotateY(125deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(3) {
  transform: rotateY(170deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(4) {
  transform: rotateY(215deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(5) {
  transform: rotateY(260deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(6) {
  transform: rotateY(305deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(7) {
  transform: rotateY(350deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}
.stage .control .imgWrap .img:nth-child(8) {
  transform: rotateY(395deg) translateZ(482.84px);
  animation: filterChange 0.5s 500ms infinite linear;
}

css写太麻烦了,我们可以用less这样写方便快捷

.loop(@n,@i:1) when(@i<=@n){
    .img:nth-child(@{i}){
        transform: rotateY(35 + (@i * 45deg)) translateZ(482.84px) ;
        animation: filterChange .5s 500ms infinite linear;
    }
    .loop(@n,(@i)+1)
}
.loop(8)

最后就得到了我们开头看到的效果

在这里插入图片描述

结尾

其实做这个我也看了很多知识,受益良多。

一起学习,一起努力,共同进步,

学无止境,学无止境,学无止境。

—— END ——

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

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

相关文章

vue项目引入svg图标(完整步骤)

1. 安装svg依赖 在vue中首先需要安装可以加载svg的依赖。 npm安装&#xff1a;npm install svg-sprite-loader --save-dev 2. 创建svg文件夹存放svg图标 创建icons文件夹&#xff0c;在icons文件夹下创建svg文件夹存放本地svg图标。 3. vue.config.js 中配置svg图片 vue.c…

vue中使用echarts实现动态数据绑定、获取后端接口数据

之前几篇echarts的文章是实现了静态的柱状图、折线图、饼状图、地图&#xff0c;在项目中我们肯定是需要获取后端接口&#xff0c;将后端返回的数据显示在图表上&#xff0c;所以这次就记录一下如何实现echarts的动态数据绑定。 简单来讲&#xff0c;就是从接口获取到的数据&a…

Vue生命周期总结(四个阶段,八个钩子函数)

生命周期就是组件或者实例&#xff0c;从创建到被销毁&#xff08;初始化化数据、编译模板、挂载DOM、渲染一更新一渲染、卸载&#xff09;的一系列过程&#xff0c;我们称这是Vue的生命周期 文章目录一、Vue的生命周期阶段二、生命周期钩子函数1. beforeCreate2. created3. be…

ES6+--》熟知JS中的async函数

目录 async函数 await 表达式 async使用形式 async读取文件 async发送AJAX请求 与生成器(Generator)相比 async函数 async函数的返回值为 promise 对象&#xff0c;promise对象的结果由async函数执行的返回值决定。async函数能使得异步操作变得更加方便&#xff0c;简而…

前端开发常用哪些工具软件?

前端开发必备工具&#xff0c;一篇文章一网打尽 文章目录 一、前端提高“生产力”工具 1.WebStorm 2. 远程开发 - VSCode 3. 接口测试 - Postman 4.API在线文档生成和测试 - SwaggerUI 5.抓包工具 - Wireshark 6.通用数据库管理 - DBeaver 7.MD编辑器 - Typora 8.虚拟…

【数字孪生】UE4虚幻引擎与前端Web页面的结合

目录介绍基础准备鼠标穿透设置备注介绍 UE初学者&#xff0c;非专业UE工程师&#xff0c;在项目中需要使用UE4结合前端页面完成三维场景与前端图表的联动效果&#xff0c;自学总结方法&#xff0c;使用的版本为UE4.26。 基础准备 1. 使用Vue、Echarts创建前端页面&#xff0…

异常:TypeError: ‘caller‘, ‘callee‘, and ‘arguments‘ properties may not be accessed on strict mode func

异常&#xff1a;TypeError: ‘caller‘, ‘callee‘, and ‘arguments‘ properties may not be accessed on strict mode func 问题解决 今天我在给博客添加樱花飘落的特效的时候 下载并引入了一个JS 之后打包执行的时候 发现樱花不会动了 检查报错发现是文章标题的报错…

事件监听 页面滚动(页面滚动到某一位置时显示/隐藏某元素,Vue环境)

目录 一、效果展示 二、实现步骤 三、涉及要点 1. Vue 语法 v-show 2. 获取窗口到元素顶端的距离 3. 监听事件 一、效果展示 最近在做项目时有一个网页渲染是这样的&#xff0c;某一个元素在开始不显示&#xff0c;只有当页面滑动到指定的位置时才显示该元素。效果如下&a…

基于物联网的智慧农业监测系统(前端界面有web端和微信小程序端)

摘要 农业是国民经济的基础&#xff0c;在国家经济发展中有着不可替代的重要作用。随着物联网技术的快速发展&#xff0c;智慧农业已成为了现代农业发展的新方向。基于此&#xff0c;本文设计并实现了一套基于物联网的智慧农业监测系统&#xff0c;系统采用ESP32作为主控板&am…

Vue组合式API

目录 一. 为什么要使用Composition API 1.1.一个Options API实例 1.2.Options API存在的问题 1.3.Composition API简介 二.Composition API 2.1.setup()入口 2.2.ref 响应式监听 2.3.reactive与toRefs 2.4.computed的用法 2.5.watch的用法 2.6.setup()参数 2.6.1.p…

前端如何将项目部署到服务器(Nginx)

文章目录一、准备环境二、安装Nginx1、 安装Nginx依赖2、下载Nginx3、解压下载好的Nginx 压缩包4、编译安装Nginx5、启动Nginx服务三、操作步骤1、使用Xshell连接服务器2、上传静态资源文件3、 配置Nginx4、 重启Nginx服务我们在会开发项目的同时&#xff0c;也应该了解一下前端…

基于Java Web的随意购商城系统(开源项目)

提示&#xff1a;此项目仅作为本博主的学习笔记记录&#xff0c;不作为商品售卖&#xff0c;资源往下翻看源码获取 文章目录前言Web端功能设计首页热销商品新到商品商品分类商品详情购物车添加地址提交订单部分代码展示可能会出现的错误如果拿到项目后发现图片不显示源码获取前…

在Vue中使用高德地图

在Vue中使用高德地图一、如何在Vue中引入基础高德地图1、步骤一&#xff1a;注册并登录高德地图开放平台&#xff0c;申请密钥2、步骤二&#xff1a;安装高德地图加载器3、封装一个自定义地图组件&#xff0c;并初始化地图二、根据关键词搜索&#xff0c;并定位到搜索的位置三、…

谷歌浏览器自带翻译网页插件没用了怎么办?这里有解决办法。

前言 正当我打算来一波科学上网的时候&#xff0c;当我用谷歌浏览器打开文档网站时候&#xff0c;发现发现google浏览器网页翻译插件没用了。经过了我一段时间的搜寻&#xff0c;终于有了解决方案。 原因 从 10 月 20 日起&#xff0c;谷歌在陆续移除国内服务器上的谷歌翻译…

Vue学习之从入门到神经(两万字收藏篇)

写在前面 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家:人工智能学习网站 Vue写在前面前言Vue.js三种安装方式一、 Vue导入二、Vue基本语法1.钩子函数2. 插值表达式3.显示数据(v-text和v-html)4.数据双向…

深入理解Vue响应式原理

前言 Vue响应式原理是Vue最独特的特性之一&#xff0c;当数据模型进行修改时&#xff0c;视图就会进行更新&#xff0c;这使得状态管理简单直接&#xff0c;但是其底层的细节还是需要我们深入学习理解&#xff0c;这样遇到一些问题我们才能快速进行定位&#xff0c;并解决&…

【UML】-- 顺序图练习题含答案(自动售货机、学生选课、提款机、购买地铁票、洗衣机工作)

注意&#xff1a;对象表示法对象名需要下划线&#xff0c;此文章没有标注 一、练习一 根据下面的叙述&#xff0c;绘制一幅关于顾客从自动售货机中购买物品的顺序图。顾客&#xff08;User&#xff09;先向自动售货机的前端&#xff08;Front&#xff09;投币&#xff1b;售货…

CSDN文章点赞、收藏、评论后到底发生了什么?简要分析HTTP交互机制

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他拥有的&#xff0c;而不是他会的。所以可以不学无数&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关…

node.js是干什么的

一、Node.js简介 Node.js是一个开源和跨平台的JavaScript运行时环境。它几乎是任何类型项目的流行工具&#xff01; Node.js在浏览器之外运行V8 JavaScript引擎&#xff08;Google Chrome的内核&#xff09;。这使得Node.js的性能非常好。 Node.js应用程序在单个程序中运行&…

使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程)

最近也是临近期末了&#xff0c;各种的期末大作业&#xff0c;后台管理也是很多地方需要用到的&#xff0c;为了方便大家能快速上手&#xff0c;快速搭建一个简单的后台管理&#xff0c;我花了两天时间整理了一下 我会从0开始介绍&#xff0c;从数据库的设计到前端页面的引入最…