打印

[教程] 仿6room网站图片链接效果

仿6room网站图片链接效果



在本人上一篇教程《彻底弄懂CSS盒子模式五(定位强化练习)》有讲到一个很酷的链接面板提示的实例制作,那时主要是用到display方法来实现对象的显示和隐藏的,但是后来了解到那种方法对搜索引擎不友好,一些特别的阅读设备会读不到信息,比如盲人阅读器等等,所以今天又写了一个类似的教程,这次是用margin来实现,本实例实现方法简单但却很实用,实例做的是仿6room(著名web2.0视频网站)图片链接效果,下面请先运行代码看看最终实现的效果。

 提示:您可以先修改部分代码再运行
一、实例实现功能介绍
默认情况下,一个带有一定边框的图片链接放置在网页中,图片链接左下角还有一个“+”图形,意为添加到收藏夹或者视频播放列表吧(我这里没有加入脚本,只讲界面的实现),当鼠标移到链接图片区域上面时,会出现一个半透明链接简要说明层盖在图片上面,说明层的文字前边还有一个小的网站LOGO,说明层周围还会跟着出现一条黄色的边框,同时鼠标移到左下角“+”图形上,它的颜色会发生变化,而且像这样的结构一旦做好了,就可以随意在网页上任意地方安排它们位置,效果不会发生改变。下面是实例效果截图。


  

实例效果截图



二、结构和样式代码
1.结构
复制内容到剪贴板
代码:
<div class="blueidea"><a href="#"><img  src="http://www.hsptc.com/cssImg/pic1.jpg" alt="" /><span> 80万网民追捧全球最性感女主播</span></a><em title="我要收藏"></em></div>
<div class="blueidea"><a href="#"><img  src="http://www.hsptc.com/cssImg/pic2.jpg" alt="" /><span>根据韩寒作品改编电视剧《三重门》</span></a><em title="我要收藏"></em></div>
<div class="blueidea"><a href="#"><img  src="http://www.hsptc.com/cssImg/pic3.jpg" alt="" /><span>CG少女(3维立体,比真人还漂亮)</span></a><em title="我要收藏"></em></div>
2.样式
复制内容到剪贴板
代码:
*{
    margin:0px;
    padding:0px;
}
body {
    margin:20px;
    font-size: 12px;
    line-height:18px;
}
.blueidea {
    background-color: #CCC;
    margin:5px;/*因为我一共做了三个实例,等一下排列使它们不会靠在一起*/
    padding: 3px;/*形成边框装饰,同时等一下也方便控制其子元素位置,所以我没有用BORDER*/
    height: 96px;/*与图片等高*/
    width: 128px;
    position: relative;
    float:left;/*让三个实例横向排列*/
}
.blueidea a img {
    height: 96px;
    width: 128px;
    border:none;
}
.blueidea a span {
    margin-top:-9000px;/*初始化对象不可见,这里不用display: none,因为display: none对搜索引擎不友好*/
    margin-left:-9000px;
    position: absolute;
}
.blueidea a:hover {
    background-color: #FFF;/*IE7以下版本A状态伪类bug*/
}
.blueidea a:hover span {
    height: 88px;
    width: 128px;
    position: absolute;
    left: 0px;
    top: 0px;
    border:1px solid #F90;
    padding: 10px 2px 2px 2px;/*让说明文字不要太靠上边界*/
    background:#FFF url(http://www.hsptc.com/cssImg/blueidea.gif) no-repeat 5px 10px;/*LOGO图片定位*/
    text-indent: 28px;/*文本缩进28px,避免与背景LOGO叠加*/
    filter:alpha(opacity=90);/*CSS透明度滤镜*/
    opacity:0.9;/*针对Mozilla浏览器CSS透明度滤镜*/
    display: block;
    text-decoration: none;/*去除说明文字链接下划线*/
    cursor:pointer; /*让光标显示手形*/
    margin:0px;/*重定位文字说明层回到正常位置*/
}
.blueidea em {
    position:absolute;
    left:5px;
    bottom:5px;
    width:25px;
    height:25px;
    cursor:pointer;
    background:url(http://www.hsptc.com/cssImg/blueidea1.gif) no-repeat;
}
.blueidea em:hover {
    background-image:url(http://www.hsptc.com/cssImg/blueidea2.gif) ;/*"+"图片鼠标滑过背景变换,只有标准浏览器起作用,IE7以下版本BUG*/
}
三、分析实现方法
此实例效果一定会用到层的叠加和相对、绝对定位,而且要应用CSS透明度滤镜,这是应该首先会想到的。它的原理是让两个层完美吻合的叠加,一个层默认时隐藏掉,用鼠标事件触发显示,另外左下角的“+”图形默认情况没有隐藏掉,要把它独立出来处理。
1.默认情况下,如果里面的大图片没有下载完,会有一块灰色的色块,图形下载完了,在图片四周会有灰色的边界,所以在这里组织一个有3px填充的大盒子,内容区块大小与图片大小相等,加上灰色的背景,设置其定位方式为相对定位,等一下其内部元素就可以以它为参考进行绝对定位,所以用到下面样式:
复制内容到剪贴板
代码:
.blueidea {
    background-color: #CCC;
    margin:5px;/*因为我一共做了三个实例,等一下排列使它们不会靠在一起*/
    padding: 3px;/*形成边框装饰,同时等一下也方便控制其子元素位置,所以我没有用BORDER*/
    height: 96px;/*与图片等高*/
    width: 128px;
    position: relative;
    float:left;/*让三个实例横向排列*/
}
2.限定图片大小,并不显示边框,用到下面样式:
复制内容到剪贴板
代码:
.blueidea a img {
    height: 96px;
    width: 128px;
    border:none;
}
3.组织文字说明图层,让其大小比下层稍小(因为我安排了1px的边框),在这个盒子内,让其上边有一定填充(不要用边界,因为我们等一下要用到半透明效果,这个效果是覆盖下面整个区域的),让文字说明不会靠着上边,再让文字缩进一段距离,主要是为了方便等一下对LOGO做背景精确定位到文字说明前,文字不会与LOGO重叠在一起。(在做的时候可以多次精细调节,直至达到满意为止)。接着为这一图层加上个半透明滤镜效果,并重新给出一个margin值,等一下我们要用这种方法来初始化说明图层移出可视区域。用到下面样式:
复制内容到剪贴板
代码:
.blueidea a:hover span {
    height: 88px;
    width: 128px;
    position: absolute;
    left: 0px;
    top: 0px;
    border:1px solid #F90;
    padding: 10px 2px 2px 2px;/*让说明文字不要太靠上边界*/
    background:#FFF url(http://www.hsptc.com/cssImg/blueidea.gif) no-repeat 5px 10px;/*LOGO图片定位*/
    text-indent: 28px;/*文本缩进28px,避免与背景LOGO叠加*/
    filter:alpha(opacity=90);/*CSS透明度滤镜*/
    opacity:0.9;/*针对Mozilla浏览器CSS透明度滤镜*/
    display: block;
    text-decoration: none;/*去除说明文字链接下划线*/
    cursor:pointer; /*让光标显示手形*/
    margin:0px;/*重定位文字说明层回到正常位置*/
}
4.隐藏说明图层,这里用到margin无限大负值来把元素移出可视区域,我们把这一步放在后面做,不然一开始把它移出去了,你怎么在做的过程中看文字说明层是否与下一层吻合好,是吧。这里用到样式:
复制内容到剪贴板
代码:
.blueidea a span {
    margin-top:-9000px;/*初始化对象不可见,这里不用display: none,因为display: none对搜索引擎不友好*/
    margin-left:-9000px;
    position: absolute;
}
5.定位“+”图形,这里我们要注意一点是,不要把它也安排在<a></a>内,因为测试表明它是可以独立响应的,不是与文字说明层一起响应的。这里我用到背景的变换效果,但是这个效果只能在像FF这样的标准浏览器中生效,这是因为IE7以下版本A状态伪类bug缘故,当然IE7是支持的了,IE现在已逐渐向标准靠拢了,这可是标准网页设计者的福音。这里用到样式:
复制内容到剪贴板
代码:
.blueidea em {
    position:absolute;
    left:5px;
    bottom:5px;
    width:25px;
    height:25px;
    cursor:pointer;
    background:url(http://www.hsptc.com/cssImg/blueidea1.gif) no-repeat;
}
.blueidea em:hover {
    background-image:url(http://www.hsptc.com/cssImg/blueidea2.gif) ;/*"+"图片鼠标滑过背景变换,只有标准浏览器起作用,IE7以下版本BUG*/
}
6.解决IE7以下版本A状态伪类bug,加入一条如下样式:
复制内容到剪贴板
代码:
.blueidea a:hover {
    background-color: #FFF;/*IE7以下版本A状态伪类bug*/
}
四、不足
此实例的不足是图片左下角的“+”图形变换效果在IE7以下版本浏览器中失效,本人还没有想到较好的解决办法,因为我的要求是:只能纯CSS实现,尽量少用样式代码,同时保证做出来的实例不随它在网页中出现位置的变化而改变,这样“+”元素一定会用到绝对定位,同时其父级采用相对定位,而且要让这种背景变换效果在IE7以下版本生效,只能用A标签,现在问题是父元素内已出现一次A了,那么在样式控制时又会出现样式的继承作用,从而导致效果变乱,如果你能有更好的实现方法一定要记得写出来与大家分享哦。

[ 本帖最后由 webflash 于 2007-8-20 09:54 编辑 ]
附件: 您所在的用户组无法下载或查看附件,您需要注册/登录后才能查看!
本帖最近评分记录
  • blank 威望 +2 讲解很详细,谢谢分享 2007-4-6 09:05
我认为这个需求主要涉及效果,所以应该使用Javascript来实现其行为,而不是使用样式所带的简单hover来hack。
使用“纯CSS的实现”已经算是一种误解,当然也可以算是对技术一种执着的追求:)
改个签名真难啊……
猫是介个效果我以前做过类似的。。现在我的小站上也有类似的效果

其实只利用a.className 就可以简单搞定。

纯CSS的实现也不是说不好。发挥CSS的无限可能。
大家都曾经过。。
不过我现在不大这样干了。
嗷嗷囩:珍惜生命 远离Firefox
我曾经写了本书 叫《Web标准设计》,不过有点过时了。
感覺代碼多了點,呵呵,不過效果好就行
支持正體字,不只有心

顶一下

吼吼,写得这么好竟然没人顶,我汗,我顶一个!强烈欣赏楼主的无私讲解,很细致啊!

TOP

貌似那个+是有点问题。非IE7
我一直哭一直哭,哭我没鞋穿。直到有一天我看到一个人,他连脚也没有……

TOP

引用:
原帖由 一滩死水 于 2007-4-6 14:06 发表
貌似那个+是有点问题。非IE7
引用:
四、不足
此实例的不足是图片左下角的“+”图形变换效果在IE7以下版本浏览器中失效,本人还没有想到较好的解决办法,因为我的要求是:只能纯CSS实现,尽量少用样式代码,同时保证做出来的实例不随它在网页中出现位置的变化而改变,这样“+”元素一定会用到绝对定位,同时其父级采用相对定位,而且要让这种背景变换效果在IE7以下版本生效,只能用A标签,现在问题是父元素内已出现一次A了,那么在样式控制时又会出现样式的继承作用,从而导致效果变乱,如果你能有更好的实现方法一定要记得写出来与大家分享哦。
看来兄台没有看教程,只是看了一下效果!

TOP

像不像,请点评下:

 提示:您可以先修改部分代码再运行
[ 本帖最后由 winhero_charles 于 2007-4-8 11:54 编辑 ]

TOP

IE7以下的版本,只有a 才有:hover,是故,
作者才会发现"+"在IE7以下的版本中,是不变换的

TOP

这个应该已经属于行为层了吧。。。
jgwy-esnak

TOP

修正一下,上午发出的效果在FF下变形,修正如下:

 提示:您可以先修改部分代码再运行

TOP

引用:
原帖由 winhero_charles 于 2007-4-8 11:52 发表
像不像,请点评下:
哈哈,你做的不够认真,看得也不够认真吧。我们实际要的结果是“+”独立出来的,不随链接A一起响应的,我们要在不触发链接的情况下就能执行“+”号对应的行为。
引用:
另外左下角的“+”图形默认情况没有隐藏掉,要把它独立出来处理。
引用:
5.定位“+”图形,这里我们要注意一点是,不要把它也安排在<a></a>内,因为测试表明它是可以独立响应的,不是与文字说明层一起响应的。这里我用到背景的变换效果,但是这个效果只能在像FF这样的标准浏览器中生效,这是因为IE7以下版本A状态伪类bug缘故,当然IE7是支持的了,IE现在已逐渐向标准靠拢了,这可是标准网页设计者的福音。

TOP

文档:

 提示:您可以先修改部分代码再运行
表现:

 提示:您可以先修改部分代码再运行

TOP

我想问一下,大家是否注意到一个问题,在透明层中的内容也是透明的,在opacity设为90,不明显,但如果降低这个数值,就能看出来了,我考虑的方案是透明层单独做一个,和内容分离开来

TOP

还不错

TOP