纯CSS代码实现各种小箭头

2017年08月02日 13:10:15益点益滴3619

我们知道,一般网页中的箭头大多是图片图标,字体图标流行以后也有很多改用字体图标。而实际上用CSS即可绘制出各种箭头,无需裁剪图片,甚至没有用到CSS3,所以浏览器兼容性良好。

基本原理

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

绘制梯形

当元素宽、高和边框的宽相近(等)时,改变某一边的颜色可以看到一个梯形,不理解?我们来看实例:

<div id="demo11"></div>
<style>
#demo11 {
  border: 10px solid #000;
  border-left-color: #f00;
  width: 10px;
  height: 10px;
}
</style>

绘制三角形

实例宽高均为10像素,当元素宽、高为0,且其他边为透明或与背景颜色相同时,就可以形一个三角形,至此小箭头已成,来看实例:

<div id="demo12"></div>
<style>
#demo12 {
  border: 10px solid transparent;
  border-left-color: #f00;
  width: 0;
  height: 0;
}
</style>

改变各个边的宽度,即通过调整“边框”厚度则可以配置出任意角度,调整显示哪一条边框则可以决定箭头方向:

<div id="demo14"></div>
<style>
#demo14 {
  border: 10px solid transparent;
  border-right: 20px solid #f00;
  width: 0;
  height: 0;
}
</style>

如果不想改变原有的DOM结构和增加新的标签,三角形还可以通过伪元素绘制出:

<span id="demo15">原本内容</span>
<style>
#demo15{
  position: relative;
}
#demo15:after {
  border: 10px solid transparent;
  border-left: 10px solid #f00;
  width: 0;
  height: 0;
  position: absolute;
  content: ' '
}
</style>

既然用到了伪元素,那么我们就可以通过伪元素绘制出2个三角形,其中一个与背景色相同错开1个像素覆盖有颜色部分箭头,即可形成三角线,下面来看三角线分割的Tab页实例:

<ul id="demo17">
  <li>文字内容 Tab1</li>
  <li>文字内容 Tab2</li>
  <li>文字内容 Tab3</li>
</ul>
<style>
#demo17{
  font-size: 10px;
  height: 24px;
}
#demo17 li {
  float: left;
  position: relative;
  list-style: none;
  margin: 0 20px 12px -19px;
  border-top: solid 1px #ddd;
  border-bottom: solid 1px #ddd;
  padding-left: 12px;
}
#demo17 li:after, #demo17 li:before {
  border: 10px solid transparent;
  border-left: 10px solid #fff;
  width: 0;
  height: 0;
  position: absolute;
  top: 0;
  right: -18px;
  content: ' '
}
#demo17 li:before {
  border-left-color: #ddd;
  right: -19px;
}
</style>

最后再介绍一种组合效果,模仿聊天对话框,使用三角形跟矩形组合成提示框:

<div id="demo"></div>
<style>
#demo {
  width: 100px;
  height: 100px;
  background-color: #ccc;
  position: relative;
  border: 4px solid #333;
}
#demo:after, #demo:before {
  border: solid transparent;
  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>

超赞,真给力!嗯,必须鼓励~

打赏0
账号:mxy310@163.com[复制]
账号:77940140[复制]