上下左右4条边,最关键的一点:每两条边的相交处是斜线的相交的。
如果不渲染成斜线,那么写浏览器内核解析css的程序员要纠结了:上边该压着左边线还是右边线,谁压谁都不合理啊,最简单的是弄成斜线等分,还不必去写判断谁该压着谁的程序代码。
于是,就给用边框创造梯形、三角形留下了空间,其他三条边颜色设置为透明或none,剩下的就是梯形或三角了,至于直角梯形,第6个div是,观察第4个div的 none 起了什么作用,再看div6,相信你就明白了。上图的代码:
<div id="div1">1</div><div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
<div id="div6">6</div>
<style>
div{
float: leftmargin: 10px
border-top: 30px red solid
border-bottom: 30px blue solid
border-left: 30px yellow solid
border-right: 30px green solid
}
#div1{width: 0height: 0}
#div2{width: 30pxheight: 0}
#div3{width: 30pxheight: 30px}
#div4{
width: 30px
border-top: none
}
#div5{
border-top: transparent 30px solid
border-bottom: 30px blue solid
border-left: transparent 30px solid
border-right: transparent 30px solid
}
#div6{
width: 50px height: 0
border-top: none
border-bottom: 40px blue solid
border-left: transparent 30px solid
border-right: none
}
</style>
.div{height: 80px
width: 250px
background-color: #FFC800
margin: 50px
border-radius: 15px
transform: perspective(20px) rotateX(-1deg) rotateY(-2deg) translateZ(0)
}
border-radius:12px
圆角 为零则为直角
梯形 [元素变形]
transform:
perspective [透视距离]
rotateX [横向.x轴旋转]
rotateY [竖向.Y轴旋转]
translateZ [Z轴移动,可以理解为放大和缩小]
了解这些基本的变形用法,就可以实现 【梯形】,
但复杂一些就没办法了,要用到SVG或Canvas,
当div宽度为0,高度为0的时候,只设置border的大小和四边不同颜色可看到下图,只保留一边的颜色,另外三边的颜色设置为transparent可得到一个方向的三角形。因此,可延伸出设置一边的border的颜色,相邻两边的border设置为transparent可得到一个方向的三角形。
border的大小的值为三角形底边上的高,三角形的底为相邻两边的border的高的和,如下图所示的红色锐角三角形
若想实现直角三角形的效果,如下图所示直角在左上的三角形,按原理可设置上border和左border的颜色,另外两条边的颜色为transparent,此样式可简写为只设置上border的颜色,另一条相邻的右border为transparent
你也许会遇到要画个奇怪三角形的时候,只要参考锐角三角形的方式,找到三角形底边和高,计算出三角形高和把相邻两条边的高相加作为底部,你可以画出各种各样的三角形,如果再加上角度旋转的css,你便啥三角形都能画!
此类三角形解决思路通常使用两个不同颜色的三角形做颜色叠加,比如做如上图所示的边框为1px的红色边框白色底三角形,就先画一个红色三角形,再画一个尺寸少2px的白色底三角形,然后设置两个三角形的position将三角形重叠,这里使用伪元素实现
1、向上正箭头
2、向下正箭头
3、向左正箭头
4、向右正箭头
5、向左上箭头
6、向右上箭头
7、向左下箭头
8、向右下箭头