一篇文章带你用 CSS 绘制一个3D掘金 logo

网站建设4年前发布
46 0 0

尝试一下用 CSS 绘制简单的 3d 图形,比如一个掘金 logo?,20230306131258d68bce5838afd2ecb19778a135a179077d4b46705,相比 2d 绘制,3d 有哪些需要注意的小细节呢?一起看看吧,除去挖空部分,整个外形其实是一个金字塔形,或者叫四棱锥形(四角锥)。,20230306131449c930c6972365691c899385ec434df36d259799827,一共有5个面,所以我们可以准备5个元素。,其中,bottom表示底部的正方形,其余4个表示侧面4个三角形。,首先先从正方体开始。,注意,需要呈现 3d 视觉,需要添加transform-style: preserve-3d,先绘制一个侧面。,效果如下:,2023030613125885e21cc19d43c179470704368e4ca39abb2124733,用同样的方式,绘制出4个侧面。,效果如下:,20230306131259d2c6d9162dcf061603a9086ff75953c9dd45ce923,然后,将4个侧面裁剪成三角形,用clip-path就行了。,效果如下:,20230306131449b8d182f484c2c31077951318b5358ff08d598e352,最后,将4个侧面沿着底部旋转一个角度,使其合并在一起,由于大小完全一样,底部又是正方形,倾斜角度自然也相同,这里就不通过数学计算了,直接用一个 CSS 变量去实时比对。,效果如下:,2023030613130006d89be19465293034f9720800df340fd4d103305,这样就得到了一个金字塔形/四棱锥形。,2023030613130089930cb7824b7103b3d7703d3ec3c463bdb1d6977,前面得到了一个完整的四棱锥,现在需要先将侧面镂空。,这里有两种方式,第一,可以用透明和不透明的渐变填充,这样透明的部分就是镂空的了;还有一种方式,用​​mask​​遮罩,也能轻易的实现。,效果如下:,20230306131301e10c8e8448c47f9c5e281843bb368acc3bb504863,但是现在还是看着像纸片一样,需要将截断的几个面都封起来,我们再加一个标签,用两个伪元素将顶部覆盖。,当然,这里需要多多调整一下细节,确保横截面的大小和位置刚好吻合。,2023030613130291d1526755ed608a993897fb544f0cea0729a5933,同样还有底部的截面。,效果如下:,2023030613130361a8512800103dfecb78354325dc5768ca6d88645,首先是底部的投影,这是通过​​filter: blur​​实现的,可以让整个场景更具空间感。,202303061313031771321336dfbe8649b485d3fe65c1dd2c39bc993,然后是截面的高光处理,这里是通过内阴影实现的,让整体光影看着更加自然,就像上方有光线一样,2023030613145049b9ccb98506319e67c359f60cdfa7fdcce13a996,最后是鼠标跟随效果,这里是通过 CSS 变量实现的,通过 JS 获取鼠标的相对位置,然后通过 CSS 变量 传递,实时改变 transform 的旋转角度。,JS 监听mousemove就可以了。,这样就得到了文章开头所示效果:,2023030613130483fc918671eed4245c68321ce23e0b92fbf87e531,总的来说,绘制这样一个的 3d 图形还是比较轻松的,下面总结一下,当然,像这种比较规则的图形还能简单通过CSS应付一下,如果有一些不规则的,或者有曲面,那就不太好实现了,而且高光也无法真正模拟出来,像这种情况还是建议通过three.js这样专业的图形处理库才行。

© 版权声明

相关文章