龙空技术网

CSS-二七纪念塔

web端开发 172

前言:

当前大家对“css窗户”可能比较注意,大家都需要分析一些“css窗户”的相关内容。那么小编也在网络上汇集了一些有关“css窗户””的相关知识,希望我们能喜欢,朋友们快快来学习一下吧!

这次带来的效果是大郑州的标志性建筑之一二七纪念塔。其实CSS不适合做这样复杂的建筑模型,性能上会差很多。

老规矩,先看效果:

需求拆分:

这个效果主要可以分为这几个部分

1、塔身部分

2、塔顶部分

3、五角星

4、塔基部分

首先分析塔身部分,对称的双结构11层塔。

只要完成其中一层,就可以复制出塔身部分。

每一层都是六面体塔身,所以塔身部分,最小重复粒子是一个墙面。

为了尽量减少dom数量,我打算使用一个div画出一组墙。

1)墙体部分,一个带背景色的div

2)窗户部分使用before:

1.使用border完成窗户边框

2.顶部和底部大约20%的区域使用线性渐变画出来【浅-深-浅】的渐变颜色

3.中间部分50%区域使用线性渐变画出【浅-深-浅-深-浅】的渐变颜色

4.三个渐变直接的空隙,我们给元素加上深色背景,填充类似边框效果

主要使用到linear-gradient属性

.wall {  position: absolute;  width: 100px;  height: 80px;  background: #bdafa2;  display: flex;  justify-content: center;  align-items: center;  box-shadow: inset 0 0 15px rgba(0, 0, 0, .2), inset 0 0 3px rgba(0, 0, 0, .2);  transform-style: preserve-3d;}.wall::before {  position: absolute;  top: 30px;  width: 30px;  height: 40px;  border: solid 2px #715e5a;  content: '';  background-color: #715e5a;  background-image: linear-gradient(to right, #cdc8cf 14px, 0, #715e5a 16px 0, #cdc8cf 0),     linear-gradient(to right, #cdc8cf 14px, 0, #715e5a 16px 0, #cdc8cf 0),     linear-gradient(to right, #cdc8cf 7px, 0, #715e5a 9px, 0, #cdc8cf 21px, 0, #715e5a 23px, 0, #cdc8cf 0);  background-size: 100% 20%, 100% 20%, 100% 50%;  background-repeat: no-repeat;  background-position: 0 0, 0 100%, 0 50%;}

顶部部分的梯形瓦,我们使用after:

1.请回忆我们初中学习的三角函数,我们得到斜边40px,60deg倾角的瓦,需要比墙宽40像素。

2.使用clip-path多边形,将after裁剪成梯形

.wall::after {  position: absolute;  top: 0;  left: -20px;  width: 140px;  height: 40px;  content: '';  background: #053f17;  transform-origin: center 0;  transform: rotateX(60deg);  clip-path: polygon(20px 0, 120px 0, 100% 100%, 0 100%);  box-shadow: inset 0px -1px 30px rgba(255, 255, 255, .4);}

这样,一个div就画出一面。

然后,我们将墙面复制六份,分别旋转60度形成一个六边形。

.wall-1 {  transform: rotateY(0) translateZ(86px);}.wall-2 {  transform: rotateY(60deg) translateZ(86px);}.wall-3 {  transform: rotateY(120deg) translateZ(86px);}.wall-4 {  transform: rotateY(180deg) translateZ(86px);}.wall-5 {  transform: rotateY(240deg) translateZ(86px);}.wall-6 {  transform: rotateY(300deg) translateZ(86px);}

一层塔身就完成了。

我们将塔身复制11份,设置一下top值。

最后,将整个外层div复制一份,两个div略微做位移和旋转。得到了双子塔结构。

这中间有个可以优化的地方,就是是交界处的那一面墙,其实可以去掉的。减少一些dom。

第二步,我们开始画钟楼。

CSS画钟表,网络上有很多方式。我们可以做成很漂亮的还可以真实交互的钟表。

不过在这里,我们只要显示出钟表的样式就可以了。而且还是远观,不用特别精确。

这里。大家可以发现,钟楼的结构和墙体其实是一样的,我们直接复用墙体的样式。然后稍微修改

修改顶部的梯形after,直接变成一个三角形将楼顶盖住。修改窗户的样式,我们还是要使用一个before来画出一个钟表的样式。(不要觉得不可能,见证奇迹的时候)使用圆锥渐变色,画出12组深浅相间的颜色,作为12个数字使用圆形渐变色,覆盖表盘,做出中心点和清除上边的12道线再使用圆锥渐变,只画出两条线作为时针和分针

第三步,画一个闪闪的红星。

基本原理是使用css画三个等边三角形。然后合并起来。这里就不再写代码了,网上很多。

最后一步,画出地基部分。

这个就想对简单多了。跟画墙体没有啥区别,就是六边形变成四边形。

after的背景继续使用线性渐变,画出栏杆部分。

.handrail::after {  position: absolute;  top: -30px;  width: 100%;  height: 20px;  content: '';  background-image: linear-gradient(90deg, #cdc8cf 4px, 0, #0000 12px 0);  background-size: 12px;}

然后再复制三层,分别使用sacle3D缩小一下X轴和Z轴。

增加上一个旋转动画,效果完成!!!

由于手机渲染效果较差,删除了一些效果。

代码仓库地址:

演示地址:

标签: #css窗户