First of all:
- If the HTML is built or generated independent of the overall site design (e.g. shared template code), then add reasonably-named classes and IDs, linked exclusively to external stylesheet(s). Use sufficient elements to allow for arbitrary CSS manipulation. For example, see the CSS Zen Garden. This applies to ALL CMSes, programs, scripts, and other dynamically-generated site content. The HTML output must contain absolutely no styling or layout of any sort at all. No exceptions.
Assuming you’re dealing with static content, then:
-
If there’s any way you can reuse the style, make it a class and link to a stylesheet.
-
If there’s no way would ever reuse the style (it’s a one-off thing that doesn’t make sense anywhere else) then use a
<style>
block that references the element’s #id. -
If the CSS attribute only makes sense in the context of the surrounding HTML (e.g. some usages of
clear:
) then I inline the style into the element.
A lot of people call this heresy, just like a lot of people denounce any use of goto
in modern programming languages.
However, rather than subscribing to stylistic dogma, my view is you should choose the method based on your circumstances that decreases your overall workload the most. Stylesheets add a level of indirection that makes site-level changes easy and helps build consistency. But if you have several dozen classes on each page that are only used in one place, then you’re actually increasing your workload, not decreasing it.
In other words, don’t do something dumb and confusing just because people tell you it’s the right way to do it.