2014-01-11 103 views
6

我需要动态链接CSS(和JS,如果你知道没有测试过),但当我这样做的浏览器不呈现样式?有没有一种方法可以在扩展名不是.css的样式表中链接?

这里是我的代码:

<link rel="stylesheet" href="css/test"/> 

如果我手动上传并保存该文件作为test.css它即可工作。

<link rel="stylesheet" href="css/test.css"/> 

有没有办法对浏览器说:“这是一个CSS文件,请忽略它没有css扩展名”?

更多
的原因是我设置了一个服务器,它允许用户动态地创建自己的CSS。我将这些信息存储在数据库中,并且不希望每次用户更新css或新用户创建其帐户时创建物理(数字)文件。所以,URL可能是这样的,如果放置在浏览器的URL中,将返回原始的CSS。

+2

是否有一些限制,你不能给你的CSS文件适当的扩展?这似乎是一个更简单的解决方案... – Krease

+0

我从来没有见过这样做;为什么要从CSS文件中删除'.css'扩展名(真的好奇)? – Jules

+0

只要服务器将它作为CSS文件发送,您应该可以,但是我不知道您是否可以设置服务器来发送文件作为特定类型,如果它们尚未具有某种类型的扩展名地图也是。我看到的更大的问题是,别人将来如何在没有扩展的情况下更新您的代码库?这听起来很麻烦。 –

回答

8

浏览器首先看他们收到的内容的MIME类型,这原则上是独立于文件的扩展名。 MIME类型由Web服务器作为HTTP标头的一部分发送(如果您愿意,请将其作为HTTP标头的一部分)。

CSS样式表的正确MIME类型是text/css。如果样式表文件具有text/css MIME类型(在HTTP标头中定义),则浏览器将使用它们来应用样式,而不管扩展名是什么。

如果MIME类型错误,结果是未定义的:它取决于浏览器和HTML版本&严格性,如果样式被渲染或不。您可以使用浏览器的调试器来检查MIME类型。

有关Chrome中的示例,请参阅this screenshot

this screenshot

每个段落在相应的文件color: red规则,但不应用之一。正如你所看到的,虽然它的MIME类型不正确,但text/plain文件中的样式确实被渲染。浏览器确实发出警告。由PHP生成的文本/ html文件中的样式未呈现(并给出了警告)。

但是,PHP和其他脚本引擎允许操作MIME类型,但是,正如我在test.css.fixed .php文件(下面的代码)。正如你所看到的,浏览器不再抱怨并且不管其扩展名如何应用这些样式。

在PHP中,MIME类型可以设置如下(这是test.css.fixed。php):

<?php 
    header("Content-Type: text/css"); 
?> 

    p.test_css_fixed_php { 
     color: red; 
    } 

header函数更改服务器发送的HTTP标头。

如果您不使用脚本引擎,则可以将Web服务器配置为正确设置MIME类型(请参阅,例如Apache mod_mime configuration)。

请注意,HTML版本和严格性也会对此产生影响。在Chrome中,当HTML类型不严格时,text/html文件中的样式似乎无论如何都会呈现。但你不能指望,所以这是一个很快的&肮脏的修复程序。

+0

阅读完本文后,我检查了一下,并在客户端的链接标记上设置了MIME类型。有。这是类型属性。我将它设置为“text/css”,但没有应用。浏览器不认为它是css,我猜他们是一个错误。我会尝试设置标题。 “+1”或“thanks” –

+2

HTML5标准实际上要求用户代理将服务器发送的MIME类型的优先级设置为客户端上链接类型属性的MIME类型集。你可以阅读关于这个[here](http://dev.w3.org/html5/spec-preview/the-link-element.html#attr-link-type),它明确地涵盖你的案例。客户端属性旨在防止用户代理下载不支持的文件类型(例如,如果它不支持VB脚本执行,则不下载VB脚本)。 – wkampmann

-2

任何CSS文件都需要有CSS文件扩展名。这就是HTML如何知道该文件是用作样式表的。否则,它只是一堆没有意义的纯文本字符。

+0

我不同意 - 它可以是.php,它会起作用。 –

+3

否。文件扩展名不确定内容。这就是MIME类型的用途。例如:'image.jpg'实际上可能是一个PNG。 – BenM

+0

这是不正确的 - 这不是必需的。有关详细信息,请参阅[wkampmann的回答](http://stackoverflow.com/a/21067379/836214)。 – Krease

-1

我认为扩展不是问题 - 它可以是任何扩展。尝试添加一个点 - 也许这将工作css/test.

相关问题