【问题标题】:IE8 support for CSS Media QueryIE8 对 CSS 媒体查询的支持
【发布时间】:2011-08-11 18:53:42
【问题描述】:

IE8 不支持以下 CSS 媒体查询:

@import url("desktop.css") screen and (min-width: 768px);

如果不是,另一种写作方式是什么? 在 Firefox 中也可以正常工作。

下面的代码有问题吗?

@import url("desktop.css") screen; 
@import url("ipad.css") only screen and (device-width:768px);

【问题讨论】:

  • 对于那些想尝试使用媒体内联 css 并使用 response(.min).js 的人在这种情况下响应不起作用 - 它似乎适用于 .css 文件

标签: html css responsive-design internet-explorer-8 media-queries


【解决方案1】:

css3-mediaqueries-js 可能是您正在寻找的:此脚本模拟媒体查询。但是(来自脚本的站点)它“不适用于@imported 样式表(出于性能原因,您无论如何都不应该使用它)。也不会听<link><style> 的媒体属性元素”。

同样,您有更简单的Respond.js,它只启用min-widthmax-width 媒体查询。

【讨论】:

  • 为什么不将其标记为答案?非常适合我谢谢。顺便说一句,由于开销,您不应该使用 import css 查询。
  • 完美,正是我想要的!
  • 谢谢!!这个答案和 respond.js 为我节省了大量时间尝试在 ie8 中解决媒体查询。
  • 没关系 -> .js 应该包含在 .css 文件之后... xD
  • 响应有效,但 css3-mediaqueries 没有。我想这是因为 Respond 是自包含的,但是 css3-mediaqueries 依赖于一些 jQuery 函数,例如用户代理检测,并且该函数已被弃用和删除(请参阅 jQuery 文档)。
【解决方案2】:

IE9 之前的 Internet Explorer 版本不支持媒体查询

如果您正在为 IE8 用户寻找一种降级设计的方法,您可能会发现 IE 的条件注释很有帮助。使用它,您可以指定一个 IE 8/7/6 特定的样式表,它会覆盖以前的规则。

例如:

<link rel="stylesheet" type="text/css" media="all" href="style.css"/>
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ie.css"/>
<![endif]-->

这不允许在 IE8 中进行响应式设计,但可能是比使用 JS 插件更简单、更易于访问的解决方案。

【讨论】:

  • 我不明白条件样式表将如何解决响应式设计问题。
  • 我不明白这个解决方案如何解决 IE 中的响应式设计?例如,根据浏览器加载不同的样式表与根据浏览器大小使用不同的样式属性无关。
  • 我认为正确的答案是 IE8不支持媒体查询。这个答案有点说,但乍一看并不完全清楚。无论如何,我认为它确实有支持,而这个答案确实帮助我实现了其他方面。
  • 确实,这个答案不是响应式解决方案,但对我来说这是一个巨大的“但是”,事实是 IE8 没有在 iPad 或 android 平板电脑上使用。 IE8 可以在 2003 年到 2009 年的 XP/Vista PC 上使用,屏幕宽度主要在 1024 像素左右。 Windows Mobile 在 IE6 下,Windows Pone 在 IE9+ 下。这里真正的问题是问自己为 IE8 做出响应是否真的有用?
  • @GregoireD。是的。 因为有些人使用缩放查看网页。 在我的公司中,我们将页面格式化为 800x600 的 4 倍缩放,以方便访问。这使得屏幕像 400px 宽度。媒体查询对此非常有用,尽管您选择了浏览器(包括 IE8)。
【解决方案3】:

我找到的最佳解决方案是Respond.js,尤其是如果您主要关心的是确保您的响应式设计在 IE8 中有效。它在 min/gzip 压缩时非常轻巧,只有 1kb,您可以确保只有 IE8 客户端加载它:

<!--[if lt IE 9]>
<script src="respond.min.js"></script>
<![endif]-->

如果您使用引导程序,这也是推荐的方法:http://getbootstrap.com/getting-started/#support-ie8-ie9

【讨论】:

    【解决方案4】:

    IE8(及更低版本)和 3.5 之前的 Firefox 不支持媒体查询。 Safari 3.2 部分支持它。

    有一些变通方法使用 JavaScript 为这些浏览器添加媒体查询支持。试试这些:

    Media Queries jQuery plugin (only deals with max/min width)

    css3-mediaqueries-js – a library that aims to add media query support to non-supporting browsers

    【讨论】:

    • 好的..我刚刚在我的页面中包含了 css3-mediaqueries.js..它在 IE 中仍然不起作用..即媒体查询 "@import url("desktop.css") 不仅是屏幕和 (device-width:768px);"以及“@import url("desktop.css") not screen and (device-width:768px);"
    • 不确定我是否还需要做一些额外的事情......除了包括脚本......
    • 请注意,它不适用于导入的 css。试试这个:
    • 哦,好吧..我明白了。实际上在那种情况下,它可能对我没有帮助,因为我正在寻找一些东西而不在页面上做任何事情......即仅在 CSS 外部..
    • 该 googletrunk css3 js 脚本指定它仅适用于在 CSS 样式表内部使用的媒体查询,而不是在外部使用,例如“仅屏幕和....”。这意味着您必须将样式表统一为一个,并在其中执行您想要在外部执行的操作:@media screen and (max-width: 980px) {
    【解决方案5】:

    取自 css3mediaqueries.js 项目页面。

    注意: 不适用于 @import'ed 样式表(出于性能原因,无论如何都不应该使用它)。也不会监听&lt;link&gt;&lt;style&gt; 元素的媒体属性。

    【讨论】:

    • +1 告诉我这不适用于 @import'ed 样式表!为我的 WP 子主题节省了很多时间。
    【解决方案6】:

    使用 css3-mediaqueries-js 的一种简单方法是在结束正文标记之前包含以下内容:

    <!-- css3-mediaqueries.js for IE less than 9 -->
    <!--[if lt IE 9]>
    <script 
       src="//css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js">
    </script>
    <![endif]-->
    

    【讨论】:

      【解决方案7】:

      已编辑答案:IE 仅将屏幕和打印理解为导入媒体。与 import 语句一起提供的所有其他 CSS 会导致 IE8 忽略 import 语句。像 safari 或 mozilla 这样的 Geco 浏览器没有这个问题。

      【讨论】:

      • 我的 IE 未处于兼容模式。还有 IE 是否有其他替代品。基本上我只想选择除 768px 屏幕设备之外的所有内容。
      • 正如在您提供的链接上所讨论的,我尝试将文档类型设置为 ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 。 ..还是不行..
      • 如果我说得对,我不放心。您可以使用 JavaScript 来检测屏幕分辨率吗?使用 CSS 没有其他方法。你确定你没有任何相关的错误导致 min 被覆盖或忽略。一个得到的提示是开发者工具栏。有了它,您可以在不重新加载页面的情况下进行实时测试
      • 切换到怪癖模式的速度非常快,你检查了吗?这也可能导致不想要的结果。 Quirkmode 将覆盖您的文档类型。在一个超级小项目中测试你想要的东西以确保它不是相关的错误/结果也是上帝的做法
      • 好的..这是我现在更新的方式...我有 common.css,我在里面说; ... @import url("desktop.css") 屏幕; @import url("ipad.css") 仅屏幕和 (device-width:768px);不确定这种方法是否正确,但适用于桌面 (IE/FF) 和 iPad。这种方法会有问题吗?
      【解决方案8】:

      Media queries 在 IE8 及以下版本中根本不支持。


      基于 Javascript 的解决方法

      要添加对 IE8 的支持,您可以使用多种 JS 解决方案之一。例如,可以添加Respond 以添加仅对 IE8 的媒体查询支持,代码如下:

      <!--[if lt IE 9]>
      <script 
         src="respond.min.js">
      </script>
      <![endif]-->
      

      CSS Mediaqueries 是另一个做同样事情的库。将该库添加到您的 HTML 的代码将是相同的:

      <!--[if lt IE 9]>
      <script 
         src="css3-mediaqueries.js">
      </script>
      <![endif]-->
      

      另一种选择

      如果您不喜欢基于 JS 的解决方案,您还应该考虑添加一个仅限 IE

      <!--[if lt IE 9]>
      <link rel="stylesheet" type="text/css" media="all" href="style-ielt9.css"/>
      <![endif]-->
      

      注意:

      从技术上讲,这是另一种选择:使用CSS hacks 定位 IE

      【讨论】:

        【解决方案9】:

        在 Internet Explorer 8 之前,不支持媒体查询。但根据您的情况,您可以尝试使用条件 cmets 仅针对 Internet Explorer 8 及更低版本。您只需要使用适当的 CSS 文件架构即可。

        【讨论】:

          【解决方案10】:

          http://blog.keithclark.co.uk/wp-content/uploads/2012/11/ie-media-block-tests.php

          我使用了@media \0screen {},它在 REAL IE8 中运行良好。

          【讨论】:

          • 该块中定义的样式规则将在IE8中应用,其他浏览器将忽略它们
          • @Luca 另外,它不允许指定最小宽度、最大宽度等
          【解决方案11】:

          IE 直到 IE9 才添加媒体查询支持。因此,使用 IE8 时你就不走运了。

          【讨论】:

            猜你喜欢
            • 2011-12-08
            • 2012-02-20
            • 2013-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-03
            相关资源
            最近更新 更多