前言
本文将持续更新CSS图形练习,同步上传 GitHub 。
1. 正方形(Square)
#square {
width: 100px;
height: 100px;
background: red;
}
2. 矩形(Rectangle)
#rectangle {
width: 200px;
height: 100px;
background: red;
}
3. 圆形(Circle)
#circle {
width: 100px;
height: 100px;
background: red;
border-radius: 50%;
}
4. 椭圆形(Oval)
#oval {
width: 200px;
height: 100px;
background: red;
border-radius: 100px / 50px;
}
5. 上三角形(Triangle Up)
#triangle-up {
width: 0px;
height: 0px;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
6. 下三角形(Triangle Down)
#triagnle-down {
width: 0px;
height: 0px;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid red;
}
7. 左三角形(Triangle Left)
#triangle-left {
width: 0px;
height: 0px;
border-right: 100px solid red;
border-top: 50px solid transparent;
border-bottom: 50px solid transparent;
}
8. 右三角形(Triangle Right)
#triangle-right {
width: 0px;
height: 0px;
border-left: 100px solid red;
border-top: 50px solid transparent;
border-bottom: 50px solid transparent;
}
9. 左上三角(Triangle Top Left)
#triangle-topleft {
width: 0px;
height: 0px;
border-top: 100px solid red;
border-right: 100px solid transparent;
}
10. 右上三角(Triangle Top Right)
#triangle-topright {
width: 0px;
height: 0px;
border-top: 100px solid red;
border-left: 100px solid transparent;
}
11. 左下三角(Triangle Bottom Left)
#triangle-bottomleft {
width: 0px;
height: 0px;
border-bottom: 100px solid red;
border-right: 100px solid transparent;
}
12. 右下三角(Triangle Bottom Right)
#triangle-bottomright {
width: 0px;
height: 0px;
border-bottom: 100px solid red;
border-left: 100px solid transparent;
}
13. 上半圆(Semicircle Top)
实现原理:把高度 height
设置为宽度 width
的一半,并且左上角和右上角的圆角半径与元素的高度一致,而右下角和左下角的圆角半径设置为 0
。
#semicircle-top {
width: 100px;
height: 50px;
background: red;
border-radius: 100px 100px 0 0;
/* 左上、右上、右下、左下 */
}
14. 下半圆(Semicircle Bottom)
#semicircle-bottom {
width: 100px;
height: 50px;
background: red;
border-radius: 0 0 100px 100px;
/* 左上、右上、右下、左下 */
}
15. 左半圆(Semicircle Left)
#semicircle-left {
width: 50px;
height: 100px;
background: red;
border-radius: 50px 0 0 50px;
/* 左上、右上、右下、左下 */
}
16. 右半圆(Semicircle Right)
#semicircle-right {
width: 50px;
height: 100px;
background: red;
border-radius: 0 50px 50px 0;
/* 左上、右上、右下、左下 */
}
17. 扇形(Sector)
#sector {
width: 100px;
height: 100px;
background: red;
border-radius: 100px 0 0 0;
}
18. 梯形(Trapezoid)
#trapezoid {
width: 100px;
height: 0;
border-bottom: 100px solid red;
border-left: 25px solid transparent;
border-right: 25px solid transparent;
}
19. 平行四边形(Parallelogram)
#parallelogram {
width: 150px;
height: 100px;
background: red;
transform: skew(20deg);
}
20. 菱形(Diamond Square)
#diamond {
width: 0;
height: 0;
border: 50px solid transparent;
border-bottom-color: red;
position: relative;
top: -50px;
}
#diamond::after {
width: 0;
height: 0;
border: 50px solid transparent;
border-top-color: red;
position: absolute;
top: 50px;
left: -50px;
content: '';
}
21. Diamond Shield
#diamond-shield {
width: 0;
height: 0;
border: 50px solid transparent;
border-bottom: 20px solid red;
position: relative;
top: -50px;
}
#diamond-shield::after {
position: absolute;
content: '';
left: -50px;
top: 20px;
width: 0;
height: 0;
border: 50px solid transparent;
border-top: 70px solid red;
}
22. Diamond Narrow
#diamond-narrow {
width: 0;
height: 0;
border: 50px solid transparent;
border-bottom: 70px solid red;
position: relative;
top: -50px;
}
#diamond-narrow::after {
position: absolute;
content: '';
top: 70px;
left: -50px;
width: 0;
height: 0;
border: 50px solid transparent;
border-top: 70px solid red;
}
23. Cut Diamond
#cut-diamond {
border-style: solid;
border-color: transparent transparent red transparent;
border-width: 0 25px 25px 25px;
width: 50px;
height: 0;
box-sizing: content-box;
position: relative;
margin: 20px 0 50px 0;
}
#cut-diamond::after {
position: absolute;
content: '';
top: 25px;
left: -25px;
width: 0;
height: 0;
border: 50px solid transparent;
border-top: 70px solid red;
}
24. 五边形(Pentagon)
#pentagon {
position: relative;
width: 54px;
box-sizing: content-box;
border-width: 50px 18px 0;
border-style: solid;
border-color: red transparent;
}
#pentagon::before {
position: absolute;
content: '';
top: -85px;
left: -18px;
width: 0;
height: 0;
border-width: 0 45px 35px;
border-style: solid;
border-color: transparent transparent red;
}
25. 六边形(Hexagon)
#hexagon {
width: 100px;
height: 55px;
background: red;
position: relative;
}
#hexagon::before {
position: absolute;
content: '';
top: -25px;
left: 0;
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 25px solid red;
}
#hexagon::after {
position: absolute;
content: '';
bottom: -25px;
left: 0;
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 25px solid red;
}
26. 八边形(Octagon)
在Jsbin里coding时发现,盒模型将 border
的宽度加上了,无法显示应有的图形效果。随后加上box-sizing: border-box;
,就可以正常显示了。
#octagon {
width: 100px;
height: 100px;
background: red;
position: relative;
}
#octagon::before {
position: absolute;
content: '';
top: 0;
left: 0;
width: 100px;
height: 0;
border-left: 29px solid white;
border-right: 29px solid white;
border-bottom: 29px solid red;
}
#octagon::after {
position: absolute;
content: '';
bottom: 0;
left: 0;
width: 100px;
height: 0;
border-left: 29px solid white;
border-right: 29px solid white;
border-top: 29px solid red;
}
27. 弯尾箭头(Curved Tail Arrow)
#curvedarrow {
position: relative;
width: 0;
height: 0;
border-top: 9px solid transparent;
border-right: 9px solid red;
}
#curvedarrow::after {
position: absolute;
content: '';
top: -12px;
left: -9px;
width: 12px;
height: 12px;
border: 0px solid transparent;
border-top: 3px solid red;
border-radius: 20px 0 0 0;
transform: rotate(45deg);
}
参考链接
- Chris Coyier, The Shapes of CSS
- CSS制作图形速查表