2011-04-08 38 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的好主意的问题,我认为仍然是开放的。