程序化包含条件(特定于浏览器)样式表

时间:2011-04-08 21:10:31

标签: php css drupal-6

如何以编程方式在Drupal 6中包含特定于浏览器的样式表?

长话短说,我有一个模块,其中包含非常具体的样式规则,我想只包含在使用该模块的页面上。

drupal_add_css()工作正常,但我可能需要为某些位包含特定于IE的规则,我不想将这些规则添加到主站点条件样式表中。主站点CSS已经非常冗长,这些更改应该与站点的其他部分隔离开来。

4 个答案:

答案 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是否是一个好主意的问题完全没有帮助,我认为仍然是开放的。