纯CSS实现的箭头

用CSS即可绘制出各种箭头,无需裁剪图片,甚至没有用到CSS3的东西。对浏览器支持良好。

  基本原理

  原理非常简单,通过截取border(边框)的部分“拐角”实现,几行CSS代码即可理解:

  一个梯形

  当元素宽、高和边框的宽相近(等)时,改变某一边的颜色可以看到一个梯形;

 
1
2
3
4
5
6
7
8
9
10
<div id="demo11"></div>
 
<style>
#demo11{
  border:10pxsolid #000;
  border-left-color:#f00;
  width:10px;
  height:10px;
}
</style>

  一个三角形

  当元素宽、高为零,且其他边为透明颜色时,可以形一个三角形。

 
1
2
3
4
5
6
7
8
9
10
<div id="demo12"></div>
 
<style>
#demo12{
  border:10pxsolid #000;
  border-left-color:#f00;
  width:0;
  height:0;
}
</style>

  任意角度的三角形

  改变各个边的宽度,即通过调整“边框”厚度可以配置出任意角度

 
1
2
3
4
5
6
7
8
9
10
<div id="demo14"></div>
 
<style>
#demo14{
  border:10pxsolid transparent;
  border-left:20pxsolid #f00;
  width:0;
  height:0px;
}
</style>

  通过伪元素实现

  三角形可以通过伪元素绘制出,而无需改变原来的DOM结构

  文字内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<span id="demo15">文字内容</span>
 
<style>
#demo15{
  position:relative;
}
#demo15:after {
  border:10pxsolid transparent;
  border-left:10pxsolid #f00;
  width:0;
  height:0;
  position:absolute;
  content:' '
}
</style>

  伪元素实现三角线箭头

  通过伪元素绘制出的两个,一个与背景色相同覆盖部分红色箭头,形成三角线

  文字内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<span id="demo15">文字内容</span>
 
<style>
#demo16{
  position:relative;
}
#demo16:after, #demo16:before {
  border:10pxsolid transparent;
  border-left:10pxsolid #fff;
  width:0;
  height:0;
  position:absolute;
  top:0;
  right:-20px;
  content:' '
}
 
#demo16:before {
  border-left-color:#f00;
  right:-21px;
}
</style>

  三角线分割的Tab页

  • 文字内容 Tab1
  • 文字内容 Tab2
  • 文字内容 Tab3
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<ul id="demo17">
  <li>文字内容 Tab1</li>
  <li>文字内容 Tab2</li>
  <li>文字内容 Tab3</li>
</ul>
 
<style>
#demo17{
  font-size:10px;
  height:24px;
}
 
#demo17li {
  float:left;
  position:relative;
  list-style:none;
  margin:020px 12px -19px;
  border-top:solid1px #ddd;
  border-bottom:solid1px #ddd;
  padding-left:12px;
}
 
#demo17li:after, #demo17li:before {
  border:10pxsolid transparent;
  border-left:10pxsolid #fff;
  width:0;
  height:0;
  position:absolute;
  top:0;
  right:-18px;
  content:' '
}
 
#demo17li:before {
  border-left-color:#ddd;
  right:-19px;
}
</style>

  三角形跟矩形组合成提示框

  这里还有另一种效果,使用三角形跟矩形组合成提示框,代码来自这篇文章: Css arrows and shapes without markup

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<div id="demo"></div>
 
<style>
#demo {
  width:100px;
  height:100px;
  background-color:#ccc;
  position:relative;
  border:4pxsolid #333;
}
 
#demo:after, #demo:before {
  border:solidtransparent;
  content:' ';
  height:0;
  left:100%;
  position:absolute;
  width:0;
}
 
#demo:after {
  border-width:9px;
  border-left-color:#ccc;
  top:15px;
}
 
#demo:before {
  border-width:14px;
  border-left-color:#333;
  top:10px;
}
</style>
posted @ 2017-08-05 14:49  宋发元  阅读(541)  评论(0)    收藏  举报