我需要动态链接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。
浏览器首先查看接收到的内容的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文件中的样式似乎仍然会呈现。但是您不能指望这一点,因此充其量是一个快速而肮脏的修复。
我认为扩展名不是问题-可以是任何扩展名。尝试添加一个点-可能会起作用css/test.
任何CSS文件都需要具有CSS文件扩展名。这样HTML就会知道该文件将用作样式表。否则,它只是一堆毫无意义的纯文本字符。