简介
在写页面中,不可避免的会用css去实现一些小的图标。其中三角形最常用,比如在实现类似气泡的弹框效果。普通的用div实现三角形已经有文章写过,有兴趣的可以自行查看。这里我主要记录下我在开发过程中遇到的问题,需要写一个类似气泡的小箭头,就是一个尾随的三角形,这里我觉得用伪元素特别适合这个场景,我就简单记录下实现的方法。
概念
先说伪元素和伪类的区别:
伪类是针对CSS,而伪元素是针对HTML,伪类选择器是CSS选择器的一种,而伪类是“假”的HTML标签伪类(选择器)本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息;伪元素本质上是创建了一个有内容的虚拟容器;在CSS3中,伪类和伪元素的语法得到了进一步的调整(一个冒号和两个冒号);在开发当中,可以同时使用多个伪类,而只能同时使用一个伪元素;
实现实心三角形
用伪元素实现一个实心的三角形,其实和之前的div+css实现的方式差不多,只是把css的代码写到了伪元素中,话不多说,直接上代码
1 | #demo{ |
实现实心三角形简写方式
1 |
|
实现空心三角形
这里的实现空心三角形思路是用两个三角形重叠,达到空心的视觉效果。通过前后两个伪元素实现,单个的三角形实现上以上实心三角方法一致,只是这两个三角形大小不一样,达到了空心有边框,上demo代码
1 | .water_top, .water_right, .water_bottom, .water_left{ |
小结
通过以上的对比。相信大家也能看出其中的原理。总结出了一个道理:三角形往哪个方向,那个方向无需设置border,而相反方向设置border颜色,相邻两边的border设为透明。这样就可实现各个方向的三角形。实心三角形利用CSS中的伪元素(:before)实现,再利用border的transparent属性即可达到效果。而空心三角形是在空心三角形的基础上再加上伪元素(:after)实现。伪元素(:before)实现的是一个实心的三角形,伪元素(:after)实现的是空心的三角形,进而把实心的三角形覆盖,利用绝对定位的top与left的差值绝对了三角形线的粗细而达到如图的效果。