有没有一种方法可以链接非.css扩展名的样式表?

8

我需要动态链接CSS(如果您知道,还有JS - 没有测试),但是当我这样做时,浏览器不会渲染样式?

以下是我的代码:

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

如果我手动上传并将文件保存为test.css,那么它就可以工作了。

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

有没有一种方法可以告诉浏览器:“这是一个CSS文件,请忽略它没有CSS扩展名”?
更多信息: 原因是我正在设置一个允许用户动态创建自己的CSS的服务器。我将此信息存储在数据库中,并且不希望每次用户更新CSS或新用户创建其帐户时都创建物理(数字)文件。因此,URL可能是href =“ http://somedomain.com/home.php?user=453&css=true ”或类似的东西,如果将其放置在浏览器的URL中,则会返回原始CSS。

2
有什么限制,不能给你的CSS文件正确的扩展名吗?这似乎是问题的一个更简单的解决方案... - Krease
我从未见过这样做的情况;为什么要从CSS文件中删除“.css”扩展名(真的很好奇)? - Jules
只要服务器将其作为CSS文件发送,那么你应该没问题,但我不知道如果没有某种扩展名映射,是否可以设置服务器以某种类型发送文件。我看到的更大的问题是,如果没有扩展名,其他人将如何在未来更新你的代码库?这听起来非常混乱。 - DA.
1
如果要使用每次调用重建的 php 文件,则使用 header() 发送 mime 类型。 - G-Cyrillus
1
由于您正在使用PHP,因此可以轻松使用 header("Content-Type: text/css"); 来设置正确的MIME类型。 - wkampmann
显示剩余2条评论
3个回答

11

浏览器首先查看它们接收到的内容的MIME类型,这原则上与文件扩展名无关。 MIME类型作为HTTP头的一部分(可以说是文件的信封)由Web服务器发送。

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

如果MIME类型不正确,则结果未定义:它取决于浏览器和HTML版本的严格程度是否呈现样式。您可以使用浏览器的调试器来检查MIME类型。

请参见此截图以获取Chrome示例。

此截图

每个段落都在相应的文件中具有color: red规则,但有一个未被应用。正如您所看到的,虽然text/plain文件中的样式MIME类型不正确,但其样式确实被呈现。浏览器会发出警告。 PHP生成的text/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 配置)。

请注意,HTML版本和严格程度也会对此产生影响。在Chrome中,当HTML类型不是严格的时候,文本/ HTML文件中的样式似乎仍会被呈现。但是您不能依赖于它,因此这只是一种快速修复方法。


阅读完这篇文章后,我检查了一下,发现客户端可以设置链接标签的MIME类型。确实有这种方式,就是使用type属性。我将其设置为"text/css",但并未生效。浏览器无法识别它为CSS,我猜测这可能是他们的一个错误。我将尝试设置头部信息。"+1"或"谢谢"。 - 1.21 gigawatts
2
HTML5标准实际上要求用户代理优先考虑服务器发送的MIME类型,而不是客户端设置为链接类型属性的MIME类型。您可以在此处阅读有关此内容的更多信息(http://dev.w3.org/html5/spec-preview/the-link-element.html#attr-link-type),该链接明确涵盖了您的情况。客户端属性旨在防止用户代理下载它不支持的文件类型(例如,如果它不支持VB脚本执行,则不下载VB脚本)。 - wkampmann

0

我认为扩展名不是问题 - 它可以是任何扩展名。尝试添加一个点 - 或许那样会起作用 css/test.


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

3
文件扩展名不能确定文件内容,这就是 MIME 类型的作用。例如:image.jpg 实际上可能是一个 PNG 文件。 - BenM
这是不正确的 - 不需要。详细了解原因,请参考wkampmann的回答 - Krease

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接