请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 4209|回复: 7

[教程] 100%点击区的滑动门 [复制链接]

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-2-10 14:47:28 |显示全部楼层


BLOG地址:http://www.planabc.net/article.asp?id=107

学习标准的朋友,一般都会在学习的过程中接触到CSS滑动门技术,或许大家也都看过这篇文章《CSS中的滑动门技术》,如果你还没接触过或还没看过上文或有点忘记内容,也没关系,可以点击上面的文章链接,先了解或温习一遍。

《CSS中的滑动门技术》一文中的滑动门例子,大家仔细实验,或许已经发现,链接区有9像素的盲点无法点击,而且在IE下,只能点击文字部分大小,不能点击整个按钮区块。而我们或许期望的是整个按钮区块都可以点击,并且不允许有盲点存在。

那我们又该如何去实现呢?下面我们一起来探讨一些解决方法:

首先为了方便我们先把《CSS中的滑动门技术》中的代码移过来:

XHTML部分:

  1. <div id="header">
  2.   <ul>
  3.     <li><a href="#">Home</a></li>
  4.     <li id="current"><a href="#">News</a></li>
  5.     <li><a href="#">Products</a></li>
  6.     <li><a href="#">About</a></li>
  7.     <li><a href="#">Contact</a></li>
  8.   </ul>
  9. </div>
复制代码


CSS部分:

  1. #header {
  2.   float:left;
  3.   width:100%;
  4.   background:#DAE0D2 url("bg.gif") repeat-x bottom;
  5.   font-size:93%;
  6.   line-height:normal;
  7. }
  8. #header ul {
  9.   margin:0;
  10.   padding:10px 10px 0;
  11.   list-style:none;
  12. }
  13. #header li {
  14.   float:left;
  15.   background:url("left.gif") no-repeat left top;
  16.   margin:0;
  17.   padding:0 0 0 9px;
  18. }
  19. #header a {
  20.   float:left;
  21.   display:block;
  22.   background:url("right.gif") no-repeat right top;
  23.   padding:5px 15px 4px 6px;
  24.   text-decoration:none;
  25.   font-weight:bold;
  26.   color:#765;
  27. }
  28. /* Commented Backslash Hack
  29.    hides rule from IE5-Mac \*/
  30. #header a {float:none;}
  31. /* End IE5-Mac hack */
  32. #header a:hover {
  33.   color:#333;
  34. }
  35. #header #current {
  36.   background-image:url("left_on.gif");
  37. }
  38. #header #current a {
  39.   background-image:url("right_on.gif");
  40.   color:#333;
  41.   padding-bottom:5px;
  42. }
复制代码


查看效果:

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



方法一:使用相对位置负外边距

为了消除滑动门的9px的盲点区域,设置li的外边距为9px(9px为left图片的宽度大小),li的背景为right图片,不重复,右上对齐。

  1. #header li {
  2.   background:url("right.gif") no-repeat right top;
  3.   margin-left:9px;
  4. }
复制代码


然后让a向左移动9px,覆盖掉盲点区域,如何移动呢?可对a使用相对位置(position:relative;),用负值移动9px(left:-9px;)。由于li的宽度等于a的宽度,所以当a位置相对左移9px时,li的右边就会多出9px的盲区,如何解决呢?我们使用a的负外边距来解决(margin-right:-9px;)。

  1. #header a {
  2.   position:relative;
  3.   left:-9px;
  4.   margin-right:-9px;
  5. }
复制代码


设置left图片为a的背景,不重复,左上对齐,并设置文字的内边距,注意现在a的区域为整个按钮的区域,所以padding-left和padding-right的值都应为15px。

  1. #header a {
  2.   background:url("left.gif") no-repeat left top;
  3.   padding:5px 15px 4px;
  4. }
复制代码


另注意一个细节:在IE中链接的区域为文字区域而不是按钮区域,而在其他对标准支持比较好的浏览器里是按钮区域。为了解决这个问题,我们给IE中的a指定个固定宽度来触发IE的layout(可以选用.1em,1px,1%等值),但这样一来a在其他对标准支持比较好的浏览器里则会识别这个宽度,我们选用对标准支持比较好的浏览器识别而IE6不识别的子选择器来让a的宽度变为auto。

  1. #header a {width:.1em;}
  2. #header > ul a {width:auto;}
复制代码


相对应的,对于current选择器里的图片位置也要做一点调整:

  1. #header #current {
  2.   background-image:url("right_on.gif");
  3. }
  4. #header #current a {
  5.   background-image:url("left_on.gif");
  6.   padding-bottom:5px;
  7. }
复制代码


让我们把CSS代码整理优化一下:

  1. #header li {
  2.   background:url("right.gif") no-repeat right top;
  3.   margin:0 0 0 9px;
  4. }
  5. #header a {
  6.   position:relative;
  7.   left:-9px;
  8.   margin-right:-9px;
  9.   width:.1em;
  10.   background:url("left.gif") no-repeat left top;
  11.   padding:5px 15px 4px;
  12. }
  13. #header > ul a {width:auto;}

  14. #header #current {
  15.   background-image:url("right_on.gif");
  16. }
  17. #header #current a {
  18.   background-image:url("left_on.gif");
  19.   padding-bottom:5px;
  20. }
复制代码


查看效果:

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



方法二:添加span标签

这个方法只能说是练习,实验用,真正布局的时候不推荐使用(仅是不推荐使用),毕竟添加了无语义的的span标签。

首先在结构代码中添加<span>标签

  1. <div id="header">
  2.   <ul>
  3.     <li><a href="#"><span>Home</span></a></li>
  4.     <li id="current"><a href="#"><span>News</span></a></li>
  5.     <li><a href="#"><span>Products</span></a></li>
  6.     <li><a href="#"><span>About</span></a></li>
  7.     <li><a href="#"><span>Contact</span></a></li>
  8.   </ul>
  9. </div>
复制代码


有朋友或许问为什么要添加<span>元素呢,其实理由很简单,我们通过a和span来模拟滑动门技术,而不是例子中的li和a,好处嘛,可以避免9px的盲点区域,因为<span>元素是包含在<a>元素里的。这样处理100%点击就相对容易很多。

由于使用a和span模拟,所以对于li我们不需要额外定义

  1. #header li{
  2.   float:left;
  3.   margin:0;
  4.   padding:0;
  5. }
复制代码


而原本对li设置的部分,我们转移到a中设置,设置a的背景为left图片,不重复,左上对齐。并给a设置左内边距9px(left图片的宽度),即span的显示不遮挡left图片。

  1. #header a {
  2.   background:url("left.gif") no-repeat left top;
  3.   padding-left:9px;
  4. }
复制代码


对于span,将显示原例子中a中的设置,设置span的背景为right图片,不重复,右上对齐。并在span的左内边距减去a设置的9px左内边距,即span的左内边距为6px。同样为了一致性,我们要解决IE5/Mac的问题。

  1. #header span {
  2.   float:left;
  3.   padding:5px 15px 4px 6px;
  4.   display:block;
  5.   background:url("right.gif") no-repeat right top;
  6. }

  7. /* Commented Backslash Hack hides rule from IE5-Mac \*/
  8. #header span {float:none;}
  9. /* End IE5-Mac hack */
复制代码


在此方法中我们依旧会碰到上例中碰到的在IE中链接的区域为文字区域而不是按钮区域问题。如何解决呢,当然你也可以用上例中的方法解决。不过我们还可以,给a浮动来触发IE下的layout。

  1. #header a {
  2.   float:left;
  3. }
复制代码


相对应的,对于current选择器里的图片位置也要做一点调整:

  1. #header #current a {
  2.   background-image:url("left_on.gif");
  3.   color:#333;
  4. }
  5.   
  6. #header #current span{
  7.   background-image:url("right_on.gif");
  8.   padding-bottom:5px;
  9. }
复制代码


让我们把CSS代码整理优化一下:

  1. #header li{
  2.   float:left;
  3.   margin:0;
  4.   padding:0;
  5. }
  6. #header a {
  7.   float:left;
  8.   display:block;
  9.   background:url("left.gif") no-repeat left top;
  10.   padding-left:9px;
  11. }
  12. #header span {
  13.   float:left;
  14.   padding:5px 15px 4px 6px;
  15.   display:block;
  16.   background:url("right.gif") no-repeat right top;
  17. }

  18. /* Commented Backslash Hack hides rule from IE5-Mac \*/
  19. #header span {float:none;}
  20. /* End IE5-Mac hack */

  21. #header #current a {
  22.   background-image:url("left_on.gif");
  23.   color:#333;
  24. }
  25.   
  26. #header #current span{
  27.   background-image:url("right_on.gif");
  28.   padding-bottom:5px;
  29. }
复制代码


查看效果:

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



参考文章:
http://www.w3cn.org/article/translate/2005/112.html
http://alistapart.com/articles/slidingdoors2/
http://www.zishu.cn/blogview.asp?logID=579

[ 本帖最后由 blankzheng 于 2007-2-10 18:06 编辑 ]
已有 1 人评分威望 收起 理由
小毅 + 2 精品文章

总评分: 威望 + 2   查看全部评分

个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
西部数码顶级域名注册商39元抢注!
XMSL 
帖子
10
体力
30
威望
0
发表于 2007-2-10 15:34:57 |显示全部楼层
讲解的挺细的。
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

clmake 
帖子
65
体力
154
威望
0
发表于 2007-2-11 07:48:13 |显示全部楼层
为什么没有滑动的效果??

使用道具 举报

凉爽 

walking man

钻石会员

帖子
7633
体力
7669
威望
31
发表于 2007-2-11 09:47:57 |显示全部楼层
好文章,谢谢楼主分享

使用道具 举报

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-2-11 11:14:03 |显示全部楼层
原帖由 clmake 于 2007-2-11 07:48 发表
为什么没有滑动的效果??


先了解什么是滑动门效果!

什么是滑动门技术?究其本意,就是根据文本自适应大小,进行滑动。我们可以用背景图片来营造这样的现象,一个在左一个在右,把这两个图片想象成可以滑动的门,当文本较少的时候,两个图片重叠的就多些,当文本较多的时候就滑动开,重叠的部分就少一些。
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

gy132 
帖子
19
体力
47
威望
0
发表于 2007-3-6 16:58:49 |显示全部楼层
标题太长, 还是会出现缺口
有没有什么好办法呢
我是不是太偏执了
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>CSS中滑动门技术</title>
  6. <style type="text/css" media="screen">
  7. body {
  8.   background:#fff;
  9.   margin:0;
  10.   padding:0;
  11.   color:#000;
  12.   font:x-small/1.5em Georgia,Serif;
  13.   voice-family: "\"}\""; voice-family:inherit;
  14.   font-size:small;
  15. }
  16. html>body {font-size:small;}

  17. #header {
  18.   float:left;
  19.   width:100%;
  20.   background:#DAE0D2 url("http://www.planabc.net/demo/images/bg.gif") repeat-x bottom;
  21.   font-size:93%;
  22.   line-height:normal;
  23. }
  24. #header ul {
  25.   margin:0;
  26.   padding:10px 10px 0;
  27.   list-style:none;
  28. }
  29. #header li{
  30.   float:left;
  31.   margin:0;
  32.   padding:0;
  33. }
  34. #header a {
  35.   float:left;
  36.   display:block;
  37.   background:url("http://www.planabc.net/demo/images/left.gif") no-repeat left top;
  38.   padding-left:9px;
  39.   text-decoration:none;
  40.   font-weight:bold;
  41.   color:#765;
  42. }
  43. #header span {
  44.    float:left;
  45.    padding:5px 15px 4px 6px;
  46.    display:block;
  47.    background:url("http://www.planabc.net/demo/images/right.gif") no-repeat right top;
  48. }

  49. /* Commented Backslash Hack hides rule from IE5-Mac \*/
  50. #header span {float:none;}
  51. /* End IE5-Mac hack */
  52. #header a:hover {
  53.   color:#333;
  54. }

  55. #header #current a {
  56.   background-image:url("http://www.planabc.net/demo/images/left_on.gif");
  57.   color:#333;
  58. }
  59.   
  60. #header #current span{
  61.   background-image:url("http://www.planabc.net/demo/images/right_on.gif");
  62.   padding-bottom:5px;
  63. }
  64. </style>
  65. </head>

  66. <body>
  67. <div id="header">
  68.   <ul>
  69.     <li><a href="#"><span>Home</span></a></li>
  70.     <li id="current"><a href="#"><span>News</span></a></li>
  71.     <li><a href="#"><span>Productsssssssssssssssssssssssssssssssssssssssssssssssssssssssss</span></a></li>
  72.     <li><a href="#"><span>About</span></a></li>
  73.     <li><a href="#"><span>Contact</span></a></li>
  74.   </ul>
  75. </div>
  76. </body>
  77. </html>
复制代码

使用道具 举报

blank 楼主

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-3-6 17:05:15 |显示全部楼层
标题太长肯定会出现空隙的,主要看你文字与最长“那扇门”长度的比较!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

帖子
46
体力
82
威望
0
发表于 2007-5-9 20:17:47 |显示全部楼层
我想在首页,实现这种效果。但是怎么解决调用新闻的问题?
<script language="JavaScript" src="News/JSNews.asp?cataid=A0080&words=15&num=9&pic=5&l_d=ok"></script> 这个调用新闻的代码要加在哪里?

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 10:25 , Processed in 0.105570 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部