回答读者提问(14)——鼠标指针经过时给图像加边框
来自广西的杨金雄读者提出了一个问题,如何在鼠标指针经过一个图像时,图像出现一个细线的边框呢?这里对这个问题给出一个回答。
先来看一下最终的效果,请读者将鼠标移动到图像范围内:
首先请注意:学习本文需要一定的CSS基础,必须对“CSS选择器”、“后代选择器”、“伪类”这几个基本概念有所了解。
这个效果如何实现最方便呢?如果对于CSS选择器理解不够深入,可能想到的方法是把图像放在a标记中,然后在设置a元素的边框,这样做会非常麻烦,我们现在来看一下更为方便的解决方法。
首先我们假设这个图片不需要连接到其他的页面,因此尽量不使用“a”标记,而是仅对“img”标记进行设置,CSS代码如下:
1 2 3 4 5 6 7 | img{ padding:5px; border:1px white solid; } img:hover{ border:1px green solid; } |
html代码当然非常简单,仅一句话:
1 | <img src="cup.gif" /> |
效果如下:

如果使用Firefox浏览器的用户会发现这个效果和最上面的效果相同,因此,这样简单的几句话就实现了这个效果。然而这里对img标记使用了“:hover”伪类,因此使用IE 6浏览器的用户会发现,鼠标移动到图像范围内不会出现绿色边框。
那么应该如何解决呢?
在IE6中,只有“a”标记支持“:hover”伪类,因此必须从这里寻找突破口。首先改造HTML代码,也就是在图像的外面套上一个“a”标记,代码如下:
1 | <a href="#"><img src="cup.gif" /></a> |
接下来,为它编写CSS代码,核心要点是把原来应用于img标记的:hover伪类改在a标记上。
1 2 3 | a img {padding:5px;} a:link img, a:visited img {border:1px white solid;} a:hover img,a:active img {border:1px green solid;} |
如果对CSS选择器了解比较深入的读者,看懂这段代码是比较容易的,第1行的目的是使边框与图像之间有5个像素的空间,如果希望边框紧贴着图像,那么这行代码可以删除;第2行的作用是定义在鼠标没有经过时,设置边框为1像素宽白色实线,第3行的作用是定义当鼠标经过或者点击图像的时候,边框的颜色变为绿色。
因此需要读者必须熟悉CSS的选择器的含义和伪类的含义,特别是“后代选择器”的含义,在这里第2行和第3行中,把“img”写在“a:hover”的后面,就表示在a元素处于鼠标经过状态时,里面的图像被选中。
以上写法是完全符合标准CSS写法的,在Firefox中,也是可以正常显示的。然而,“倒霉催”的IE 6在这里又出问题了,它对于这种情况存在bug,好在已经有人找到了解决的方法,也就是在上面CSS代码的前面加一句话,最终的代码如下所示:
1 2 3 4 | a:hover {color: #FFF;} a img {padding:5px;} a:link img, a:visited img {border:1px white solid;} a:hover img,a:active img{ border:1px green solid;} |
这样,就可以同时适用用IE 6/IE7/Firefox了。
最后补充说明一点,如果你希望的效果是,平常状态没有边框,鼠标经过图像时出现某种颜色的边框,那么只需要将上面代码中,平常状态的边框颜色设置为背景的颜色,而不要去掉平常状态的边框,否则会发生跳动,视觉效果会变得不好。
此外,使用了“a”标记以后,鼠标经过图像时,鼠标指针会变成手的形状,如果希望仍然保持箭头指针,可以在“a:hover”中增加一条对鼠标指针的设置:“cursor:default;”即可。
需要仔细研究的读者可以下载本案例的页面代码:下载本文的案例源代码。
7,244


??何不这样写呐??
a:hover {color: #FFF;}
a img{border:1px white solid;}
即将a:link img 换成 a img
这两个有什么不一样的呐?
写上之后文字链接,会隐藏
我的网页里有许多图片,我只想让某些图片有这种效果,这样的话就要用选择符了,那我该怎么添加呢或在哪儿添加选择符呢?
xubaoguo,
用类别选择器即可,给需要的图片设置一个class,然后在针对这个class设置样式。如果不清楚,看一下CSS的相关视频教程,右侧栏中找到CSS相关的视频中有详细讲解。这是最基础的内容,相当于学英语的26个字母。
谢谢你啊!我已经成功了!还有个问题,内联式的定义方法离定义伪类还加大括号吗?
xubaoguo,
这个问题我曾经研究过,行内样式应该是无法使用伪类的。如果有人找到在行内样式中使用伪类的方法,可以告诉我一下。
请帮我解决下谢谢啊
a img {padding:5px;}
在IE6里也没有用啊….
a img {padding:5px;}
刚才试了在IE7 下看不出效果,但在Firefox下就看到效果了.
不清楚原因……..
zs,
文章最后我们给了一个案例源代码,你下载以后,在IE6中打开,我这里的IE6显示完全正常。边框和图像之间有5个像素的内边距。
如果实在不行,你换一台电脑试试,可能你的电脑上的IE6有点问题。
受益匪浅!继续支持你们。
niuch.cn,
谢谢你的留言!
o(∩_∩)o…哈哈
长期关注你的博客
呵呵 学习学习~
这个问题也是俺不解之处~
谢谢~
小巩,
这个问题是很有趣,代码很简单,但是却很能说明CSS的作用和原理。以后我们遇到读者提出来的一些比较有代表性的问题,我们就以这种“你问我答”的形式给出回答,希望对更多的读者有所帮助!