超链接基本样式

W3C官网 2020-12-8

下面介绍如何使用CSS3设计超链接的基本样式。

动态伪类

在网页设计中,用户可以使用CSS3的动态伪类选择器定义超链接的四种状态样式。

【示例1】在下面示例中,定义页面所有超链接默认为红色下划线效果,当鼠标经过时显示为绿色下划线效果,而当单击超链接时则显示为黄色下划线效果,超链接被访问过之后显示为蓝色下划线效果,演示效果如图1所示。

<style type="text/css">
a:link {color: #FF0000;/* 红色 */} /* 超链接默认样式 */
a:visited {color: #0000FF; /* 蓝色 */} /* 超链接被访问后的样式 */
a:hover {color: #00FF00; /* 绿色 */}/* 鼠标经过超链接的样式 */
a:active {color: #FFFF00; /* 黄色 */}/* 超链接被激活时的样式 */
</style>
<ul class="p1">
           <li><a href="#"  class="a1">首页</a></li>
     <li><a href="#" class="a2">新闻</a></li>
     <li><a href="#" class="a3">微博</a></li>
</ul>
<ul class="p2">
           <li><a href="#"  class="a1">关于</a></li>
     <li><a href="#" class="a2">版权</a></li>
     <li><a href="#" class="a3">友情链接</a></li>
</ul>

图1 定义超链接样式

【提示】

超链接的四种状态样式的排列顺序是固定的,一般不能随意调换。正确顺序是:link、visited、hover和active。

在下面样式中,当鼠标经过超链接时,会先执行第一行声明,但是紧接着第三行的声明会覆盖掉第一行和第二行声明的样式,所以就无法看到鼠标经过和被激活时的效果。

a.a1:hover {color: #00FF00;}
a.a1:active {color: #FFFF00;}
a.a1:link {color: #FF0000;}
a.a1:visited {color: #0000FF; }

在上面代码中,通过指定类型选择器,限定上面4个样式仅作用于包含al类的超链接中。

当然,用户可以根据需要仅定义部分状态样式。例如,当要把未访问的和已经访问的链接定义成相同的样式,则可以定义link、hover和active三种状态。

a.a1:link {color: #FF0000;}
a.a1:hover {color: #00FF00;}
a.a1:active {color: #FFFF00;}

如果仅希望超链接显示两种状态样式,可以使用a和hover来定义。其中a标签选择器定义a元素的默认显示样式,然后定义鼠标经过时的样式。

a {color: #FF0000;}
a:hover {color: #00FF00;}

但是如果页面中包含锚记对象,将会影响锚记的样式。如果定义如下的样式,则仅影响超链接未访问时的样式和鼠标经过时的样式。

a:link {color: #FF0000;}
a:hover {color: #00FF00;}

下划线样式

在设计超链接样式时,下划线一直是一个重要效果,巧妙结合下划线、边框和背景图像,可以设计出很多富有个性的样式。例如,定义下划线的色彩、下划线距离、下划线长度和对齐方式和定制双下划线等。

如果用户不喜欢超链接文本的下划线样式,可以使用CSS3的text-decoration属性进行清除。

a {/* 完全清除超链接的下划线效果 */
           text-decoration:none;
}

从用户体验的角度考虑,在取消默认的下划线之后,应确保浏览者可以识别所有超链接,如加粗显示、变色、缩放、高亮背景等。也可以设计当鼠标经过时增加下划线,因为下划线具有很好的提示作用。

a:hover {/* 鼠标经过时显示下划线效果 */
           text-decoration:underline;
}

下划线样式不仅仅是一条实线,可以根据需要自定义设计。主要设计思路如下:

【示例2】下面示例设计当鼠标经过超链接文本时,显示为下划虚线、字体加粗、色彩高亮的效果,如图2所示。

<style type="text/css">
a {/* 超链接的默认样式 */
     text-decoration:none;                                        /* 清除超链接下划线 */
     color:#999;                                                      /* 浅灰色文字效果 */}
a:hover {/*鼠标经过时样式 */
     border-bottom:dashed 1px red;                          /* 鼠标经过时显示虚下划线效果 */
     color:#000;                                                     /* 加重颜色显示 */
     font-weight:bold;                                             /* 加粗字体显示 */
     zoom:1;                                                          /* 解决IE浏览器无法显示问题 */
}
</style>
<ul class="p1">
     <li><a href="#" class="a1">首页</a></li>
     <li><a href="#" class="a2">新闻</a></li>
     <li><a href="#" class="a3">微博</a></li>
</ul>

【示例3】也可以使用CSS3的border-bottom属性定义超链接文本的下划线样式。下面示例定义超链接始终显示为下划线效果,并通过颜色变化来提示鼠标经过时的状态变化,效果如图3所示。

<style type="text/css">
a {/* 超链接的默认样式 */
     text-decoration:none;                                       /* 清除超链接下划线 */
     border-bottom:dashed 1px red;                          /* 红色虚下划线效果 */
     color:#666;                                                     /* 灰色字体效果 */
     zoom:1;                                                          /* 解决IE浏览器无法显示问题 */
}
a:hover {/* 鼠标经过时样式 */
     color:#000;                                                     /* 加重颜色显示 */
     border-bottom:dashed 1px #000;                       /* 改变虚下划线的颜色 */
}
</style>

图2 定义下划线样式

图3 定义下划线样式

【示例4】使用CSS3的background属性可以借助背景图定义更精致、个性的下划线样式。

第1步,使用Photoshop设计一个虚线(images/dashed.psd),设计图像高度为1像素,宽度为4像素、6像素或8像素。具体宽度可根据虚线的疏密确定。

第2步,在Photoshop中,选择颜色以跳格方式进行填充,最后保存为GIF格式图像。

第3步,把示例2另存为test3.html,使用背景图代替border-bottom:dashed 1px red;声明,主要样式代码如下。

<style type="text/css">
a {/* 超链接的默认样式 */
     text-decoration:none;                                       /* 清除超链接下划线 */
     color:#666;                                                     /* 灰色字体效果 */
}
a:hover {/* 鼠标经过时样式 */
     color:#000;                                                     /* 加重颜色显示 */
    /* 定义背景图像,定位到超链接元素的底部,并沿x轴水平平铺 */
     background:url(images/dashed1.gif) left bottom repeat-x;
}
</style>

第4步,在浏览器中预览,效果如图4所示。

图4 背景图像设计的下划线样式

光标样式

在默认状态下,鼠标指针经过超链接时显示为手形。使用CSS的cursor属性可以改变这种默认效果,cursor属性定义鼠标移过对象时的指针样式,取值说明如表1所示。

表1 cursor属性取值说明

取值 说明
auto 基于上下文决定应该显示什么光标
crosshair 十字线光标(+)
default 基于平台的缺省光标。通常渲染为一个箭头
pointer 指针光标,表示一个超链接
move 十字箭头光标,用于标示对象可被移动
e-resize、ne-resize、nw-resize、n-resize、se-resize、sw-resize、s-resize、w-resize 表示正在移动某个边,如se-resize光标用来表示框的移动开始于东南角
text 表示可以选择文本。通常渲染为I形光标
wait 表示程序正忙,需要用户等待,通常渲染为手表或沙漏
help 光标下的对象包含有帮助内容,通常渲染为一个问号或一个气球
<uri>URL 自定义光标类型的图标路径

如果自定义光标样式。使用绝对或相对URL指定光标文件(后缀为.cur或者.ani)。

【示例5】下面示例在内部样式表中定义多个鼠标指针类样式,然后为表格单元格应用不同的类样式,完整代码可以参考本节示例源代码,示例演示效果如图5所示。

<style>
.auto { cursor: auto; }
.default { cursor: default; }
.none { cursor: none; }
.context-menu { cursor: context-menu; }
.help { cursor: help; }
.pointer { cursor: pointer; }
.progress { cursor: progress; }
.wait { cursor: wait; }
.cell { cursor: cell; }
.crosshair { cursor: crosshair; }
.text { cursor: text; }
.vertical-text { cursor: vertical-text; }
.alias { cursor: alias; }
.copy { cursor: copy; }
.move { cursor: move; }
.no-drop { cursor: no-drop; }
.not-allowed { cursor: not-allowed; }
.e-resize { cursor: e-resize; }
.n-resize { cursor: n-resize; }
.ne-resize { cursor: ne-resize; }
.nw-resize { cursor: nw-resize; }
.s-resize { cursor: s-resize; }
.se-resize { cursor: se-resize; }
.sw-resize { cursor: sw-resize; }
.w-resize { cursor: w-resize; }
.ew-resize { cursor: ew-resize; }
.ns-resize { cursor: ns-resize; }
.nesw-resize { cursor: nesw-resize; }
.nwse-resize { cursor: nwse-resize; }
.col-resize { cursor: col-resize; }
.row-resize { cursor: row-resize; }
.all-scroll { cursor: all-scroll; }
.zoom-in { cursor: zoom-in; }
.zoom-out { cursor: zoom-out; }
.url { cursor: url(skin/cursor.gif),  url(skin/cursor.png), url(skin/cursor.jpg), pointer; }
</style>

图5 比较不同光标样式效果

【提示】

使用自定义图像作为光标类型,IE和Opera只支持*.cur等特定的图片格式;而Firefox、Chrome和Safari既支持特定图片类型也支持常见的*.jpg, *.gif, *.jpg等图片格式。

cursor属性值可以是一个序列,当用户端无法处理第一个图标时,它会尝试处理第二个、第三个等,如果用户端无法处理任何定义的光标,它必须使用列表最后的通用光标。例如,下面样式中就定义了3个自定义动画光标文件,最后定义了一个通用光标类型。

a:hover { cursor:url('images/1.ani'),  url('images/1. cur'), url('images/1.gif'), pointer;}