当前位置: 首页 > news >正文

CSS实现空心三角指示箭头

本文首发于yoowin.me,欢迎访问!

web开发中,三角形的日常应用,以三角形指示箭头最为常见,其用CSS来实现非常简单,熟悉了之后相比于引入SVG或是背景图片会是更好更灵活的选择。

而三角箭头一般而言,又分为两种,一种是视觉上没有边框的,我们叫做实心三角形;还有一种是视觉上有边框的,而三角箭头刨去边框的部分又要与主体元素的背景颜色一致,我们叫做空心三角形。

两种三角箭头

言归正传,讲一下怎样实现的。

首先,讲一下三角形的实现原理,熟悉的同学可以跳过这一步。

三角形实现原理

三角形的实现原理是宽高都不设置(即为0),只设置边框,如果四个边框都设置宽度(border-width)、样式(border-style)和颜色(border-color),效果如图:

上面是四个边框border-width一样时的效果,其实border-width是可以自己根据需求来变化的,如下图效果:

上面看到的都是四个三角形,其实想实现单个的三角形只需把其他三个三角形的border-color设置为透明色transparent就可以了(2017年还用考虑IE6吗)。

这样就实现三角形了。

实心三角形箭头

实心三角形的原理就是一个三角形绝对定位到主体元素边界处并连接起来。

为了语义化,我们用单标签,三角形用伪类来实现。

把三角形颜色换成和主体元素一致的背景色就可以了。如下图:

空心三角箭头

空心三角形的原理就是一个边框颜色的三角形绝对定位到主体元素边界处并连接起来,然后另一个主体元素背景色的三角形绝对定位并覆盖到第一个三角形上面,关键的一点是第二个三角形相较于第一个三角形定位上偏移的距离应等于边框宽度。

说得可能比较晦涩,看效果图会更清楚明白(为了区分显示,第一个三角形用的粉色,第二个白色)

把第一个三角形颜色换成边框颜色,第二个三角形颜色换成背景颜色就可以了。

为了语义化,我们使用单标签,两个三角形用before和after伪类来实现,因为after伪元素会覆盖before伪元素,所以after伪元素就是第二个三角形。

第二个三角形定位的偏移距离

这是比较容易被忽略的一点!

为了视觉效果,也为了用户体验,我们应该将三角箭头的边框宽度和主体元素的边框宽度保持一致。

一般可能会有同学认为第二个三角形的偏移值和主体元素边框宽度一样,其实是不对的。

第二个三角形相较于第一个三角形的偏移值其实应该是主体元素边框宽度的"根号2"倍,约为1.414,为了方便可以按1.4倍计算。

下图是原理图:

勾股定理

假设主体元素边框宽度为6px,所以第二个三角形相较于第一个三角形的偏移量应为6px*1.4 = 8.4px

在线demo

附代码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>空心三角形指示箭头</title>
    <style>
        .box {
            position: relative;
            width: 300px;
            height: 100px;
            border: 6px solid #555;
            border-radius: 20px;
            margin: 100px auto;
            background-color: #8a98ff;
        }

        /*第一个三角形*/
        .box::before{  /*这里的伪元素用单冒号和双冒号都一样*/
            content: '';
            display: block;
            position: absolute;
            top: -26px;
            left: 80px;
            border-left: 20px solid transparent ;
            border-right: 20px solid transparent;
            border-bottom: 20px solid #555;
        }

        /*第二个三角形*/
        .box::after{
            content: '';
            display: block;
            position: absolute;
            top: -17.6px; /*向下偏移量是矩形边框宽度的1.4(根号2)倍,即8.4,top值为-26-(-8.4)*/
            left: 80px;
            border-left: 20px solid transparent;
            border-right: 20px solid transparent;
            border-bottom: 20px solid #8a98ff;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>复制代码

转载于:https://juejin.im/post/59c9e9276fb9a00a616f4842

相关文章:

  • TPYBoard开发板ADC数模转换一: 初识ADC使用
  • no.4 数据和C 06
  • W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)
  • Go语言与数据库开发:01-06
  • js 日期计算
  • vue 请求后台数据
  • Unity3D-RayMarch-几何图元-3添加阴影
  • es6--symbol
  • 元组、函数详解
  • jQuery基本过滤选择器
  • HTML5实现文字轮滚
  • App案例分析——XBMC
  • Hadoop- Hadoop详解
  • numpy的random模块
  • Django的思维导图
  • Angular4 模板式表单用法以及验证
  • ComponentOne 2017 V2版本正式发布
  • Create React App 使用
  • Hexo+码云+git快速搭建免费的静态Blog
  • JS函数式编程 数组部分风格 ES6版
  • laravel5.5 视图共享数据
  • maven工程打包jar以及java jar命令的classpath使用
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PHP的Ev教程三(Periodic watcher)
  • React的组件模式
  • tweak 支持第三方库
  • vue-router 实现分析
  • 创建一种深思熟虑的文化
  • 搭建gitbook 和 访问权限认证
  • 大型网站性能监测、分析与优化常见问题QA
  • 大整数乘法-表格法
  • 后端_ThinkPHP5
  • 追踪解析 FutureTask 源码
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 移动端高清、多屏适配方案
  • !!java web学习笔记(一到五)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014# day.2 T2 寻找道路
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十三)Flask之特殊装饰器详解
  • (一)Thymeleaf用法——Thymeleaf简介
  • (一)WLAN定义和基本架构转
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .gitignore文件_Git:.gitignore
  • .NET Framework .NET Core与 .NET 的区别
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 设计模式初探
  • .NET构架之我见
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)