2011-04-08 39 views
0

如何使用Drupal 6以編程方式包含瀏覽器特定樣式表?程序化包含條件(瀏覽器特定)樣式表

長話短說,我有一個模塊,其中包含非常具體的樣式規則,我只希望包含在使用該模塊的頁面中。

drupal_add_css()工作正常,但我可能需要包括特定於IE的規則的一些位,我不想將這些規則添加到主站點條件樣式表。主站點CSS已經非常冗長,並且這些更改應該與站點的其餘部分保持隔離。

回答

0

如果您不想將條件樣式表添加到每個頁面,則需要使用預處理函數。

預處理函數是鉤子,允許您添加/減去將在頁面上呈現的內容。在你的情況下,你想要使用合適的*_preprocess_page函數來掛鉤整個頁面的渲染點(因此可以訪問page.tpl.php)。

在這種預處理功能,你應該添加一個新的變量是這樣的:

<theme_name>_preprocess_page(&$vars) { 
    if (condition is met) { 
    $vars['my_custom_stylesheet'] = "<markup for adding a conditional stylehseet>"; 
    } 
} 

然後在你的page.tpl.php中,添加這個新my_custom_stylesheet變量,你必須在的<head>的CSS樣式表聲明你的page.tpl.php,像這樣:

<?php print $my_custom_stylesheet; ?> 

就是這樣。您可以在主題或模塊中使用預處理函數,因此請使用最有意義的方法,並且最容易編寫上述代碼的if (condition is met)部分。

+0

這似乎是最完整的答案。 – nomadkbro 2011-04-09 23:16:47

0

您可以使用條件註釋。

下面是關於它的文章:

http://www.quirksmode.org/css/condcom.html

這裏是一個片段:

<!--[if IE 6]> 
Special instructions for IE 6 here 
<![endif]--> 

見提供的鏈接的文檔。

0

你在說哪個版本的IE?

你可以這樣做,而不包括單獨的樣式表以下的事情:

color:#ffffff; /* default value */ 
_color:#ffff00; /* overwrite for IE6 */ 
#color:#ff0000; /* overwrite for IE7 */ 

樣式表應該被瀏覽器緩存。通過在代碼中添加它們可以制動此功能。

+0

'* property'也適用於IE7及以下版本。你確定'#屬性'隻影響IE7還是會影響IE6,比如'* property'呢? – 2011-04-08 21:22:15

+0

我從來不需要使用*屬性。 – 2011-04-08 21:24:43

+1

我不認爲這回答了我的問題。 :) – 2011-04-08 21:28:02

0

只是爲了跟進此,Drupal 7的(我剛發現)不支持編程包括有條件的CSS as referred to in their documentation here:

這裏的電話:

drupal_add_css($directory . 'ie7.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'every_page' => TRUE));

,因爲它是包含在禪宗主題爲Drupal 7。

對於它的價值,這並沒有幫我在我正在研究的項目中(這是Drupal 6 ...)以及是否是以編程方式注入條件CSS的好主意的問題,我認爲仍然是開放的。