2014-01-11 62 views
6

我需要動態鏈接CSS(和JS,如果你知道沒有測試過),但當我這樣做的瀏覽器不呈現樣式?有沒有一種方法可以在擴展名不是.css的樣式表中鏈接?

這裏是我的代碼:

<link rel="stylesheet" href="css/test"/> 

如果我手動上傳並保存該文件作爲test.css它即可工作。

<link rel="stylesheet" href="css/test.css"/> 

有沒有辦法對瀏覽器說:「這是一個CSS文件,請忽略它沒有css擴展名」?

更多
的原因是我設置了一個服務器,它允許用戶動態地創建自己的CSS。我將這些信息存儲在數據庫中,並且不希望每次用戶更新css或新用戶創建其帳戶時創建物理(數字)文件。所以,URL可能是這樣的,如果放置在瀏覽器的URL中,將返回原始的CSS。

+2

是否有一些限制,你不能給你的CSS文件適當的擴展?這似乎是一個更簡單的解決方案... – Krease

+0

我從來沒有見過這樣做;爲什麼要從CSS文件中刪除'.css'擴展名(真的好奇)? – Jules

+0

只要服務器將它作爲CSS文件發送,您應該可以,但是我不知道您是否可以設置服務器來發送文件作爲特定類型,如果它們尚未具有某種類型的擴展名地圖也是。我看到的更大的問題是,別人將來如何在沒有擴展的情況下更新您的代碼庫?這聽起來很麻煩。 –

回答

8

瀏覽器首先看他們收到的內容的MIME類型,這原則上是獨立於文件的擴展名。 MIME類型由Web服務器作爲HTTP標頭的一部分發送(如果您願意,請將其作爲HTTP標頭的一部分)。

CSS樣式表的正確MIME類型是text/css。如果樣式表文件具有text/css MIME類型(在HTTP標頭中定義),則瀏覽器將使用它們來應用樣式,而不管擴展名是什麼。

如果MIME類型錯誤,結果是未定義的:它取決於瀏覽器和HTML版本&嚴格性,如果樣式被渲染或不。您可以使用瀏覽器的調試器來檢查MIME類型。

有關Chrome中的示例,請參閱this screenshot

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文件中的樣式似乎無論如何都會呈現。但你不能指望,所以這是一個很快的&骯髒的修復程序。

+0

閱讀完本文後,我檢查了一下,並在客戶端的鏈接標記上設置了MIME類型。有。這是類型屬性。我將它設置爲「text/css」,但沒有應用。瀏覽器不認爲它是css,我猜他們是一個錯誤。我會嘗試設置標題。 「+1」或「thanks」 –

+2

HTML5標準實際上要求用戶代理將服務器發送的MIME類型的優先級設置爲客戶端上鍊接類型屬性的MIME類型集。你可以閱讀關於這個[here](http://dev.w3.org/html5/spec-preview/the-link-element.html#attr-link-type),它明確地涵蓋你的案例。客戶端屬性旨在防止用戶代理下載不支持的文件類型(例如,如果它不支持VB腳本執行,則不下載VB腳本)。 – wkampmann

-2

任何CSS文件都需要有CSS文件擴展名。這就是HTML如何知道該文件是用作樣式表的。否則,它只是一堆沒有意義的純文本字符。

+0

我不同意 - 它可以是.php,它會起作用。 –

+3

否。文件擴展名不確定內容。這就是MIME類型的用途。例如:'image.jpg'實際上可能是一個PNG。 – BenM

+0

這是不正確的 - 這不是必需的。有關詳細信息,請參閱[wkampmann的回答](http://stackoverflow.com/a/21067379/836214)。 – Krease

-1

我認爲擴展不是問題 - 它可以是任何擴展。嘗試添加一個點 - 也許這將工作css/test.

相關問題