效果展示如下:
那么为什么将border的三个边设置为transparent透明以后能生产一个三角形呢?接下来我们一步步解析。
我们来看一个平时使用的border例子:
这是我们平常使用border最普遍的情况——往往只给border一个较小的宽度(通常为1-2px);然而这样的日常用法就会容易让大家对border的形成方式产生误解,即认为元素的border是由四个矩形边框拼接而成。
然而事实并不是这样。实际上,元素的border是由三角形(准确说也是等边梯形)组合而成,为了说明这个问题,我们可以增大border的宽度,并为各border边设置不同的颜色:
效果图:
我们可以看到明显的四条边不是长方形,而是梯形,很像相框的四条边。
梯形的底是div对应的height或者width,梯形的高是对应border的宽度,梯形的顶边长度取决于div的内部空间。
我们进一步把div的高宽都改为0,梯形的顶边宽度变成了0,则可以得到对应的三角形了。
效果图:
此时元素由上下左右4个三角形“拼接”而成;那么,为了实现最终的效果,即保留最s上方的三角形,还应该怎么做?很简单,我们只需要把其它border边的颜色设置为白色或透明色:
效果图:
最终的简单三角形就绘制出来了。同理,如果想要得到其它边上的三角形,只需要将剩余的border边颜色设置为白色或透明色即可。
不过,被“隐藏”的上border仍然占据着空间,要想使得绘制出的三角形尺寸最小化,还需要将上border的宽度设置为0(其它情况同理):
1、当如下设置代码并赋给div相应的属性时:
#sider2{
width: 100px
height: 100px
border-top: 30px solid #000
border-right: 30px solid #ff0000
border-left: 30px solid #00ff00
border-bottom: 30px solid #0000ff
}
会得到如下的一张图:
2、接着当不设置border-bottom,即默认其为0时,可以得到下面的图片;
3、然后当设置其width为0时,如下图:
4、继续设置其height为0;
5、最后假若你把border-left,border-right设置为透明之后,就可以看到如下的三角形了。
6、这就是设置一个基本的三角形所需要的代码,效果也看起来很直观。
7、还有假如是想实现一个直角三角形,则最后需要两个border边的配合使用,浏览器会自动进行一些“拉伸变换”后就可以得到一个直角三角形。
#triangle-topleft {
width: 0
height: 0
border-top: 100px solid red
border-right: 100px solid transparent
}
均分原理
在矩形的直角,两条边的样式要均分
比如左上角 border-top 和 border-left 的样式要均分
如果border-left 无色透明, border-top有色, 就会出来一个45度的锐角