搜索

查看: 3063|回复: 11

[CSS/HTML] 使用css实现全兼容浏览器的三角形

[复制链接]
发表于 2023-5-4 16:52:03 | 显示全部楼层 |阅读模式
Editor 2023-5-4 16:52:03 3063 11 看全部
在当前流行的的网站上,我们经常会看到一些小三角形的下拉提示(微博顶部的下拉菜单),简单的方式可以使用一张图片代替,但是随着前端技术的发展,以及开发者对于前端性能的“吹毛求疵”,越来越多的前端开发者开始“返璞归真”,在能不使用图片的场景中减少图片使用,css图标相对于图片还有个优势是我们可以方便的定制图标的大小以及颜色。
css实现三角形图标已不是什么新鲜技术,之前也有很多相关的技术文章,这篇文章主要是分析下在实际场景中使用时遇到的问题以及如何回避这些问题。
基本原理大同小异,这里主要介绍利用css border(当然还可以使用css3的旋转技术实现,由于兼容性问题这里不涉及了)。
css border实现
一个div或者元素的border并不是我们直观意义上的一条有高度的线,而是一个等高梯形或者三角形(宽高为0时),可以看一下效果:
div定义:


css:

.arrow1{
  width: 0px;
  height:0px;
  border-width: 30px;
  border-style: solid;
  border-color: #007998 #47A447 #3C6AB9 #D2322D;
}
最终效果:

201409231007392.jpg

201409231007392.jpg


可以看到每一个方向的border都是一个三角形,那么我们只需把对应方向剩余其他方向的border设置为透明或者隐藏掉就可以得到任何方向的一个三角形了。如果我们想得到一个下拉图标,我们可以将border的左右和下边框改为透明,css改动如下:

.arrow1{
  width: 0px;
  height:0px;
  border-width: 30px;
  border-style: solid;
  border-color: #007998 transparent transparent transparent;
}
再看一下效果:

201409231007393.jpg

201409231007393.jpg


注:transparent 属性用来在 background 中将 background-color 选项设置为背景颜色透明
bingo!就是我们想要的效果,但是在ie6下杯具鸟!

201409231007394.jpg

201409231007394.jpg


长长的大黑框,让人无法直视,这是因为ie6不支持transparent 透明属性,这时候我们可以将对应区域的border的样式设置为dashed,dashed在边框宽度很大时,会隐藏掉。css修改如下:

  .arrow1{
    width: 0px;
    height:0px;
    border-width: 30px;
    border-style: solid;
    border-color: #007998 transparent transparent transparent;
  }
效果如下(ie6下查看):



但是,到此仍没有结束,我们设置个阴影来查看下最终生成的效果:

201409231007405.jpg

201409231007405.jpg


即便是我们看到的已经生成一个我们需要的三角形,但是三角形的占用高度仍是原高度,这会导致在和其他元素使用时,造成上移的效果。此时,我们需要把下边框的高度设置为0:

  .arrow1{
    width: 0px;
    height:0px;
    border-width: 30px 30px 0;
    border-style: solid;
    border-color: #007998 transparent transparent transparent;
  }
再来看看效果:

201409231007416.jpg

201409231007416.jpg


似乎仍是不太友好,在使用时我们仍需要修改对应的颜色,能不能根据父元素设定的颜色,显示对应的颜色呢?我们需要把border-color修改下:

.arrow1{
  width: 0px;
  height:0px;
  line-height: 0px;
  border-width: 30px 30px 0;
  border-style: solid dashed dashed dashed;
  border-left-color: transparent;
  border-right-color: transparent;
}
效果(使用当前字体颜色):

201409231007427.jpg

201409231007427.jpg


当然除了利用css border生成外,我们还可以使用特殊字符◇叠加定位来生成,也可以使用css3的旋转来生成(ie6下需要hack处理)。利用border是一种常用而且简单兼容的方式
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-28 17:31:44 | 显示全部楼层
素色流年783 2023-6-28 17:31:44 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-29 13:44:47 | 显示全部楼层
永远就三年疗 2023-6-29 13:44:47 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-29 17:39:24 | 显示全部楼层
伊索谗言 2023-6-29 17:39:24 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-29 21:58:09 | 显示全部楼层
小妖花满楼满fx 2023-6-29 21:58:09 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-29 22:13:09 | 显示全部楼层
我的苦恼冉 2023-6-29 22:13:09 看全部
楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-30 01:21:13 | 显示全部楼层
哈哈SE7 2023-6-30 01:21:13 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-30 02:39:29 | 显示全部楼层
幸福341 2023-6-30 02:39:29 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-6-30 10:23:27 | 显示全部楼层
惜颜705 2023-6-30 10:23:27 看全部
我看不错噢 谢谢楼主!知鸟论坛越来越好!
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

发表于 2023-7-1 01:21:13 | 显示全部楼层
执着等待等wc 2023-7-1 01:21:13 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
知鸟论坛永久地址发布页:www.zn60.me
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 赞兔论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表