HTML布局实战(1)-简单的半透明浮层

2010年9月2日 | 标签: , ,

今天在写页面的时候,遇到一个效果,乍一看挺简单的,可实现过程却费了一番周折,最后还不禁完美。年纪大了,脑子也不大好转, 乘着现在还没有忘记,整理下思路赶紧记下来。

其实效果很简单,如图所示:

鼠标触发效果

默认显示的是一张图片和关注信息,当鼠标浮动到图片上时,显示一个半透明的浮层,并且有两个链接。

当时的第一感觉,这个效果可以用a:hover来实现半透明层的显示隐藏。如果层中只是纯文字,那就可以这样写结构,但现在层里是两个操作链接,html嵌套规则是绝对不允许a标签再嵌套a标签的;如果换其他标签用onclick事件来处理,这样又似乎不太语义化,看来这弹出的效果只能用js来实现了。

其实页面的结构很简单:

  1. <div class="user_info">
  2.     <a href="#"><img alt="" src="images/pic.jpg" /></a>
  3.     <p><strong>1234</strong>人关注</p>
  4.     <p><a class="attention" href="#">关注</a></p>
  5.     <div class="operate"><a href="#">TA申请的学校</a><a href="#">TA获得的offer</a></div>
  6. </div>

显示隐藏效果这里就用最简单的方法来实现:

  1. <script type="text/javascript">
  2.     function openVessel(strId)
  3.     {
  4.         document.getElementById(strId).style.display = "block";
  5.     }
  6.     function closeVessel(strId)
  7.     {
  8.         document.getElementById(strId).style.display = "none";
  9.     }
  10. </script>

稍作修改后代码如下:

  1. <div class="user_info"><a onmouseout="closeVessel('operate');" onmouseover="openVessel('operate');" href="#"><img alt="" src="images/pic.jpg" /></a>
  2. <p><strong>1234</strong>人关注</p>
  3. <p><a class="attention" href="#">关注</a></p>
  4. <div id="operate" class="operate" onmouseout="closeVessel('operate');"><a href="#">TA申请的学校</a><a href="#">TA获得的offer</a></div>
  5. </div>

加上css样式后浏览下效果:

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

这样虽然实现了效果,但感觉很怪,但鼠标触发图片,显示弹出层后,鼠标悬浮在层上的指针有明显的晃动感,点击链接也感觉很不舒服,为什么这样呢?应该是与前面的onmouseover事件有关系。这样肯定不行,如何能改进呢?

对了,还有效果没有实现,浮层是半透明的,这个貌似是很简单的,用现成的代码试试。

  1. .css {...; background:#000; filter:alpha(opacity=50); -ms-filter:"alpha(opacity=50)"; -moz-opacity:0.5; -khtml-opacity: 0.5; opacity:0.5;...}

透明效果实现了,但有个问题,透明层里面的元素包括文字部分也变成半透明的,这样还是不完美。再想想,如果我们将文字部分和半透明层分开,然后像photoshop中的图层一样将各部分叠加在一起,正好可以实现我们的效果;这样的缺点就是增加了多余的代码,页面结构更复杂了。

鼠标指针晃动感和点击链接困难的问题还是没有很好的解决,不过可以使用个偷懒的方法,将a标签中的onmouseover和onmouseout事件放在最外层的div容器中,当然最根本的原因是自己的js水平太懒,赶紧学习,争取能早日将这个问题解决掉。如果哪位朋友有更好的方法,欢迎指教。

这是完整的代码:

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

==============================================

后记:

其实这篇东西是在一个月之前的,写到一半没有完成就这样放在草稿箱里一个月过去了。。。今天整理后台的时候才发现,赶紧发出来,真是惭愧。。。

  1. 2011年10月26日09:53

    不错 可以学习一下

  2. 晕了晕了,最不适合代码了、

  3. 2011年9月1日14:16

    赞一个,走人!

  4. 2011年3月20日08:46

    这个很强,学习了。加油。

  5. 2011年2月23日19:33

    学习中,感谢博主

  6. 2011年1月9日06:17

    画面画的好丑啊

  7. 2010年12月28日11:38

    写主要就是为了兼容该死的ie6

  8. 2010年12月23日13:04

    很实用很炫啊!不知道在IE6下是否支持。

  9. 2010年12月10日10:50

    这个貌似有点不懂了。

  10. 2010年12月1日00:17

    看看学习学习了·

  11. 2010年11月30日17:27

    实战效果啊! :shock:

  12. 2010年11月30日13:37

    这个似乎拿来作为广告展示还是很不错的

  13. 唐人游博客活动
    2010年11月30日09:30

    ;-) 尊厉害,先收藏下,我改天根据教程来实战下

    邀请你参加一个针对wordpress主题的博主有奖征文活动,欢迎您参加!

    具体的活动地址详见:http://happy.uc55.com/www/bloger/

  14. 2010年11月28日21:28

    :mrgreen: JS的就不会了,JQ写出这个效果倒是不难。

  15. 2010年10月13日15:20

    效果不错,不懂javascript!

  16. 2010年9月24日23:10

    关注一下。。。。。。。。。。。。。。。。。。。

  17. 2010年9月20日16:45

    博主好厉害。。。 :shock:

  18. 2010年9月8日19:37

    好实战,有劲够味!