css实现带箭头选项卡
这阵子在做一个web端项目中遇到一个问题,需要实现带箭头的选项卡点击可切换。起初没想太多,直接切一个向上的小箭头图片,外层div设置相同颜色的边框,再用相对定位和绝对定位。这种方法是可行的,但是因为手机和电脑的屏幕显示图片的画质细节不同,导致1px的边框比1px的切图实际粗很多,对于有强迫症的人来说心里总是不舒服的……后来我就想,屁大点的箭头直接用css写一个算了。可是以前没写过,那就研究一下吧。网上有很多这方面的资料,但是还是那句话,那都是人家的不是自己的,要想据为己有自己也写篇博客吧。
这种纯css没有兼容性的问题,无需切图,甚至没有用到CSS3,对各种浏览器支持良好。
基本原理:控制盒子模型的宽度高度和边框的显示隐藏,以及改变某一条边的颜色。
从梯形入手:
当元素宽、高和边框的宽相等时,改变某一边的颜色可以看到一个梯形;

<span class="ladder"></span>
<style type="text/css">
.ladder{
border:10px solid transparent;
border-left:10px #f00 solid;
width:10px;
height:10px;
display: inline-block;
}
</style>
梯形
三角形:
当元素宽、高为零,且其他边为透明颜色时,可以形一个三角形。

向上的三角形:<span class="triangle-up"></span>
向下的三角形:<span class="triangle-down"></span>
向左的三角形:<span class="triangle-left"></span>
向右的三角形:<span class="triangle-right"></span> <style type="text/css">
.triangle-up{
border: 20px solid transparent;
border-bottom: 20px solid #f00;
width:0;
height:0;
}
.triangle-down{
border: 20px solid transparent;
border-top: 20px solid #f00;
width:0;
height:0;
}
.triangle-left{
border:20px solid transparent;
border-right:20px solid #f00;
width:0;
height:0;
}
.triangle-right{
border:20px solid transparent;
border-left:20px solid #f00;
width:0;
height:0;
}
</style>
上下左右三角形
通过不同颜色的两个元素覆盖可以形成三角线。
aaarticlea/png;base64,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" alt="" />
<span class="triangle02">
向上的三角线:
<span class="pot01"></span>
<span class="pot02"></span>
</span>
<span class="triangle02">
向下的三角线:
<span class="pot03"></span>
<span class="pot04"></span>
</span>
<span class="triangle02">
向左的三角线:
<span class="pot05"></span>
<span class="pot06"></span>
</span>
<span class="triangle02">
向右的三角线:
<span class="pot07"></span>
<span class="pot08"></span>
</span> <style type="text/css">
.triangle02{
width:200px;
height:100px;
display: inline-block;
position: relative;
}
.triangle02 span {
width: 0;
height: 0;
font-size: 0;
overflow: hidden;
position: absolute;
}
.pot01{
border-width: 20px;
border-style: dashed dashed solid ;
border-color: transparent transparent #f00 ;
left: 100px;
top: 0;
}
.pot02{
border-width: 20px;
border-style: dashed dashed solid ;
border-color: transparent transparent #fff ;
left: 100px;
top: 2px;
}
.pot03{
border-width: 20px;
border-style: solid dashed dashed;
border-color: #f00 transparent transparent;
left: 100px;
top: 2px;
}
.pot04{
border-width: 20px;
border-style: solid dashed dashed;
border-color: #fff transparent transparent;
left: 100px;
top: 0;
}
.pot05{
border-width: 20px;
border-style: dashed solid dashed dashed;
border-color: transparent #f00 transparent transparent;
left: 100px;
top: 2px;
}
.pot06{
border-width: 20px;
border-style: dashed solid dashed dashed;
border-color: transparent #fff transparent transparent;
left: 102px;
top: 2px;
}
.pot07{
border-width: 20px;
border-style: dashed dashed dashed solid;
border-color: transparent transparent transparent #f00;
left: 100px;
top: 2px;
}
.pot08{
border-width: 20px;
border-style: dashed dashed dashed solid;
border-color: transparent transparent transparent #fff;
left: 98px;
top: 2px;
}
</style>
上下左右三角线
那么带箭头的提示框就简单了,只需要外层加个边框,用相对和绝对定位就可以实现。

<div class="box">
<span class="top01"></span>
css实现箭头对话框
</div>
<style type="text/css">
.box {
width: 300px;
padding: 30px 20px;
border: 5px solid #666;
position: relative;
margin:30px auto;
} .box span {
width: 0;
height: 0;
font-size: 0;
overflow: hidden;
position: absolute;
}
.box span.top01 {
border-width: 20px;
border-style: dashed dashed solid ;
border-color: transparent transparent #666;
left: 20px;
bottom: 81px;
}
</style>
箭头对话框
<div class="box">
<span class="bot"></span>
<span class="top"></span>
css实现气泡对话框
</div>
<style type="text/css">
.box {
width: 300px;
padding: 30px 20px;
border: 5px solid #666;
position: relative;
margin:30px auto;
}
.box span {
width: 0;
height: 0;
font-size: 0;
overflow: hidden;
position: absolute;
}
.box span.bot {
border-width: 20px;
border-style: dashed dashed solid ;
border-color: transparent transparent #666 ;
left: 100px;
bottom: 85px;
}
.box span.top {
border-width: 20px;
border-style: dashed dashed solid ;
border-color: transparent transparent #ffffff;
left: 100px;
bottom: 78px;
}
</style>
气泡对话框
要实现我需求再结合js就行啦。

在这里,我把学习过程中参考的文章标注一下供大家学习:
用纯CSS实现的箭头
纯css实现带三角箭头带描边带阴影带圆角的兼容各浏览器de气泡层
css实现带箭头选项卡的更多相关文章
- 使用纯CSS实现带箭头的提示框
爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...
- div+css制作带箭头提示框效果图(原创文章)
一直都在看站友们的作品,今天也来给大家分享一个小的效果,第一次发还有点小紧张呢,语言表达能力不是很好,还请见谅…^ 先来个简单点的吧,上效果图 刚开始在网上看到效果图的时候感觉好神奇,当我试着写出来的 ...
- CSS实现带箭头的提示框
我们在很多UI框架中看到带箭头的提示框,感觉挺漂亮,但是之前一直不知道其原理,今天网上找了些资料算是弄清楚原理了: 先上效果图: 原理分析: 上面的箭头有没有觉得很像一个三角形,是的,它就是三角形:只 ...
- css实现带箭头的流程条
直接上效果图: <ul class="navs"> <li>1</li> <li>2</li> <li>3& ...
- div+css实现圆形div以及带箭头提示框效果
.img{ width:90px; height:90px; border-radius:45px; margin:0 40%; border:solid rgb(100,100,100) 1px;& ...
- 圆角带箭头的提示框css实现
css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...
- css简单实现带箭头的边框
原文地址 https://tianshengjie.cn/artic... css简单实现带箭头的边框 普通边框 <style> .border { width: 100px; heigh ...
- 【荐】CSS实现漂亮实用带箭头的流程图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 用纯CSS实现的箭头
div+css实现带三角箭头提示框 链接:http://www.xuebuyuan.com/160534.html 链接:http://www.admin10000.com/document/4089 ...
随机推荐
- OWIN学习
在微软.net的dll中 有Microsoft.Owin Microsoft.Owin.Security, Microsoft.Owin.Security.Cookies, Microsoft.Owi ...
- 设计模式23---设计模式之装饰模式(Decorator)(结构型)
1.装饰模式讲解 1.1定义 动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 1.2装饰模式要点 透明的给一个对象增加功能,换句话说就是要给一个对象增加功能,但是不能 ...
- C++学习笔记(九):作用域和命名空间
作用域 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域).变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号.也就是说,作用域由变 ...
- 如何对SQL Server 2005进行设置以允许远程连接(转载)
如何对SQL Server 2005进行设置以允许远程连接(转载) 在尝试从远程计算机连接到 Microsoft SQL Server 2005 实例时,可能会接收到错误消息.在使用任何程序连接到 S ...
- Linux时间同步方式记录
Linux时间同步 部署Hadoop集群,遇到各个linux服务器的时间不同步的问题,于是研究了一下linux的时间同步方式,特将同步方式,总结如下: A. 前提条件 a) 网络是连通 ...
- cocos2d-x 触摸偏移
转自:http://www.cnblogs.com/fjut/archive/2012/04/28/2475693.html //ccTouchBegan必须实现,否则会报错 bool PicScan ...
- 【IOS界面布局】横竖屏切换和控件自适应(推荐)
[IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改 ...
- Cocos2d-x 3.x 资料整理
cocos2d-x-3.0rc0新project的分辨率设置和控制台输出信息 http://kome2000.blog.51cto.com/969562/1379704 Cocos2d-x 3. ...
- delphi中使用webbrowser提交表单
转自:http://blog.163.com/hehaifeng1984@126/blog/static/6900113620133504644998/ 我们以百度搜索为例,使用webbrowser组 ...
- pomelo 开发环境搭建
开发前提条件: Windows系统,请确保你的Windows系统包括源代码编译工具.Node.js的源代码主要由C++代码和JavaScript代码构成,可是却用gyp工具来做源代码的项目管理,该工 ...