【问题标题】:How to replace or remove any specific CSS property with css file for IE8 and lower only using javascript?如何使用 IE8 的 css 文件替换或删除任何特定的 CSS 属性,并且仅使用 javascript 降低?
【发布时间】:2012-01-23 16:47:56
【问题描述】:

这是我只想要 IE8 及更低版本

的 css 代码
background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); / IE6-8 */

但如果用户使用的是 IE9,我要么想从 CSS 文件中删除此属性,要么想替换为 filter:none

是否可以使用 javascript、jquery?我知道我可以为 IE 使用单独的样式表,但只是好奇是否可以使用 javascript。

编辑:

是否可以像在 javascript 或 jquery 中一样

// If browser is IE9 

然后替换

filter: progid:DXImageTransform.Microsoft.gradient(values)

filter:none

【问题讨论】:

    标签: javascript jquery css internet-explorer


    【解决方案1】:

    我认为最简单的方法是使用条件代码在您的 HTML 元素上放置一个“IE”类...我想我最初是从 HTML5 样板文件http://html5boilerplate.com/

    <!doctype html>
    
    <!--[if lt IE 7 ]> <html class="no-js ie" lang="en"> <![endif]-->
    <!--[if IE 7 ]>    <html class="no-js ie" lang="en"> <![endif]-->
    <!--[if IE 8 ]>    <html class="no-js ie" lang="en"> <![endif]-->
    <!--[if (gte IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
    
    .bg-gradient {background: filter: 0, #999}
    
    .ie .bg-gradient {  
        background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); / IE6-8 */
    }
    

    然后简单地使用添加和删除类来删除“元素”类

    $(document).ready(function(){
        $('.element').addClass('bg-gradient');
    })
    

    过滤器不会由非 IE 浏览器呈现,因此为所有浏览器添加或删除它除了 IE 6-8 将具有与仅为 IE9 执行相同的效果。此外,我相信 ie9 支持多个背景属性,因此其他浏览器应该跳过第一个逗号分隔值——理论上——我还没有测试过。如果没有,只需使用常规的 css2 语法:

    .bg-gradient {background: filter: 0}
    

    【讨论】:

    • 我想要做的是,如果用户在 IE9 上打开网页,那么 javascript 代码应该在 css 中检测到 filter: progid:DXImageTransform.Microsoft.gradient* 并替换为 filter:none
    • 所以你想用javascript解析一个css文件?
    • 我会说这是答案,但有一些明显的细节。 “小于 IE9”是永远不必修改的查询。他应该继续这样做,而不是假设“IE9”就足够了。此外,等待 document.ready 要求闪烁。他最好把
    【解决方案2】:

    是的。它在 JavaScript 中是“可能”。但它需要在服务器端和客户端完成。

    在客户端,您需要检测它是否是 IE9,然后向服务器发送请求以获取解析 CSS 文件并替换所有出现的过滤器属性和设置的脚本(服务器端 JavaScript)将其发送到filter:none,然后将修改后的 CSS 文件提供给客户端。

    PS:恕我直言,这将是你能做的最糟糕的事情,我不推荐它。这只是为了回答您的好奇问题,如果这“在 JavaScript 中是可能的”。

    【讨论】:

      【解决方案3】:
      $(document).ready(function(){
          if ($.browser.msie && $.browser.version < 9) {
               $("#element").css("filter", "progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );")
          }
      })
      

      【讨论】:

      • 我想为所有不特定的元素或渐变做。
      【解决方案4】:

      使用条件 cmets 并为 IE8 及更低版本添加 css 文件
      here is a tutorial

      编辑:使用 jquery's browser check 并使用 javascript 应用 css
      使用jQuery.browser.version 可以获得版本

      【讨论】:

        【解决方案5】:

        我看到这里有不同的答案,但我个人会建议以下方法。

        有两个 CSS 类 - 一个包含 IE9 的样式,另一个包含所有其他浏览器的样式。

        如上述答案之一所述,使用 jQuery.browser API 来确定浏览器类型。 我建议您将此字符串“msie9”或“msie8”作为类添加到“body”或“html”元素。

        完成此操作后,您的 IE9 样式将是

        body.msie9 .ie9specificclass{ }

        对于其他人来说,这将是

        .specificClass{ }

        这将是一个干净的方法。

        【讨论】:

          猜你喜欢
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-27
          • 2014-04-24
          • 1970-01-01
          相关资源
          最近更新 更多