
翻译整理:西米CC
几个月前,我的一个电子商务客户要求在他的网站上实现商品的图片和描述响应鼠标经过切换的效果。在CSS里这个效果做起来并不是很难,在示例页面中大家可以看到大致的效果,基本都是纯XHTML和CSS实现的,只是在对IE6的兼容上需要额外做一点点工作。
>>> 浏览本教程效果示例页面
Markup – XHML代码
为了达到效果,每个产品的信息必须划分为两块,其一是默认显示的产品的图片,其二是产品的文本描述,它只有在鼠标经过的时候才会替代图片显示出来:

- <a CLASS="show" HREF="..." title="..."><img SRC="001.jpg" ALT="..." /></a>
- <div CLASS="hide">
- <a HREF="...">朝花夕拾 - DIV+CSS实战系列视频
- <p>本教程通过视频讲解如何一步步构建一张DIV+CSS网页...</p>
- </a>
- </div>
在代码中大家可以看到,产品图片被放置在一个应用了类样式show的容器中,而描述的文本则放置在类样式为hide的DIV容器中。当我们有多个不同产品时,只需将相同结构的多个代码段嵌套在无序列表中即可。
CSS代码
- #work {
- list-style:none;
- margin:0;
- padding:0;
- }
- #work li {
- float:left;
- display:block;
- width:235px;
- margin:10px;
- display:inline;
- padding:3px;
- background:#fff;
- border:1px solid #cad789;
- height:154px;
- }
- #work li a {
- border:none;
- }
- #work p {
- margin-bottom:0;
- }
非常简单的样式表代码,我们把ID为work的无序列表中的list项目设置为左浮动,并设置其尺寸为255×154像素,定义margin实现间隔。现在我们来添加最关键的CSS代码,它们将在效果的实现上起到最重要的作用:
- #work li .show{
- display:block;
- width:235px;
- height:154px;
- }
- #work li .hide {
- color:#d4df9d;
- text-align: left;
- height: 0;
- overflow: hidden;
- background:#687b00;
- }
上面的代码有什么作用呢?height:0;和overflow: hidden;使得无序列表项中类样式为hide的容器默认不显示,可视的元素就只有类样式为show的图片容器。这两条规则主要是定义最终效果的默认状态,下面我们来看看当鼠标经过时,如何实现图文的切换:
- #work li:hover .hide{
- cursor: pointer;
- height: 133px;
- padding:10px;
- width:215px;
- }
- #work li:hover .show {
- height: 0;
- overflow: hidden;
- }
在这里我们利用伪类#work li:hover来设置当鼠标经过hide容器时,其中元素一些属性上的变化。这时候我们把原来应用在hide类样式上的height:0; 和overflow: hidden;转移到了show样式中,而hide容器的高度变化为153像素。现在效果差不多完成了,大家可以浏览示例页面。
IE6中的兼容性完善
我们的示例页面能在Firefox, Safari, IE7中正常的展示效果,但是在IE6下却不行,因为它只支持链接元素a的:hover伪类,也就是说#work li:hover的选择符在IE6中是无效的。那么这里我们就需要一些完善工作,首先下载一个简单的JS脚本,放置在网页所在目录下,然后就是在网页的HEAD区添加一段JS代码:
- <!-- add hover class to #work li if the mouse over -->
- <!--[if lte IE 7]>
- <script type="text/javascript" src="jquery-1.2.3.min.js"></script>
- <script type="text/javascript">$(function() {
- $('#work li').mouseover
- (function(){
- $(this).addClass('over');
- });
- $('#work li&').mouseout
- (function(){
- $(this).removeClass('over');
- });
- });
- </script>
- <![endif]-->
- ?>
上述的脚本中,我们为无序列表的每个列表项添加了一个名为over的类样式,代码首位的注释用于确保这段JS只在IE6或更老版本的IE中执行。实际上代码的作用就是让#work li.over .hide与#work li:hover .hide有着相同的效果,所以我们最终的CSS代码如下:
- #work li:hover .hide, #work li.over .hide{
- cursor: pointer;
- height: 133px;
- padding:10px;
- width:215px;
- }
- #work li:hover .show, #work li.over .show {
- height: 0;
- overflow: hidden;
- }



