如何使用纯CSS3实现一个3D商品标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用纯CSS3实现一个3D商品标签相关的知识,希望对你有一定的参考价值。

[html] view plain copy
<div class="fancy">
<h2>
<span class="ribbon-center">50% OFF!</span>
</h2>
<p>
<img src="/uploads/160501/glass.jpg">
Check out these killer deals from Oakley!
Get an additional 50% off sale items for a limited time.
</p>
</div>
接下来给卡片和商品描述添加样式,来限定高宽和间距:
[css] view plain copy
.fancy
width: 340px;
margin: 20px auto 20px auto;
background: #E7E7E7;
padding: 15px;

.fancy p
padding-top: 10px;
margin: 5px 0;
line-height: 1.5;

.fancy img
width: 340px

blob.png
现在页面看起来像上面这样,接下来就是要给标签(h2元素)添加样式,一个是背景色,一个是左边的3D折纸效果。
折边效果其实就是给h2的左下角拼接一个三角形的元素,我们使用伪元素来实现,代码如下:
[css] view plain copy
.fancy h2
font-style: italyc;
line-height: 1;
padding: 5px 0;
color: #FFF;
margin: 0;
width: 205px;
left: -35px;// 相对卡片向左偏移35px
background-color: #e54439;
position: relative;
z-index: 6;

.fancy h2:after // 定义一个斜三角形
content: "";
width: 0;
height: 0;
position: absolute;
font-size: 0;
line-height: 0;
z-index: 5;
border-top: 0 solid transparent;
border-bottom: 15px solid transparent;
bottom: -15px;

.fancy h2:after
border-right: 20px solid rgb(230, 107, 97);
left: 0;

.fancy h2 .ribbon-center
display: block;
padding: 10px 0;
background-color: #e54439;
参考技术A 像这样的基础物体 直接在漫反射上加贴图就可以 不用展UV 那样就复杂了 想给不同的面加不同的材质 把它转换成POLY 然后 给每个面赋予一个IP值 再加多维子材质 就可以

使用纯CSS3实现一个3D旋转的书本

有一些前沿的电商站点已经開始使用3D模型来展示商品并支持在线定制,而当中图书的展示是最为简单的一种,

无需复杂的建模过程,使用图片和CSS3的一些变换就可以实现更好的展示效果,简洁而有用。


书本的3D模型是全部商品中最为简单的。由于其本质上就是一个立方体(cube)。仅仅是带有封面/封底和左側封条。

所以要构造一个3D书本展示,问题就被分解为构造一个立方体+旋转+图片背景。

1. 构造一个立方体

要创建一个立方体。首先我们须要创建一个虚拟的三维视觉空间。这能够通过设置包容器元素的perspective属性获得。


.stage {
    width: 200px;
    height: 260px;
    perspective: 1000px;
    perspective-origin: center center;// 缺省值,可忽略
}
上述代码把元素放在距离观察点1000px的地方(Z轴向),而且在X/Y轴向上居中。

<div class="stage">
    <div class="cube">
        <figure class="back"></figure>
        <figure class="top"></figure>
        <figure class="bottom"></figure>
        <figure class="left"></figure>
        <figure class="right"></figure>
        <figure class="front"></figure>
  </div>
</div>
接着。我们在包容器元素里面加入一个立方体元素,6个边(上下左右和前后),之所以使用figure。是由于须要支持贴图。

我们须要依据书本的厚度和长宽来确定立方体各个面的坐标位置。在本例中所用书本模型(一本MySQL书)的绝对厚度为18.2px。高度260px。宽度197.6px。

那么依据简单的几何知识,前后面距离立方体中心的距离为18.2/2=9.1px,当中“后”元素须要再翻转一下(即“背”过去)。

.front {
    transform: translateZ(9.1px);
}
.back {
    transform: rotateY(180deg) translateZ(9.1px);
}
用相似的计算方法。我们能够把其它4条边放置(平移+旋转变换)到各自的位置。从而拼装成一个虚拟的立方体。

.front {
    transform: translateZ(9.1px);
}
.back {
    transform: rotateY(180deg) translateZ(9.1px);
}
.top {
    transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);
    width: 18.2px;
    height: 197.6px;
}
.bottom {
    transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
}
.left {
    transform: rotateY(-90deg) translateZ(9.1px);
    width: 18.2px;
}
.right {
    transform: rotateY(90deg) translateZ(188.5px);
    width: 18.2px;
}
2. 加入封面
接着我们给前后以及左側面元素加入背景图(能够使用一张图,然后从不同的位置截取),给其它3个面加入背景颜色。并给“底”面加入阴影效果:

.front {
? ? transform: translateZ(9.1px);
? ? background: url("//wow.techbrood.com/uploads/160301/mysql.png") top right;
? ? background-size: auto 100%;
}
.back {
? ? transform: rotateY(180deg) translateZ(9.1px);
? ? background: url("//wow.techbrood.com/uploads/160301/mysql.png") top left;
? ? background-size: auto 100%;
}
.top {
? ? transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);
? ? background: #fafafa;
? ? width: 18.2px;
? ? height: 197.6px;
}
.bottom {
? ? transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);
? ? background: #ccc;
? ? width: 18.2px;
? ? height: 197.6px;
? ? -webkit-filter: drop-shadow(0 0 26px rgba(0, 0, 0, 0.75));
}
.left {
? ? transform: rotateY(-90deg) translateZ(9.1px);
? ? background: url("//wow.techbrood.com/uploads/160301/mysql.png") top center;
? ? background-size: auto 100%;
? ? width: 18.2px;
}
.right {
? ? transform: rotateY(90deg) translateZ(188.5px);
? ? background: #ddd;
? ? background-size: auto 100%;
? ? width: 18.2px;
}
这样我们就实现了一个逼真的3D书本视觉模型。

3. 加入旋转动画

这个比較简单,使用rotateY方法就能够。

@-webkit-keyframes rotate {
    0% {
        transform: rotateY(0) translateX(-18.2px);
    }
    100% {
        transform: rotateY(360deg) translateX(-18.2px);
    }
}
终于的效果图例如以下:



你能够在踏得网上自己试试看?(http://wow.techbrood.com/fiddle/17587)。


by iefreer

以上是关于如何使用纯CSS3实现一个3D商品标签的主要内容,如果未能解决你的问题,请参考以下文章

纯css实现3d立方体旋转相册

纯CSS3实现风浪中前行的3D海盗船

如何使用纯CSS3创建一个简单的五角星图形

使用纯CSS代码实现3D旋转效果

让交互更加生动!有意思的鼠标跟随 3D 旋转动效

如何制作css3的3d动画——以骰子旋转为例,详解css3动画属性