如何使 Bootstrap 响应式布局在 IE8 上工作

Posted

技术标签:

【中文标题】如何使 Bootstrap 响应式布局在 IE8 上工作【英文标题】:How to make Bootstrap responsive layout work on IE8 【发布时间】:2012-12-05 03:48:42 【问题描述】:

我已经搜索了一段时间,发现有些人成功了,但没有人提供任何代码示例。

我尝试了他们的建议,但对我没有用。根据建议,我尝试添加<meta http-equiv="X-UA-Compatible" content="IE=edge" />respond.jscss3-mediaqueries-js,但都没有帮助。

这是一个jsfiddle,如果您使用IE8 查看它,无论您的浏览器宽度如何,您都会看到ab 在同一行。

但如果您使用 Chrome、FF 或 IE9 或更高版本查看,您会看到它们在不同的行或单行上,具体取决于浏览器的宽度。

更新

我尝试一次取消注释其中一个(css3-mediaquery、html5shiv 和响应),但其中任何一个都没有成功。

<!DOCTYPE html>
<html lang="en">
<head>
    <title></title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/latest/css/bootstrap-combined.min.css" rel="stylesheet">
</head>

<body>

    <div class="container">
        <div class="row">
            <div class="span4">
                Lorem ipsum dolor sit amet, consectetur adipiscing elit.
            </div>
            <div class="span8">
                LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT.
            </div>
        </div>
    </div>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript" src="http://netdna.bootstrapcdn.com/twitter-bootstrap/latest/js/bootstrap.min.js"></script>

    <%--<script type="text/javascript" src="js/css3-mediaqueries.js"></script>--%>
    <%--<script type="text/javascript" src="js/html5shiv.js"></script>--%>
    <%--<script type="text/javascript" src="js/respond.js"></script>--%>

    </script>
</body>

</html>

【问题讨论】:

我一直使用 Html 5 元素,然后使用 html5shiv.js @Richlewis,感谢您的回复。我添加了 html5shiv.js 但仍然没有运气。也许我的其他代码有冲突?但是代码太少了。 问题是实际上有多少人在使用 IE6 到 IE8 的小宽度浏览器。我想的不多,也许我错了。 我不知道您是否可以做出这种假设。许多公司仍在使用 XP 作为他们的操作系统。 @uer2588853 问题是,如果您使用响应式引导程序,如果您使用 【参考方案1】:

IE 8 不支持开箱即用的媒体查询。

基于this question 和this question,您将需要使用css3-mediaqueries-js 或Respond 之类的扩展名。

【讨论】:

@RayCheng reactivewebdesign.net 在 IE8 上使用 respond.js 和 html5shiv 进行媒体查询。也许看看源代码并尝试对其进行调整以适应您的需求。 知道了!我必须同时使用html5shiverespond.js 在 IE8 中查看我的网站后我吓坏了,但添加 respond.js 立即修复了所有问题(我已经在使用 html5shive)。哇! 嗨,如给定的,我尝试添加 respondjs、meta 标签、css3-mediaqueries、html5shiv 但在我的情况下似乎没有任何效果,容器类没有出现在 IE8 中。正在使用 bootstrap 3。你能帮忙吗?【参考方案2】:

是的,它不支持 IE。我不是反引导程序,但我查看了引导程序框架的 css 代码。并发现,其他宽度没有定义为 %,我在其他博客文章中读到,您应该使用 % 作为宽度,这样它就会响应,这是真的。

当涉及到 ipad 时,引导程序使用的 css 代码不是来自媒体查询,它只是一个普通的 css 代码,没有在媒体查询中声明。它是固定宽度,您必须在 ie7 和 8 中使用。(如果您想使用 bootsrap,请先考虑一下。)

将来(或者现在)当有一个新的小工具不支持引导时。你的客户可能会回去解决这个问题。

我们都知道 ie7 和 8 仍然存在,所以它应该也可以在这两个旧浏览器上运行。

所以如果我是你,创建你自己的框架来满足你的站点/项目的所有要求。

但我不是反引导者,只是一个想法......因为我也在开发网站......

【讨论】:

我投了反对票,因为该建议在技术上不准确,解决方案也不实用。开发自己的框架?几乎总是有人已经把***做好了。现在值得花 20 个小时的研究,而不是以后必须修复其他解决方案已经解决的相同错误。另外:***.com/questions/17523921/… 似乎也是一个解决方案。我并不是说这是刻薄或粗鲁,但您的回答完全是糟糕的建议。【参考方案3】:

尝试使用html5shiv,它基本上是一个 HTML5 IE 启用脚本,应该可以在 IE 6,7 和 8 中启动引导程序。这也可以像这样直接热链接:

<!--[if lt IE 9]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

它必须包含在

元素之前(即在 中)

【讨论】:

我不推荐热链接源代码。如果您想绝对确定您拥有正确(工作)版本的文件,只需将其存储在您自己的服务器上... 我同意@jaapz,热链接到 Google 代码不再是一个好主意,因为我相信他们正在关闭。如果您必须进行热链接,请使用公开的免费 CDN,例如 oss.maxcdn.com (oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js)【参考方案4】:

是在 Internet Explorer 8 或更低的“容器”类宽度为 940 像素。但在 Internet Explorer9+、Firefox、Google Chrome 等中,'contianer' 类的宽度调用为 1170px。

Zurb 基金会也存在同样的问题。

如果假设我们的客户要求不考虑在 IE8 中查看的网站

【讨论】:

我使用.container width: 100%; ,仅适用于 IE lt 8。【参考方案5】:

这是我一直在研究的一个适用于 Bones 框架的解决方案。它可以很容易地与引导程序一起使用。

https://github.com/gamsim/ieresponsify

【讨论】:

【参考方案6】:

根据:https://drupal.org/node/2173441

要让您的 Bootstrap 站点在 IE8 上运行,您必须按照以下步骤操作:

    使用 Respond.js Module 安装 Respond.js 文件。 禁用任何 CDN 以加载引导文件。 使用Bootstrap Library Module在本地安装引导文件。 在/admin/config/development/performance 中聚合和压缩 CSS 文件

【讨论】:

【参考方案7】:

您的问题是尝试将 respond.js 与外部域上的 CSS 样式表一起使用。 Respond.js 将修复 IE6-IE8 的媒体查询。

https://github.com/scottjehl/Respond#cdnx-domain-setup

Respond.js 通过 AJAX 请求 CSS 的原始副本来工作,因此如果您将样式表托管在 CDN(或子域)上,则需要上传代理页面以启用跨域通信。

查看 cross-domain/example.html 的演示:

Upload cross-domain/respond-proxy.html to your external domain
Upload cross-domain/respond.proxy.gif to your origin domain
Reference the file(s) via <link /> element(s):

<!-- Respond.js proxy on external server -->
<link href="http://externalcdn.com/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />

<!-- Respond.js redirect location on local server -->
<link href="/path/to/respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />

<!-- Respond.js proxy script on local server -->
<script src="/path/to/respond.proxy.js"></script>

如果您在跨域设置时遇到问题,请确保 respond-proxy.html 没有附加查询字符串。

【讨论】:

【参考方案8】:

@Akshay Raje@Craig London 的建议解决了 IE 8 中的 CROSS DOMAIN css 加载问题。

只是为了添加它,respond.jsrespond.min.js 必须添加 before respond.proxy。 js 让设置生效。

【讨论】:

【参考方案9】:

在所有样式表“链接”标签之后以及在头标签关闭()之前尝试或遵循这一点,这意味着在“头”标签内的末尾。这种格式在所有网站中都有 99% 的工作。但是在某些drupal bootstrap 主题中不起作用。

记住全部保存在网站本地文件夹中,不要使用CDN。

 <!--[if lt IE 9]>
 <script type='text/javascript' src="/sites/all/themes/bootstrap_subtheme/js/css3-mediaqueries.js"></script> 
 <script type='text/javascript' src="/sites/all/themes/bootstrap_subtheme/js/html5.js"></script>
 <script type='text/javascript' src="/sites/all/themes/bootstrap_subtheme/js/respond.min.js"></script>
 <![endif]-->

【讨论】:

【参考方案10】:

人们经常使用来自内容交付网络(CDN,如 oss.maxcdn.com 或 cdnjs.cloudflare.com)的媒体查询(引导程序和其他文件)加载 CSS。 Respond.js 不适用于外部加载的 CSS,因此您必须从服务器加载 Bootstrap CSS(或其他带有媒体查询的 CSS)。

【讨论】:

以上是关于如何使 Bootstrap 响应式布局在 IE8 上工作的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap 响应式布局技术教程简介

BootStrap 响应式布局技术教程简介

layui栅格布局适配屏幕、适配ie8

响应式布局

HTML5 respond.js 解决IE6~8的响应式布局问题

当宽度属性消失时,如何使 Bootstrap 响应式 div 转换