瀏覽器首先看他們收到的內容的MIME類型,這原則上是獨立於文件的擴展名。 MIME類型由Web服務器作爲HTTP標頭的一部分發送(如果您願意,請將其作爲HTTP標頭的一部分)。
CSS樣式表的正確MIME類型是text/css
。如果樣式表文件具有text/css MIME類型(在HTTP標頭中定義),則瀏覽器將使用它們來應用樣式,而不管擴展名是什麼。
如果MIME類型錯誤,結果是未定義的:它取決於瀏覽器和HTML版本&嚴格性,如果樣式被渲染或不。您可以使用瀏覽器的調試器來檢查MIME類型。
有關Chrome中的示例,請參閱this screenshot。
每個段落在相應的文件color: red
規則,但不應用之一。正如你所看到的,雖然它的MIME類型不正確,但text/plain文件中的樣式確實被渲染。瀏覽器確實發出警告。由PHP生成的文本/ 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文件中的樣式似乎無論如何都會呈現。但你不能指望,所以這是一個很快的&骯髒的修復程序。
是否有一些限制,你不能給你的CSS文件適當的擴展?這似乎是一個更簡單的解決方案... – Krease
我從來沒有見過這樣做;爲什麼要從CSS文件中刪除'.css'擴展名(真的好奇)? – Jules
只要服務器將它作爲CSS文件發送,您應該可以,但是我不知道您是否可以設置服務器來發送文件作爲特定類型,如果它們尚未具有某種類型的擴展名地圖也是。我看到的更大的問題是,別人將來如何在沒有擴展的情況下更新您的代碼庫?這聽起來很麻煩。 –