【问题标题】:Is there a way to link in a stylesheet where the extension is not .css?有没有办法在扩展名不是 .css 的样式表中进行链接?
【发布时间】:2014-01-11 19:38:40
【问题描述】:

我需要在 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。

【问题讨论】:

  • 是否存在不能为 CSS 文件提供正确扩展名的限制?这似乎是一个更简单的问题解决方案......
  • 我从未见过这样做过;为什么要从 CSS 文件中删除 .css 扩展名(真的很好奇)?
  • 只要服务器把它作为css文件发送就可以了,但是不知道能不能设置服务器把文件作为某种类型发送也已经有了某种扩展来映射。我看到的更大的问题是,其他人将来如何在没有扩展的情况下更新您的代码库?听起来真的很乱。
  • 如果是使用一个每次调用都重建的php文件,使用header()发送mime类型
  • 由于您使用的是PHP,您可以轻松使用header("Content-Type: text/css"); 设置正确的MIME 类型。

标签: html css stylesheet


【解决方案1】:

浏览器首先查看他们接收到的内容的 MIME 类型,这在原则上与文件的扩展名无关。 MIME 类型由 Web 服务器作为 HTTP 标头(文件的信封,如果您愿意的话)的一部分发送。

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

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

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

每个段落在相应的文件中都有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 标头。

如果您不使用脚本引擎,您可以配置您的网络服务器以正确设置 MIME 类型(参见例如Apache mod_mime configuration)。

请注意,HTML 版本和严格性也会对此产生影响。在 Chrome 中,当 HTML 类型不严格时,文本/html 文件中的样式似乎无论如何都会被渲染。但是你不能指望这一点,所以它充其量只是一个快速而肮脏的修复。

【讨论】:

  • 读完后我检查了一下,有一种方法可以在客户端的链接标签上设置 mime 类型。有。这是类型属性。我将其设置为“text/css”,但未应用。浏览器无法将其识别为 css,我猜这是他们的错误。我会尝试设置标题。 “+1”或“谢谢”
  • HTML5 标准实际上要求用户代理将服务器发送的 MIME 类型优先于客户端上设置为链接类型属性的 MIME 类型。您可以阅读此here,它明确涵盖了您的情况。客户端属性旨在防止用户代理下载它不支持的文件类型(例如,如果它不支持 VB 脚本执行,则不下载 VB 脚本。)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 没有。文件扩展名不决定内容。这就是 MIME 类型的用途。例如:image.jpg 实际上可能是一个 PNG。
    • 这是不正确的 - 它不是必需的。有关原因的详细信息,请参阅wkampmann's answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多