点导航风格
2014-02-04 16:23:22

今天我将和你分享一下用点导航的巧妙设计风格。例如,这些风格可以用在滚动导航页面或者缩略预览页面,水平方向或者垂直方向。

当达到一种创新性的效果时,小的用户界面元素通常不太会引起人们太多注意,这些元素经常因为尺寸的原因被忽视。但是这些元素经常会展现出一种微妙但有趣的效果。最近,你可能会看到过某种点导航,他们通过水平或垂直滚动而将网页翻页。今天我将和你分享一组赏心悦目的点导航风格,当把鼠标划过时或者点击时,就会展现出这种效果。为了达到这种技巧,我们采用了几种技巧,包括transitions,perspective和SVG。

请注意,有些效果在有些浏览器中可能无法像预期的那样正常工作(例如SVG transition,3D transform-style)。对有些老版本的浏览器来说,你不得不在有些情况下增加一个后退功能。

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
<div class="dotstyle dotstyle-fillup">
    <ul>
        <li class="current"><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Products</a></li>
        <li><a href="#">Portfolio</a></li>
        <li><a href="#">Blog</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</div>

在有些例子中,我们要增加一个附加的空列表元素,目的是把当前项目移动到点导航的状态。

我们定义了一些通用的风格:

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
.dotstyle ul {
    position: relative;
    display: inline-block;
    margin: 0;
    padding: 0;
    list-style: none;
    cursor: default;
}
 
.dotstyle li {
    position: relative;
    display: block;
    float: left;
    margin: 0 16px;
    width: 16px;
    height: 16px;
    cursor: pointer;
}
 
.dotstyle li a {
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    outline: none;
    border-radius: 50%;
    background-color: #fff;
    background-color: rgba(255,255,255,0.3);
    text-indent: -999em;
    cursor: pointer; /* make the text accessible to screen readers */
    position: absolute;
}

关于实现这种风格的一个例子,我们放在了下面,在这个例子中,我们填充一个圆。

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
/* Fill up */
.dotstyle-fillup li a {
    overflow: hidden;
    background-color: rgba(0,0,0,0);
    box-shadow: inset 0 0 0 2px rgba(255,255,255,1);
    transition: background 0.3s;
}
 
.dotstyle-fillup li a::after {
    content: '';
    position: absolute;
    bottom: 0;
    height: 0;
    left: 0;
    width: 100%;
    background-color: #fff;
    box-shadow: 0 0 1px #fff;
    transition: height 0.3s;
}
 
.dotstyle-fillup li a:hover,
.dotstyle-fillup li a:focus {
    background-color: rgba(0,0,0,0.2);
}
 
.dotstyle-fillup li.current a::after {
    height: 100%;
}

下面是另一个有趣的例子:

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
39
40
41
42
43
/* SVG draw circle stroke */   
.dotstyle-drawcircle li {
    width: 18px;
    height: 18px;
}
 
.dotstyle-drawcircle li a {
    top: 3px;
    left: 3px;
    width: 12px;
    height: 12px;
    background-color: #c44d48;
    -webkit-transition: opacity 0.3s;
    transition: opacity 0.3s;
}
 
.dotstyle-drawcircle li svg {
    z-index: 10;
}
 
.dotstyle-drawcircle li svg circle {
    opacity: 0;
    fill: none;
    stroke: #fff;
    stroke-width: 3;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-dasharray: 39 39;
    stroke-dashoffset: 39; /* ~ length of circle path (pi*2r) */
    transition: stroke-dashoffset 0.3s, opacity 0.3s;
}
 
.dotstyle-drawcircle li.current a,
.dotstyle-drawcircle li a:hover,
.dotstyle-drawcircle li a:focus {
    opacity: 0.5;
}
 
.dotstyle-drawcircle li.current svg circle {
    opacity: 1;
    stroke-dashoffset: 0;
    transition: stroke-dashoffset 0.3s, opacity 0.15s;
}