我需要在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。
答案 0 :(得分:9)
浏览器首先查看它们收到的内容的MIME类型,这原则上与文件的扩展名无关。 MIME类型由Web服务器作为HTTP标头的一部分发送(如果您愿意,则为文件的信封。)
CSS样式表的正确MIME类型为text/css
。如果样式表文件具有text / css MIME类型(在HTTP标头中定义),则无论扩展名是什么,您的浏览器都将使用它们来应用样式。
如果MIME类型错误,结果是未定义的:它取决于浏览器和HTML版本&amp;如果样式被渲染,则严格。您可以使用浏览器的调试器来检查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标头。
如果您不使用脚本引擎,则可以将Web服务器配置为正确设置MIME类型(请参阅例如Apache mod_mime configuration)。
请注意,HTML版本和严格性也会对此产生影响。在Chrome中,当HTML类型不严格时,text / html文件中的样式似乎无论如何都会呈现。但是你不能指望它,所以这是一个快速的&amp;最好的肮脏修复。
答案 1 :(得分:-1)
我认为扩展不是问题 - 它可以是任何扩展。尝试添加一个点 - 也许这将起作用css/test.
答案 2 :(得分:-2)
任何CSS文件都需要具有CSS文件扩展名。这就是HTML将如何知道该文件用作样式表的方式。否则,它只是一堆没有意义的纯文本字符。