如何使用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