4

有没有办法调用样式表,只有在它不可用的情况下,才从另一个位置调用样式表?

像这样的东西:

<link rel="Stylesheet" type="text/css" href="http://cdn.somewhere.com/css/style.css" />
<link rel="Stylesheet" type="text/css" href="local/style.css" />

但是如果第一个不可用,只调用第二个?如果没有必要,我不想打 2 个电话。谢谢你。

编辑:这是因为我在工作中注意到,我的 CDN 被阻止,所以没有样式显示,但网站显示。我假设很多地方可能有相同的块(防火墙阻止 Web 应用程序)。那么我想从本地副本中获取 css。

4

6 回答 6

5

这在纯 HTML 标记中是不可能的。但是,您可以使用简单的脚本在服务器端执行此操作,例如(伪代码):

if first style does not exist:
    output <link> to second sheet
else
    output <link> to primary sheet

但实际上,您的样式表很可能会被浏览器缓存,因此它几乎不会给最终用户带来负担。您可以简单地订购 s 以便首先加载“第二个”样式表,然后加载主表。这将导致主工作表覆盖辅助工作表中的任何内容......但如果主工作表不可用,辅助工作表仍将按预期工作。

于 2009-05-15T12:03:12.537 回答
2

强烈不推荐JavaScript/AJAX,因为它的行为非常不可预测(我不是在谈论跨浏览器兼容性,但有些用户将其关闭。)

如果我是你,我会检查第一个给定 CSS服务器端的存在并相应地插入 href。

还要记住,如果你真的必须使用这种机制来确保,那么你就是说你的服务器不可靠。

于 2009-05-15T12:11:03.313 回答
1

不,因为 LINK 元素本身是静态的(“哑”)。因此,您要么需要 JavaScript、GreaseMonkey(在 Firefox 上但那也是 JavaScript),要么您真的必须同时要求两者。

但是,顺序必须不同,IIRC:相同的 CSS 规则将覆盖较早的规则。因此,您需要先包含本地文件,然后再加载外部文件。如果外部副本不可用,将使用您的本地副本。

如果您将 CSS 文件放在本地硬盘上,这将非常便宜。

也就是说,浏览器不会总是下载文件。它将首先检查其缓存中的副本是否仍然是最新的,如果是,则不会再次下载该文件。

于 2009-05-15T12:09:45.877 回答
0

默认情况下,您可以使用“local.css”并使用 javascript(使用 ajax)来加载新的。如果请求可以加载新的 css 文件就可以了,否则,您只需更改任何内容。

于 2009-05-15T12:07:47.800 回答
0

嗯......你可以使用这个:

我不知道第一次失败时是否加载了备用样式表,但如果不确定,您可以尝试阅读以下内容:A List Apart Tutorial for Change Stylesheets

于 2009-07-20T23:11:55.223 回答
-4

这可以通过 JavaScript 来实现。代码应该是这样的:

if( loadcss(first.css) == false) loadcss(second.css);

其中 loadcss 是函数检查是否加载了 css

于 2009-05-15T12:04:53.937 回答