如何以编程方式在Drupal 6中包含特定于浏览器的样式表?
长话短说,我有一个模块,其中包含非常具体的样式规则,我想只包含在使用该模块的页面上。
drupal_add_css()
工作正常,但我可能需要为某些位包含特定于IE的规则,我不想将这些规则添加到主站点条件样式表中。主站点CSS已经非常冗长,这些更改应该与站点的其他部分隔离开来。
答案 0 :(得分:0)
您可以使用条件评论。
这是一篇关于它的文章:
http://www.quirksmode.org/css/condcom.html
这是一个片段:
<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
请参阅提供的链接中的文档。
答案 1 :(得分:0)
您在谈论哪个版本的IE?
您可以执行以下操作,但不包括单独的样式表:
color:#ffffff; /* default value */
_color:#ffff00; /* overwrite for IE6 */
#color:#ff0000; /* overwrite for IE7 */
浏览器应该缓存样式表。通过在代码中添加它们就可以制动这个功能。
答案 2 :(得分: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
变量,在你的page.tpl.php的<head>
中有CSS样式表声明,如下所示:
<?php print $my_custom_stylesheet; ?>
就是这样。您可以在主题或模块中使用预处理函数,因此请使用最有意义且最容易编写上述代码的if (condition is met)
部分。
答案 3 :(得分: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的Zen主题中。
对于它的价值,这对我正在进行的项目(这是Drupal 6 ......)以及以编程方式注入条件css是否是一个好主意的问题完全没有帮助,我认为仍然是开放的。