如何利用CSS绘制一些简略却又炫酷的3D成果呢?
首先上图
这是一张单纯用CSS实现的3D贺卡,上面一起来看一下事如何实现的:
1.html代码
<body>
<div class="card"> Niu</div>
</body>
嗯~ o( ̄▽ ̄)o,就这???
2.CSS代码
a.革除默认款式,以及设置body全屏背景色彩
* { padding: 0; margin: 0; } body { display: flex; justify-content: center; align-items: center; background-color: #2c3e50; height: 100vh; height: 100vw; }
niu为啥在这个奇怪的地位呢?好吧,这个不是要害...
b.card标签设置根本款式
.card { width: 150px; height: 200px; background-color: #ecf0f1; display: flex; justify-content: center; align-items: center; color: #000; font-size: 20px; position: relative; }
为啥要设置position: relative呢,好问题,待会再说!
c.伪元素上场了
.card::before, .card::after { position: absolute; background-image: linear-gradient(to right, #e74c3c, #f39c12); width: 50%; height: 100%; display: flex; align-items: center; top: 0; box-sizing: border-box; } .card::before { content: '生日'; left: 0; justify-content: flex-end; padding-right: 10px; } .card::after { content: '高兴'; right: 0; justify-content: flex-start; padding-left: 10px; }
为啥要用为元素啊?因为香啊!伪元素就能够当作一个div节点来对待,而且还不必再写两个div元素,你说香不香...留神,咱们为伪元素增加了position: absolute属性,因而父元素要用绝对定位。~~~~
4.关键点来了
就这尽管还能看,单总感觉差了点意思,咱再来优化一下
.card::before { content: '生日'; left: 0; justify-content: flex-end; padding-right: 10px; // 关键点在这里 transform-origin: left; transform: rotateY(-10deg); } .card::after { content: '高兴'; right: 0; justify-content: flex-start; padding-left: 10px; // 关键点在这里 transform: rotateY(10deg); transform-origin: right; }
请留神这里为每一个伪类增加了一个transform属性和transform-origin属性。前者使其旋转,而后者则是指明旋转的参考线。这样咱们就能通过调整旋转的角度,实现两页的开展角度。
效果图如下:
5.最初一步3D透视
做了这么对,仍旧是立体展现,3D呢,这就来了,仅需两行代码
.card { width: 150px; height: 200px; background-color: #ecf0f1; display: flex; justify-content: center; align-items: center; color: #000; font-size: 20px; position: relative; /* 3D展现 */ transform-style: preserve-3d; transform: perspective(900px) rotateX(20deg) rotateY(-20deg); }
为了不便查看3D成果,我给card元素增加了一个3D透视,并且旋转肯定角度,这样看起来就自带美感了。
好了,再见!