【我的前端】前端项目小练习:CSS创建3D圆柱旋转效果

简介: 学习css,我们必须模仿圆柱体,因为我们没有用于圆形物体的css原生盒子。

前端项目小练习:CSS创建3D圆柱旋转效果

学习css,我们必须模仿圆柱体,因为我们没有用于圆形物体的css原生盒子。

就我自己的想法而言,我将添加很多我们彼此倾斜的侧面板。这将模仿我们正在寻找的 3D 效果。


HTML标记

我选择在 Pug 中进行演示。模拟 HTML 很容易,因为它可以使用变量。

但是,归结为以下 HTML 输出。

<div class="holder">
    <div class="cylinder">
        <div class="face" style="--index: 0"></div>
        <div class="face" style="--index: 1"></div>
    </div>
</div>

我们添加了支架包装纸,这样我们就可以把它放在一个不会干扰到圆柱体的角度了。

我已将以下类添加到支架以实现倾斜外观。

.holder {
    transform-style: preserve-3d;
    transform: rotateX(-35deg);
}

样式化 CSS 3D 圆柱体

在开始之前,我们需要定义一些变量,因为这需要一些计算能力。

我想在这里使用 scss,因为它更容易与变量一起使用。

css 中添加以下变量。

$pi: 3.14159265358979;
$cylinder-width: 100vm;
$face-count: 50;
$face-deg: (360deg / $face-count);
$face-width: ($cylinder-width / $face-count);
$face-shift: ($cylinder-width / $pi / 2)

让我们来把每一个都解读清楚:

pi:匹配PI,我们得计算一个完美的圆位移大小;

cylinder-width:我们的圆柱宽度;

face-count:这里指的是我们渲染了多少张脸。这应该与刚刚添加的 div 数量匹配;

face-deg:每张脸要覆盖多大的度数;

face-width:每个面的宽度;

face-shift:我们需要将面向外移动以使其具有更多的 3D 效果。

现在我们可以移动到圆柱体的形状了。

.cylinder {
    position: relative;
    height: 50vw;
    width: $cylinder-width;
    transform-style: present-3d;
}

把以上代码添加到CSS文件中去可能会报错,不过没关系,不用管它。

这里没有什么特别的,但它基本上会包含我们圆柱体侧面的包装。

然后我们可以移动到每张脸,共享相同的模式。

.face {
    position: absolute;
    background-color: #da0060;
    opacity: 0.7;
    height: 100%;
    width: $face-width;
    top: 50%;
    left: 50%;
    transform-style: rotateY(calc(#{$face-dog} * var(--
index)))translateZ(
        clac(#{$face-shift}--6px)
    );
}

注意:0.7来自360度/50 (面)

translateZ是将每个项目向后多堆一点儿,使其看起来更加整洁、空间更大。

我还决定给一张脸上涂上不同的颜色,一面更好看的旋转。

.face {
    &:nth-child(1){
        background: purple;
    }
}

动画圆柱体

让我们添加一些动画来使圆柱体旋转。

@keyframes spin{
    to {
        transform: rotateY(-360deg);
    }
}
.cylinder {
    animation: spin 7s infinite linear;
}

这将使圆柱绕Y轴旋转360度。

您可以在此 CodePen 中看到结果。



相关文章
|
2月前
|
前端开发 JavaScript 定位技术
一、前端高德地图注册、项目中引入、渲染标记(Marker)and覆盖物(Circle)
文章介绍了如何在前端项目中注册并使用高德地图API,包括注册高德开放平台账号、引入高德地图到项目、以及如何在地图上渲染标记(Marker)和覆盖物(Circle)。
86 1
|
28天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
110 3
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
17天前
|
前端开发 Unix 测试技术
揭秘!前端大牛们如何高效管理项目,确保按时交付高质量作品!
【10月更文挑战第30天】前端开发项目涉及从需求分析到最终交付的多个环节。本文解答了如何制定合理项目计划、提高团队协作效率、确保代码质量和应对项目风险等问题,帮助你学习前端大牛们的项目管理技巧,确保按时交付高质量的作品。
30 2
|
1月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
169 1
|
2月前
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
37 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
1月前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
1月前
|
前端开发 UED 容器
前端技术分享:利用 CSS Grid 实现响应式布局
【10月更文挑战第1天】前端技术分享:利用 CSS Grid 实现响应式布局
54 2
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
329 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
29天前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益
|
1月前
|
JavaScript 前端开发 Docker
拿下奇怪的前端报错(二):nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
本文介绍了在多版本Node.js环境中使用nvm进行版本管理和遇到的问题,以及通过Docker化构建流程来解决兼容性问题的方法。文中详细描述了构建Docker镜像、启动临时容器复制构建产物的具体步骤,有效解决了不同项目对Node.js版本的不同需求。
下一篇
无影云桌面