纯HTML+CSS画五角星
本帖最后由 马黑黑 于 2022-9-29 22:17 编辑国庆将至,学习画个五角星应该极有意义。
画五角星实际上用到中学的几何知识,这里,为了简化,不做数学方面的解释,仅提供画法。
方法一:我们先用最简单的方法绘制:clip-path: polygon(5对xy坐标值)。
CSS酱紫写:
.star5_1 {
width: 200px;
height: 200px;
background: red;
clip-path: polygon(100px 0, 160px 180px, 10px 60px, 190px 60px, 40px 180px);
}
HTML就简单了:
<div class="star5_1"></div>
然后,若想放大或缩小,都可以的:
<div class="star5_1" style="transform: scale(2);"></div>
这是放大一倍了。如果是缩小一半,scale(2) 改为 scale(0.5) 便可。
这个画法,因为是用剪裁方式,无法直接给它弄阴影,需要特殊处理,比如给它添加一个伪元素用来模拟阴影。
方法二:再来看看略微复杂一点的:用三个三角形拼接,可以在单标签里完成,使用两个伪元素。
这个法子的CSS代码多一些:
.star5_2 {
position: relative;
width: 0;
height: 0;
border-width: 0 100px 70px 100px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(35deg);
}
.star5_2::before {
position: absolute;
content: '';
width: 0;
height: 0;
left: -65px;
top: -45px;
border-width: 0 30px 80px 30px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(-35deg);
}
.star5_2::after {
position: absolute;
content: '';
width: 0;
height: 0;
left: -105px;
top: 3px;
border-width: 0 100px 70px 100px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(-70deg);
}
HTML部分,就一句:
<div class="star5_2"></div>
用这个法子画出的五角星,也可以用 transform:scale(数值) 来放大、缩小,也不会失真。还可以给它弄阴影,最好使用filter滤镜,如:filter: drop-shadow(0 0 12 #000)。
<style>
.star5_1 {
width: 200px;
height: 200px;
background: red;
clip-path: polygon(100px 0, 160px 180px, 10px 60px, 190px 60px, 40px 180px);
}
.star5_2 {
position: relative;
width: 0;
height: 0;
border-width: 0 100px 70px 100px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(35deg);
}
.star5_2::before {
position: absolute;
content: '';
width: 0;
height: 0;
left: -65px;
top: -45px;
border-width: 0 30px 80px 30px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(-35deg);
}
.star5_2::after {
position: absolute;
content: '';
width: 0;
height: 0;
left: -105px;
top: 3px;
border-width: 0 100px 70px 100px;
border-style: solid;
border-color: transparent transparent red transparent;
transform: rotate(-70deg);
}
</style>
<div class="star5_1"></div>
<p><br><br><br><br><br></p>
<div class="star5_2"></div>
上楼,第一个五角星用第一种方法,第二个五角星用第二种方法 五角星还有纯文本画法:
★
☆ 用边框宽度画三角形记得黑黑讲过的,一下子忘记是怎么回事了,去搜了半天才整明白。这个真比较复杂呢{:4_173:} 第一种方法的也可以变动态的吧?就像那颗心一样{:4_173:} 纯文本画法最简单{:4_189:} 本帖最后由 马黑黑 于 2022-9-30 06:09 编辑 <br /><br /><div id="s_out">
<p>测试js输出五角星符号: 直接输出和 \u2605 以及 \u2b50<br><br></p>
</div>
<script>
let txt = '★ \u2605 \u2b50';
s_out.innerHTML += txt;
</script>
页:
[1]