Adds a CSS file to the stylesheet queue.

Adds a CSS file to the stylesheet queue.


dman’s picture

Although it appears tidy - and appears to work - if you use drupal_add_css() within your own tpl files, this is incompatible with css caching and will cause problems when you go-live.

The most common place to use drupal_add_css() is in a modules hook_init(). Although that results in it being included every time, it is preferable to the alternative. related discussion
Some modules do manage to include it on-demand by using it within their theme_*() functions. Results when doing this with css aggregation on need testing for your individual cases.

timmillwood’s picture

To load a CSS file within your module.

function my_module_init(){
  drupal_add_css(drupal_get_path('module', 'my_module') .'/my_module.css');

note: hook_init runs on every page load, if you only want to load the css on a specific page, put the drupal_add_css() there.

starmonkey’s picture

For adding css to certain pages (like the front page) from your theme:

"Adding styles through the API"

doublejosh’s picture

Here's the theme snippet I use to add in additional separate node-type specific and occasional node ID specific files that don't get added to the aggregated master... provided you don't include the filenames in your .info file.
This is a great way to cut down on master CSS aggregation bloat. Depending on your situation you should probably not do this for all node types.

function MYTHEME_preprocess_node(&$vars, $hook) {

  // $path = NULL, $type = 'module', $media = 'all', $preprocess = TRUE

    path_to_theme() .'/css/types/'. $vars['node']->type .'.css',
    'theme', 'all', FALSE

    path_to_theme() .'/css/nodes/nid-'. $vars['node']->nid .'.css',
    'theme', 'all', FALSE


Though I don't see a file_exists test for this file in the drupal_add_css function is does not include the file as a link in the head if it doesn't exist.

bdichiara’s picture

Is it possible to specify IE Conditional Comments when loading stylesheets with this function? If not, what is another decent solution from doing this within a module?

jlyon’s picture

Look at http://drupal.org/project/conditional_styles if you haven't already.

edgar_estor’s picture

You can actually load the specific css and java script in a specific theme by just putting them inside the page-mypage.tpl.php. If you have a module that reside only to specifc page create a page template. You can call the css or java script within the module if you prefer to organize them as such.

Taiger’s picture

Please do not do this. It is bad practice and will kill performance.
Another way is to use a module like Context:
Context will let you load resources, templates and blocks in contexts which can be triggered by url, role, etc..

alisamar’s picture

is there any way to add special attributes like rel or id ?

vijaycs85’s picture

drupal_add_css() of Drupal 6 doesn't support external CSS. One way of adding external CSS is drupal_set_html_head()