在扩展名不是.css的样式表中是否可以链接?

问题描述 投票:7回答:3

我需要动态链接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。

html css stylesheet
3个回答
10
投票

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

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

如果MIME类型错误,则结果是不确定的:它取决于浏览器和HTML版本以及是否显示样式。您可以使用浏览器的调试器检查MIME类型。

关于Chrome的示例,请参见this screenshot

“此屏幕截图”

每个段落在相应文件中都有color: red规则,但未应用。如您所见,尽管MIME类型不正确,但text / plain文件中的样式确实得到了渲染。浏览器会发出警告。 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 configuration)。

请注意,HTML版本和严格性也会对此产生影响。在Chrome中,当HTML类型不严格时,文本/ html文件中的样式似乎仍然会呈现。但是您不能指望这一点,因此充其量是一个快速而肮脏的修复。


0
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.