本文依然是对CSS世界中的小技巧的整理。看CSS世界的过程中,确实收获良多,有很多让人眼前一亮的小技巧。本文就将整理纯CSS实现移动导航中经常使用的三道杠,以及双层圆点的效果。无需加载图片实现。

三道杠

border双线边框实现

HTML

HTML部分只有单层

1
<div class="icon-menu-border"></div>

CSS

1
2
3
4
5
6
7
8
/* border 双线边框实现 */
.icon-menu-border {
display: inline-block;
width: 120px;
height: 20px;
border-top: 60px double;
border-bottom: 20px solid;
}
  • border-style: double属性是双线边框(至少3px才会生效),双线的宽度以及两条线之间的间距的分配是:双线宽度相等,中间间隔±1px

  • 宽度和高度是指定的中间和下面两条线之间的位置,下方是单线边框,上方是双线边框

  • border颜色默认是当前color的颜色

padding和background-clip共同实现

HTML

HTML部分只有单层

1
<div class="icon-menu-padding"></div>

CSS

1
2
3
4
5
6
7
8
9
10
11
/* padding和background-clip共同实现 */
.icon-menu-padding {
display: inline-block;
width: 140px;
height: 10px;
padding: 35px 0;
border-top: 10px solid;
border-bottom: 10px solid;
background-color: currentColor;
background-clip: content-box;
}
  • background-clip设置元素背景区域,有三个参数border-box(默认):背景延伸到边框外沿(但是在边框之下)。padding-box:边框下面没有背景,即背景延伸到内边距外沿。 content-box:背景裁剪到内容区 (content-box) 外沿

  • 宽高定在中间位置,上下padding,外层边框,通过background-clip属性将背景颜色区域限制在内容区,而padding区没有颜色

  • currentColor属性表示当前标签所继承的文字颜色,其中有一些妙用,比如说张鑫旭博客里面的背景色镂空效果

:before和:after伪类实现

这个是我在书上看到说可以通过伪类实现三道杠效果,但是并没有给出实例,我就自己想了一下,写了一个,未必是最佳写法。

HTML

HTML部分最外层是用来指定一个选区大小,否则选区只是middle该区域的大小

1
2
3
<div class="icon-menu-demo">
<div class="middle"></div>
</div>

CSS

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
/* :before和:after伪类实现 */
.icon-menu-demo {
position: relative;
display: inline-block;
width: 120px;
height: 100px;
cursor: pointer;
}

.middle {
width: 120px;
height: 20px;
background-color: currentColor;
}

.middle:before {
position: absolute;
top: 40px;
width: 120px;
height: 20px;
content: ".";
color: currentColor;
background-color: currentColor;
}

.middle:after {
position: absolute;
top: 80px;
width: 120px;
height: 20px;
content: ".";
color: currentColor;
background-color: currentColor;
}
  • middle位置在最上面,:before在中间,:after在最下面,原因是为了便于外层包裹的div确定区域

  • colorbackground-color颜色要相同,将伪类的文字内容隐藏

小圆点

HTML

1
<div class="icon-dot"></div> 

CSS

1
2
3
4
5
6
7
8
9
10
.icon-dot {
display: inline-block;
width: 100px;
height: 100px;
padding: 10px;
border: 10px solid;
border-radius: 50%;
background-color: currentColor;
background-clip: content-box;
}
  • 和上面的padding和background-clip实现三道杠效果原理相同,不再赘述

总结

可以看出来,我自己想出来的伪类实现三道杠和其它两种方法比起来繁琐了许多。总之,看了CSS世界这本书,确实收益颇多,后面也会抽空整理一下书中的其它一些小的技巧,巩固所学。相比于加载图片,这种方法确实优秀了许多。