[This is related to this question, but not since it\'s not about email.]
In many cases -- especially when working with a CMS or someone else\'s fram
Two possible answers for style in the body:
Use inline styling. True, you'll lose the advantages of internal and external styling, but if you don't have access to the header, then you don't have access to the header.
Use the scoped attribute in the style element. This is new to HTML5, but the idea is to limit the scope of the CSS to a part of a page, for example to a single div. The bad news is that it is not yet supported (as of July 2011), nor is it backwards compatible. But there is (allegedly) a JQuery plugin that can help. For more info:
Although the specs explicitly state style tags are not permitted in the body tag, specs aren't all that matters. Style tags are supported in the body by every major browser, and that's ultimately how users see your site.* While there has long been a drive for better standards and standards support in the browser industry, there's also long been a general push to render broken documents as well as can be.
Google, who leads the HTML5 spec effort, simultaneously maintains google.com which violates specs to save bytes, by leaving the quotes out of its attribute values, using selector hacks against the CSS spec, including script tags with no type or language, and link tags with no type. A purist could argue one of the most used sites on the internet is violating the specs and in serious danger of being horribly misrendered. Or, we can reason that no browser will enter popular use that can't render such widely used hacks on the spec.
So, the question is more of which way the browser industry is going - which again is one of both better specs, but also doing their best to honor the intent of pages that violate those specs. My bet is style tags will keep working in the body for a long time to come.
*As of this writing, style tags in the body are supported with an HTML5 doctype in Firefox 3+, IE6+, Safari 2+, Chrome 12+. Support likely goes back farther but those browsers are rarely seen on the interwebs.
The short answer:
HEAD
elementThe detailed answer:
STYLE
is defined to be in head.misc:
<!ENTITY % head.misc "SCRIPT|STYLE|META|LINK|OBJECT" -- repeatable head elements -->
And elements of head.misc are only allowed to be children of the HEAD
element. So STYLE
is only allowed to be child of the HEAD
element.
SCRIPT
is defined to be in head.misc and in special:
<!ENTITY % special
"A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
And special is defined to be in inline:
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Additionally SCRIPT
is also allowed to be child of the BODY
element. So SCRIPT
is allowed in the HEAD
element nad wherever inline is allowed.
Well, you have the problem of directly embedding styles and scripts into your content. The primary mantra here is the DRY (Don't Repeat Yourself) Principle. You may use a script or particular style in multiple places. When that style or script requires modification, you now get to go on a scavenger hunt for all the places where that code exists. Keeping your styles and scripts in a common place is ideal.
On the other hand, if it is a minor style issue (pixel pushing or something related to just that one view), it's probably okay.
The biggest problem, in my opinion, is convenience. If you want to change the style of a page, it's much easier to do so if all the style and script information is in one area. It's possible for style/script information to be in a <style>
node, in the style
attribute of a node (i.e. <body style='...'>
) or in an external file (i.e. <link rel='stylesheet' type='text/css' href='style.css' />
). It's much easier to use a consistent location than to try to hunt down all the places that a style could occur.
It's also worth noting that saying, "aside from being completely ignored in some clients" is akin to saying "aside from exploding when you hit it from behind" or "aside from flying off-course and landing in a civilian neighborhood". That's severe enough a problem in itself to warrant using the standard practice.
But why would you have style
-tags in the body? The styles are global anyways, so i can't find any logical reason to do so.
To simplify and separate things even more you should use external stylesheets too.
Scripts are allowed, and is there for a reason: They might give output, they should be run at specific times and other reasons.