让IE6支持position:fixed的方法,CSS expression与JavaScript eval讲解_html/css_WEB-ITnose

  做吸顶效果或是固定效果时,使用position:fixed无非是最方便的,可是万恶的ie6是没有fixed这个属性值的,而我们要使ie6能够像fixed一样固定在浏览器中的某个位置,使用onscroll改变top值是一个方法,但如果滚轮滚的快,会出现卡闪烁情况。而如高级浏览器如果也这样用,那显然有失大雅,除非js中判断浏览器版本。但是在这里笔者要讲解的是使用css完成fixed效果。
  千言万语不及实例一个:

  以上是笔者在IETester下测试IE6的fixed,注意看滚动条。其中导航采用的是position:fixed。
核心代码如下:

1 .nav {    /* nav为导航栏 */2     position:fixed;3     _position: absolute;4     top:0;5     _top:expression(eval(documentElement.scrollTop));6     background: #FAA;7 }

登录后复制

  使用到了hack技术,下划线所代表的属性只有IE6以下识别。(因为只有IE6以下不支持fixed,所以特殊处理)
以上效果即可实现IE6下的fixed效果。而要理解_top:expression(eval(documentElement.scrollTop));不太容易,需要理解expression及eval的含义及用法,也是下面要讲解的内容。

  expression为IE特有的属性,支持IE5及以上版本,用来在CSS中书写JavaScript代码,也就是说expression的括号内可以是一段JavaScript代码。

eval表示执行字符串内容的语句或表达式,并返回其结果。

立即学习“Java免费学习笔记(深入)”;

用法:eval(codes);

参数:

codes — 字符串形式的表达式或语句

返回值:

如果没有参数,返回undefined 如果有返回值将返回此值,否则返回undefined 如果为表达式,返回表达式的值 如果为语句返回语句的值 如果为多条语句或表达式返回最后一条语句的值

  了解expression及eval后,_top:expression(eval(documentElement.scrollTop));就不难理解了。documentElement.scrollTop为IE下获取滚动条的位置,而top值就相当于滚动条距离顶部的位置。如果scrollTop值改变,_top也就相应改变。
  而为什么要使用eval呢?因为documentElement.scrollTop实际就是一条语句,并没有返回值,相当于在JS中执行了a=1后没执行任何操作。而我们要拿到documentElement.scrollTop值就需要将其返回,而只需要使用eval即可。
  这样一来,所有浏览器器都可以有fixed的效果了,但是你会发现IE6下滚动鼠标滚轮时仍然会出现闪烁现象,这是因为当滚动条滚动或浏览器大小改变时,IE6奇葩的渲染引擎会重置所有内容并重画页面,因此会出现振动或闪烁的问题。而使用backgroune-attachment:fixed;添加至html或body会强制页面重画前先加载CSS,因为重画前处理的CSS,也就是重画前你的表达式就已经改变了,不像之前的重画之后才改变。这样当你鼠标滚动的时候就不会出现闪烁的现象了。这样就完全达成了fixed的效果。代码如下:
body { _background: url(about: blank) fixed}

总结:
IE6下不能实现fixed,因此使用absolute模拟fixed,因此需要使用JS。而只针对IE6进行处理,可在CSS中通过IE特有的expresstion写JavaScript,从而实时改变top值达到模拟fixed的效果。而IE6滚动或调整浏览器大小则重载CSS,因此使用在body中使用background-attachment:fixed使页面重新渲染前加载CSS。

代码:

 1 body {_background: url(about:blank) fixed} 2  3 .nav { 4  5     position: fixed; 6  7     _position: absolute; 8  9     top: 0;10 11     _top: expression(eval(documentElement.scrollTop));    12 13     // top值为想要固定定位的位置,设置left同理,设置right与bottom需要通过scrollLeft及scrollTop进行计算,如下注释14 15     // 固定左:_left:expression(eval(documentElement.scrollLeft));16 17     // 固定右:_left:expression(eval(documentElement.scrollLeft + documentElement.clientWidth - this.offsetWidth));18 19     // 固定下:_top:expression(eval(documentElement.scrollTop + documentElement.clientHeight - this.offsetHeight));20 21 }

登录后复制

  以上就是IE6下解决fixed方法的完美方案。如有问题或疑问请留言。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3092215.html

(0)
上一篇 2025年3月28日 13:49:21
下一篇 2025年3月28日 13:49:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 详解js在html中的加载执行顺序

    js在html中的加载执行顺序 1.加载顺序:引入标记的出现顺序, 页面上的js代码是js的一部分,所以Javascript在页面装载时执行的顺序就是其引入标记的出现顺序, 标记里面的或者通过src引入的外部JS,都是按照其语句出现的顺序执…

    编程技术 2025年4月4日
    100
  • HTML和JS实现简单的计算器

    HTML和JS实现计算器功能的也是很容易的,本文主要和大家分享HTML和JS实现简单的计算器,希望能帮助到大家。 下面是代码:    nbsp;html>无标题文档 var result=””; function jisuan(num…

    编程技术 2025年4月4日
    100
  • 实现在HTML页面加载完毕后运行js方法

    本文主要和大家分享实现在HTML页面加载完毕后运行js方法,主要以代码的方法和大家分享,希望能帮助到大家。 Js方法: window.onload=function (){ var userName=”xiaoming”; alert(us…

    编程技术 2025年4月4日
    100
  • php无刷新提交表单另一种方法

    通常对于无刷新提交表单,我们都是运用ajax实现的。前段时间了解到另一种无刷新提交表单的方法。现在整理出来分享给大家。 html页面: nbsp;HTML>        无刷新提交表单     ul{ list-style-type…

    编程技术 2025年4月4日
    100
  • JavaScript实现获取远程的html到当前页面中

    今天做个项目,需要在当前的html页面中引用一个远程的html页面,百度了一下,发现一个非常好用的代码,这里分享给大家,有相同需求的小伙伴可以来看看 html代码 登录后复制 立即学习“Java免费学习笔记(深入)”; javascript…

    编程技术 2025年4月4日
    200
  • JavaScript模块优化

    给大家分享一下如何才能开发出更好的javascript模块和功能,有兴趣的朋友参考学习下吧。 不少人都曾经在 npm 上发布过自己开发的 JavaScript 模块,而在使用一些模块的过程中,我经常产生“这个模块很有用,但如果能 xxx 就…

    编程技术 2025年4月4日
    100
  • 使用workerman实现在线聊天的方法及原理解析

    使用workerman实现在线聊天的方法及原理解析 随着互联网的发展和智能手机的普及,在线聊天已成为人们生活中不可或缺的一部分。无论是社交媒体上的即时消息还是企业内部的团队协作,都需要一种可靠且高效的在线聊天系统。workerman是一个基…

    2025年4月2日
    200
  • Workerman文档中的服务器集群实现方法

    Workerman是一个高性能的PHP Socket框架,可以使PHP更加高效地处理异步网络通信。在Workerman的文档中,有关于服务器集群实现方法的详细说明和代码示例。 为了实现服务器集群,首先需要明确服务器集群的概念。服务器集群是将…

    2025年4月2日
    100
  • Laravel监控错误的重要性及方法

    Laravel监控错误的重要性及方法 在开发Web应用程序过程中,错误是不可避免的。当用户遇到错误时,他们往往感到困惑和失望,这可能会影响他们对你的应用程序的印象。因此,在开发和部署Laravel应用程序时,监控错误并及时解决它们是至关重要…

    2025年4月2日
    100
  • 深入了解Laravel中的success方法

    当我们在使用Laravel框架开发应用程序时,经常会遇到需要在操作成功后显示提示信息的情况。在这种情况下,我们可以使用Laravel中的success方法来快速且方便地实现。本文将深入探讨Laravel中success方法的使用,包括其功能…

    2025年4月2日
    200

发表回复

登录后才能评论