序
你能用 css 给我画一个三角形吗?(本文主题)
统一设置 4 个边为不同的颜色:黄红蓝绿(上右下左)。
提前说好,方便下面的调试查看。
.div {
width: 0;
height: 0;
/* 上下边框宽度是 40px */
border-top: 40px solid yellow;
border-bottom: 40px solid blue;
/* 左右边框宽度是 60px */
border-left: 60px solid green;
border-right: 60px solid red;
}
ps:你还会在下文中看到我最喜欢的粉色背景,它表示一个矩形的容器,大小是 80 * 120 px。(80 = 边框的上下边框宽度的和,120 = 左右边框的宽度的和)
css三角形原理:
1、通过只设置一个边框为有色,其余边框为透明色。
2、三角形大小受非同向的两边框宽度影响。
比如:下边框三角形,高度 = 下边框的宽度,宽度 = 左右边框宽度的和。
无论自己测试多少次,不去总结其中的规律本质,永远记不住。--2021/08/29
三角形边框原理
三角形大小
某边的三角形大小受非同向的两边框宽度影响。
比如上边框,高度是上边框的宽度,宽度是左右边框宽度的和。
上边框三角形的宽度 = 左边框的宽度 + 右边框的宽度
上边框三角形的高度 = 上边框的宽度
三角形等边
左右边框的宽度相等
时,就是等边的三角形
,如下:
左右边框宽度不相等
时,就不是等边的三角形,如下:
左右边框某个宽度 0 时,就是直角三角形,如下:
三角形边框宽度调试
目的:通过设置边框宽度为0,查看三角形边框的大小的变化。
上边框的宽度为0
上边框的宽度为0时,左右边框顶部会被压缩裁剪。
左边框三角形高度 = 上下边框宽度和 = 下边框的宽度
右边框三角形高度 = 上下边框宽度和 = 下边框的宽度
上、下边框的宽度为0
上下边框的宽度为0时,左右边框会被压没了。
左边框三角形高度 = 上下边框宽度和 = 0
右边框三角形高度 = 上下边框宽度和 = 0
上、右边框的宽度为0
上、右边框的宽度为0时,变成了一个小矩形。
下边框三角形的宽度 = 左右边框宽度和 = 左边框的宽度
左边框三角形的高度 = 上下边框宽度和 = 下边框的宽度
三角形
三角形生成原理
只设置下边框的颜色为蓝色,其余边框的颜色设置为透明色,你就可以得到一个蓝色三角形。
蓝色三角形的宽度 = 左右边框的和
蓝色三角形的高度 = 下边框的宽度
三角形生成器
原文:手撸一个在线css三角形生成器/徐小夕 、 预览地址 -2021/08/29
// 三角形生成函数原理
const getBorderWidthAndColor = (direction:string, w:number, h:number, color:string) => {
const borderWidthAndColor:any = {
// 三角形角朝向
'上': {
borderWidth: `0 ${w/2}px ${h}px ${w/2}px`,
borderColor:`transparent transparent ${color} transparent`
},
'下': {
borderWidth: `${h}px ${w/2}px 0 ${w/2}px`,
borderColor:`${color} transparent transparent transparent`
},
'左': {
borderWidth: `${h/2}px ${w}px ${h/2}px 0`,
borderColor:`transparent ${color} transparent transparent`
},
'右': {
borderWidth: `${h/2}px 0 ${h/2}px ${w}px`,
borderColor:`transparent transparent transparent ${color}`
}
}
return borderWidthAndColor[direction]
}
// 旋转原理
transform: rotate(0deg);
多边形
平行四边形
平行四边形的实现需要使用两个三角形来实现
.divs-wrap {
position: relative;
width: 120px;
height: 80px;
background: #ff000020;
}
.div-black,
.div-blue {
width: 0px;
height: 0px;
border-bottom: 40px solid blue;
border-left: 60px solid transparent;
border-right: 60px solid transparent;
border-top: 40px solid transparent;
position: absolute;
}
.div-black {
border-bottom-color: black;
transform: rotate(180deg);
top: 40px;
left: 60px;
}
其他多边形
其余的多边形,可以用上面的原理绘制,但是没有必要。
因为,计算边框长度位置会让人抓狂吧~
svg 绘制可能会更香。
虽然,现在我 svg 也不怎么会。--2021/08/29