如何使用Drupal 6以編程方式包含瀏覽器特定樣式表?程序化包含條件(瀏覽器特定)樣式表
長話短說,我有一個模塊,其中包含非常具體的樣式規則,我只希望包含在使用該模塊的頁面中。
drupal_add_css()
工作正常,但我可能需要包括特定於IE的規則的一些位,我不想將這些規則添加到主站點條件樣式表。主站點CSS已經非常冗長,並且這些更改應該與站點的其餘部分保持隔離。
如何使用Drupal 6以編程方式包含瀏覽器特定樣式表?程序化包含條件(瀏覽器特定)樣式表
長話短說,我有一個模塊,其中包含非常具體的樣式規則,我只希望包含在使用該模塊的頁面中。
drupal_add_css()
工作正常,但我可能需要包括特定於IE的規則的一些位,我不想將這些規則添加到主站點條件樣式表。主站點CSS已經非常冗長,並且這些更改應該與站點的其餘部分保持隔離。
如果您不想將條件樣式表添加到每個頁面,則需要使用預處理函數。
預處理函數是鉤子,允許您添加/減去將在頁面上呈現的內容。在你的情況下,你想要使用合適的*_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)
部分。
您可以使用條件註釋。
下面是關於它的文章:
http://www.quirksmode.org/css/condcom.html
這裏是一個片段:
<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
見提供的鏈接的文檔。
你在說哪個版本的IE?
你可以這樣做,而不包括單獨的樣式表以下的事情:
color:#ffffff; /* default value */
_color:#ffff00; /* overwrite for IE6 */
#color:#ff0000; /* overwrite for IE7 */
樣式表應該被瀏覽器緩存。通過在代碼中添加它們可以制動此功能。
'* property'也適用於IE7及以下版本。你確定'#屬性'隻影響IE7還是會影響IE6,比如'* property'呢? – 2011-04-08 21:22:15
我從來不需要使用*屬性。 – 2011-04-08 21:24:43
我不認爲這回答了我的問題。 :) – 2011-04-08 21:28:02
只是爲了跟進此,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的好主意的問題,我認爲仍然是開放的。
這似乎是最完整的答案。 – nomadkbro 2011-04-09 23:16:47