tags:

views:

192

answers:

7

Where are all of the places you can put CSS style information on an HTML page?

I know you can place CSS style info in the head of an HTML page, where else is it valid to put CSS elements?

I would like to place my CSS someplace else on the page due to inheritance, e.g:

<style type="text/css">
...
</style>
+2  A: 

You can specify it "inline"

<div style="border: 1px solid red" />

Other than that I'm not used to place it anywhere else than separate files / <head>

l3dx
+6  A: 

You can use

<link rel="stylesheet" type="text/css" href="style.css" />

in the head to link to an external stylesheet.

You can also have inline style attributes, such as

<a href="#" style="color:red">Hello</a>

And you can also set the styles in your scripts, e.g. using jQuery (which can go where ever your script is):

$('textBox').css("font-weight", "bold");

However, it is good practise to try to keep all the style information in one standard spot, i.e. the head of the document - it makes it easier for others to maintain your work for you.

Note that if you really want to override a particular attribute, the best way to do it is to use the !important option, such as

color: red !important;

You can use this with any of the methods listed above, and it will override any later settings that conflict.

a_m0d
+1  A: 

Off hand:

  • In other documents. Include CSS files with the LINK element:
    <link href="style.css" type="text/css" rel="stylesheet">
  • Inline with HTML elements:
    <h1 style="color: red">Title</h1>

That is usually the only two other places you will put CSS. You can also apply CSS to documents via JavaScript.

Nick Presta
A: 

So, you can specify it inline as an attribute on the element you want to style...

<p style=" font-weight:bold; ">

Or, you could add it in a style block in the page body or header

<style>
  p {font-weight:bold;}
</style>

And lastly, you could include it from a linked CSS file by importing...

<style>
  @import url(css/bold.css)
</style>

Or by linking it...

<link rel="stylesheet" href="css/bold.css" />

Honestly, linking is, 99.9999% of the time, is the best way to include stylesheets on a page as it neatly separates your CSS from your code, making updates to either much faster.

Paul Sweeney
It also allows the possibility of the client caching the style sheet, so other pages that use the same style sheet will load a bit faster.
BryanH
Putting a style block in the page body is invalid
Gareth
You're correct in that it doesn't validate, however 98% or browsers will load and parse it regardless of quirks or standards mode. Yes, doing something against spec sucks, but in cases where you're including external code, it is an option.
Paul Sweeney
+1  A: 

As the others have said, non-inline CSS belongs in the head, if you want to write syntactically-correct code. Check the schema if you're not sure.

If you need to generate the CSS during dynamic page creation, you can easily inject it into the DOM, at the bottom of the head, using javascript:

document.getElementsByTags('head')[0].appendChild( -- css here --);

Be forewarned that this will cause your page rendering to slow down and "blink," as the browser must restyle the page when your new CSS is inserted. The same thing will happen if you ignore the schema and place your CSS in the body.

This leads to a poor user experience.

BryanH
+1  A: 

If you're concerned with inheritance in css then you need to remember this general rule. 

Inline styles > everything else.  Tag > id Id > class

Then you have combinations of these rules. 

Tag + id (div#main) > id

Parent tag + tag+id > tag+id 

Remember these are just general rules but they should take care of 99% of your situations. Placing styles in your scripts are generally a bad idea because it affects perfoance as others have noted and it adds another place for you to update when you need to change  the styles. 

Alex Morales
How does that answer the OP's question?
a_m0d
This answers the question because he's really concerned with inheritance. I'm showing him the way inheritance works. He doesn't need to move the script tag just use the correct rules.
Alex Morales
+4  A: 

You can link external stylesheets in the <head> block. You can use more than one stylesheet, and they are loaded in order (in this example, both screen.css and print.css override some elements of style.css.

<link rel="stylesheet" href="style.css" type="text/css" media="all" />
<link rel="stylesheet" href="screen.css" type="text/css" media="screen" />
<link rel="stylesheet" href="print.css" type="text/css" media="print" />

You can import it from an external stylesheet in the <head> block:

<style>
  @import url(style.css)
</style>

Or import it using another method:

<style type="text/css" media="all">
  @import "style.css";
</style>

You can put the CSS in the <head> block:

<style type="text/css">
  p {font-face:Arial;}
</style>

You can put the CSS inline into the html:

<ul> <li style="list-style:none">Item 1</li></ul>

You can add the CSS to the DOM via javascript:

function addCss(cssCode) {
var styleElement = document.createElement("style");
  styleElement.type = "text/css";
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = cssCode;
  } else {
    styleElement.appendChild(document.createTextNode(cssCode));
  }
  document.getElementsByTagName("head")[0].appendChild(styleElement);
}
Curtis Tasker