首页 >web前端 >css教程 >用 CSS 绘制台湾国旗

用 CSS 绘制台湾国旗

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-24 11:24:11186浏览

@alvaromontoro 的作品给我留下了深刻的印象

Drawing Taiwan

使用 CSS 绘制多哥国旗

阿尔瓦罗·蒙托罗·11 月 19 日

#css #html #webdev
使用单个 div 和一堆神奇的 CSS 绘制多哥国旗。这对我来说确实令人兴奋。因此,我想做同样的事情。这是我的做法。

超文本标记语言

我添加一个

;具有一些 aria 属性。这将是渲染标志的单个 。
<div role="img" aria-label="Flag of Taiwan" class="flag taiwan"></div>

CSS

我使用与@alvaromontoro相同的方法创建了台湾国旗的基本背景:红色背景色,左上角有一个蓝色矩形。

.flag.taiwan {
  aspect-ratio: 3 / 2;
  height: 500px;
  position: relative;
  background: linear-gradient(rgb(19, 53, 129) 0 0) 0 0 / 50% 50% no-repeat,
    rgb(205, 44, 36);
}

Drawing Taiwan

太阳报

好了,最简单的部分完成了。现在是真正的交易的时候了。太阳照在旗帜上。
Drawing Taiwan
看起来相当复杂,有12根梁,中心有一个圆。如何使用伪元素 ::before 和 ::after 来绘制它们?感觉只有 Clip-path: path() 是唯一的方法,因为 path() 可以绘制我们想要的任何形状。然而,clip-path:path()有一个致命的缺点:它没有响应!这意味着如果我选择这种方法,旗帜只能有一种尺寸。

我开始在谷歌上搜索许多台湾国旗的 SVG 文件。我注意到他们只使用 2 个元素来代表太阳。

  1. 一颗白色十二光束星
  2. 带有蓝色边框的白色圆圈

Drawing Taiwan

Drawing Taiwan
当圆圈放在星星的中心时。看起来有 12 根光束围绕着圆圈,并具有所需的间隙。太聪明了!看起来设计师们已经想出了这种绘制太阳的巧妙方法。通过采用这种方法,我可以使用 ::before 作为圆圈,使用 ::after 作为星号。

12光束星

很容易找到台湾国旗的SVG文件。不幸的是,所有的星星都是由path()绘制的。这是因为 path() 在真实的 中时是响应式的。所以他们没有这个问题。它只是在剪辑路径中不响应。多边形是响应式的,但我没有找到将路径转换为多边形的方法。

这是一个非常困难的问题。我最终的解决方案真的是计算12束星所有点的所有位置吗?我利用这个出色的在线 SVG 路径编辑器 https://yqnn.github.io/svg-path-editor/ 来可视化路径中的所有点。

Drawing Taiwan
我问我亲爱的数学很好的兄弟,其余的点的位置是什么。他用mathematica解了12个线性方程并得到了所有分数! ?

Drawing Taiwan

然后,我返回到路径编辑器,绘制星星的轮廓作为路径,并对其进行缩放,使其处于 100*100 的范围内。

Drawing Taiwan

然后我将所有位置转换为百分比,因为它已经在 100*100 范围内。结果,我们可以在旗帜上显示星星

<div role="img" aria-label="Flag of Taiwan" class="flag taiwan"></div>

Drawing Taiwan

圈子

圈子相对来说比较容易。然而,我的第一次尝试是使用边框。失败是因为边框的宽度只能是px。我改为使用径向渐变。棘手的部分是径向渐变的百分比需要是元素的对角线,因此它还需要一些数学运算,但这并不难。

.flag.taiwan {
  aspect-ratio: 3 / 2;
  height: 500px;
  position: relative;
  background: linear-gradient(rgb(19, 53, 129) 0 0) 0 0 / 50% 50% no-repeat,
    rgb(205, 44, 36);
}

结果

完整的 CSS 是

&::after {
    content: '';
    position: absolute;
    top: 6.25%;
    left: 12.5%;
    width: 25%;
    height: calc(3 / 8 * 100%);
    background: white;
    clip-path: polygon(50% 0%,56.6987% 25%,75% 6.6987%,68.3013% 31.6987%,93.3013% 25%,75% 43.3013%,100% 50%,75% 56.6987%,93.3013% 75%,68.3013% 68.3013%,75% 93.3013%,56.6987% 75%,50% 100%,43.3013% 75%,25% 93.3013%,31.6987% 68.3013%,6.6983% 75%,25% 56.6987%,0% 50%,25% 43.3013%,6.6983% 25%,31.6987% 31.6987%,25% 6.6983%,43.3013% 25%);;
  }

您还可以在下面查看我在 codepen 上的工作

希望你喜欢!

以上是用 CSS 绘制台湾国旗的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn