css 实现3D效果

这篇具有很好参考价值的文章主要介绍了css 实现3D效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需要用到的属性

主要用到两个属性:transform-style属性和animation属性
transform-style是用来开启3D效果的属性,而animation是用来让元素实现3D的动画效果
我们以制作一个3D的立方体为例。
transform详细属性,animation详细属性

二、立方体实现

先把html部分写出来,我们需要把立方体的6个面都先表示出来。

<!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>Document</title>
    <link rel="stylesheet" href="./css/test.css">
</head>
<body >
    <div class="continer">
    <main>
    <!-- 前面-->
    <div class="front"></div>
    <!-- 后面-->
    <div class="back">back</div>
    <!-- 左面-->
    <div class="left">left</div>
    <!-- 右面-->
    <div class="right">right</div>
    <!-- 上面-->
    <div class="top">top</div>
    <!-- 下面-->
    <div class="bottom">bottom</div>
    </main>
</div>
</body>
</html>

上面分别把6个面先定义了出来,接下来是css部分。
代码如下:
第一步:定义容器的大小和位置

.continer {
    width: 300px;
    height: 300px;
    perspective: 800px;
    margin: 200px;
    margin-left: 400px;
}
/*定义容器下的每个面的大小*/
.continer div{
    font-size: 50px;
    text-align: center;
    width: 100%;
    height: 100%;
    position: absolute;
}
/*
transform-style: preserve-3d;开启3D效果
main包括了整个立方体的所有div,所以实现动画效果的时候是整体在动
*/
main {
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    /*第一个参数是关键帧的名字,第二个参数是动画的时长,
    第三个参数是动画从头到尾的速度是相同的。
	第四个参数是播放的次数,infinite是无限次	
	*/
    animation: rotate 1s linear infinite;
}

关键帧我们在后面定义,可以先把animation属性写出来。

其中perspective属性对于3D变形来说至关重要。该属性会设置查看者的位置,并将可视内容映射到一个视锥上,继而投到一个2D视平面上。如果不指定透视,则Z轴空间中的所有点将平铺到同一个2D视平面中,并且变换结果中将不存在景深概念。
上面的描述可能让人难以理解一些,其实对于perspective属性,我们可以简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻;反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。
第二步:画前面的正方形

.front {
    background: rgba(100, 0, 100, 0.6);
    transform: translateZ(150px);
}

效果:
css 实现3D效果

translateZ(150px)的意思就是将这个div沿着z轴向前移动150px;
在css中,3d属性设置的z轴指的是屏幕到人的眼睛的方向为正方向的轴
每一面的div标签中都写了文字,方便等下理解图形的的旋转和移动。现在还是揉成一坨的,因为其它的div还没给样式。

第三步:画后面的正方形

 .back {
    background: rgba(0, 100, 100, 0.5);
    transform: translateZ(-150px);
}

css 实现3D效果

translateZ(-150px)就是将div元素向后移动150px,此时可以看到前面和后面的层次关系了,明显紫色在深紫色的前面。

第四步:画出左面

.left {
    background: rgba(100, 1000, 100, 0.5);
    transform: rotateY(90deg) translateZ(-150px);
}

css 实现3D效果
rotateY(90deg)就是把div沿着y轴旋转90°,然后再用translateZ(-150px)把它向左移动,旋转之后坐标轴也跟着旋转了,所以此时的Z轴是旋转之后的div的前面。
第五步:画出右面

.right {
    background: rgba(1000, 100, 100, 0.5);
    transform: rotateY(90deg) translateZ(150px);
}

css 实现3D效果
rotateY(90deg)先将div沿着y轴旋转90°,再用translateZ(150px)将div向右移动150px。
第六步:画出上面

.top {
    background: rgba(1000, 0, 0, 0.5);
    transform: rotateX(90deg) translateZ(150px);
}

css 实现3D效果
rotateX(90deg)将div沿着x轴旋转90°,再用translateZ(150px)向上移动150px;
第七步:画出底面

.bottom {
    background: rgba(0, 0, 1000, 0.5);
    transform: rotateX(90deg) translateZ(-150px);
}

css 实现3D效果
rotateX(90deg)将div沿着x轴旋转90°,再用translateZ(150px)向下移动150px;
此时可以看到每个面的文字都到了对应的位置,每个面也都画了出来,清晰可见。
第八步:关键帧的定义
这一步就是让立方体实现3d动态效果的关键一步;
代码如下:

@keyframes rotate {
    from {
    	/*
		rotateX(0) rotateY(0)表示从坐标(0,0)开始
		*/
        transform: rotateX(0) rotateY(0);
    }
    to {
        /*
		rotateX(360deg) rotateY(360deg)表示立方体沿着x轴旋转360°后再沿着y轴旋转360°
		在第一步中定义了播放次数为无限次,所以
		*/
        transform: rotateX(360deg) rotateY(360deg);
    }
}

此时立方体就可以动起来了。

CSS完整代码:文章来源地址https://www.toymoban.com/news/detail-486619.html

.continer {
    width: 300px;
    height: 300px;
    perspective: 800px;
    margin: 200px;
    margin-left: 400px;
}
.continer div{
    font-size: 50px;
    text-align: center;
    width: 100%;
    height: 100%;
    position: absolute;
 
}
main {
    width: 100%;
    height: 100%;
    transform: translateZ(-150px);
    transform-style: preserve-3d;
    animation: rotate 1s linear infinite;
}
 
@keyframes rotate {
    from {
        transform: rotateX(0) rotateY(0);
    }
    to {
        transform: rotateX(360deg) rotateY(360deg);
    }
}

.front {
    background: rgba(100, 0, 100, 0.6);
    transform: translateZ(150px);
}
 .back {
    background: rgba(0, 100, 100, 0.5);
    transform: translateZ(-150px);
}

.left {
    background: rgba(100, 1000, 100, 0.5);
    transform: rotateY(90deg) translateZ(-150px);
}

.right {
    background: rgba(1000, 100, 100, 0.5);
    transform: rotateY(90deg) translateZ(150px);
}

.top {
    background: rgba(1000, 0, 0, 0.5);
    transform: rotateX(90deg) translateZ(150px);
}
 
.bottom {
    background: rgba(0, 0, 1000, 0.5);
    transform: rotateX(90deg) translateZ(-150px);
}
 

到了这里,关于css 实现3D效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS3实现的4种3D文字效果

    本文将介绍css3实现的4种3D文字效果。代码很简单,效果很震撼: 代码实现 html: css: 代码解释 1、3D文字效果运用原理就是像Photoshop一样,我们在文字的下方或上方复制了多个图层,并把每一个层向左上或右下方向移动一个1px距离,从而制作出3D效果。同时我们层数越多,其

    2024年02月11日
    浏览(72)
  • css画一条虚线,用到background-image:linear-gradient线性渐变的属性

    CSS实现虚线的方法_css 虚线_saltlike的博客-CSDN博客 渐变属性(background-image)全解析_background-image linear_大聪明码农徐的博客-CSDN博客 Background:linear-gradient()详解_background: linear-gradient_小白白中之白的博客-CSDN博客  

    2024年02月07日
    浏览(44)
  • CSS实现鼠标跟随 3D 旋转效果,让交互活起来

    一淘模板(56admin.com)给大家介绍一下如何使用CSS实现有意思的鼠标跟随 3D 旋转效果,让交互更加生动,希望对大家有所帮助! 今天,群友问了这样一个问题,如下所示的鼠标跟随交互效果,如何实现: 简单分析一下,这个交互效果主要有两个核心: 借助了 CSS 3D 的能力 元

    2024年02月10日
    浏览(88)
  • HTML5+CSS实现图片3D旋转效果,附音乐

    利用程序呈现图片,可以俘获一众女生的心,增加音乐可以实现图片变化的同时也带上了想要得到效果,如此一程序实乃众人之喜。 先看看程序呈现的效果,还是特别吸引人的。 先在网上爬取想要呈现的美女照片,存放在文件夹img-one,与程序路径一致。 图片像素需进行调整

    2024年02月13日
    浏览(48)
  • 用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

    部分数据来源: ChatGPT  引言         太阳和月亮对于我们来说是一种常见的对比,这篇文章将介绍一个使用HTML、CSS和JavaScript创建的网页场景,能够把太阳和月亮切换展示给用户。这个场景能够让用户使用鼠标和滚轮与场景互动,带来更多的趣味和体验。 这里展示了HT

    2024年02月07日
    浏览(71)
  • css3的过度效果transition支持哪些属性,Transition 所支持的css属性

    transition-property是用来指定当元素其中一个属性改变时执行transition效果: 所支持的属性类型如下: 名称 描述 属性 color:  通过红、绿、蓝和透明度组件变换(每个数值处理) 如: background-color, border-color, color, outline-color等css属性; length: 真实的数字 如: word-spacing, width, verti

    2024年01月17日
    浏览(48)
  • CSS:background 复合属性详解(用法 + 例子 + 效果)

    background-image:linear-gradient(角度(deg),颜色1,颜色2, …); 线性渐变(渐变方向,颜色1-颜色2-…) 在 背景颜色之上 横向repeat-x, 纵向repeat-y; 默认repeat,可设为不重复no-repeat background-repeat:round; 个体完整,微调大小 background-repeat:space; 调整空隙 background-size:宽度,高度; 单位可以是

    2024年02月13日
    浏览(38)
  • css 中可以让文字在垂直和水平方向上重叠的两个属性是什么?

    在CSS中,可以使用属性 position 和 transform 来实现文字在垂直和水平方向上重叠。 垂直方向上的重叠可以通过设置 position: absolute 和 top: 50% 来实现,然后使用 transform: translateY(-50%) 来使文字垂直居中。 水平方向上的重叠可以通过设置 text-align: center 来使文字水平居中。 以下是一

    2024年01月24日
    浏览(39)
  • 【CSS】3D卡片效果

    THE DARK RIDER CHRIS MASON ZAQ CASS FORCE MAGE

    2024年02月14日
    浏览(50)
  • CSS动画属性关键帧Keyframes详解:创建令人惊叹的动画效果

    CSS中的关键帧(Keyframes)是一种强大的工具,可用于创建各种动画效果,从简单的渐变到复杂的运动路径。通过定义关键帧的属性值和时间轴上的位置,我们可以实现令人惊叹的视觉效果。本文将详细介绍CSS动画属性关键帧Keyframes的使用方法,并提供相应的源代码示例。 关键

    2024年01月23日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包