I'm currently working on some HTML5 themes for a few of my websites, and I keep running into problems with the way <h1>
's can be used multiple times. I can't seem to predict in what elements the headings will show up, but I do want to try and size them automatically based on their position in the DOM...
I was thinking about using something like
h1 { font-size: 3em; }
h2,
body > * > header h1 { font-size: 2.5em; }
h3,
body > * > header h2,
body > * > * > header h1 { font-size: 2em; }
But obviously that's far from waterproof. Having an extra element around an h1 that doesn't really mean it's deeper in the page structure will tend to pick way too small sizes. For example an unordered list with blocks that each have their own title will have something like
<section>
<ul>
<li>
<header>
<h1>Title of a block</h1>
</header>
content
</li>
</ul>
</section>
Which makes the <h1>
appear much deeper than it actually is. What are good ways to handle this?
When we use a CSS preprocessor like Sass or Less, we can nest a CSS style rule within another rule to write clean and understandable code. This nesting rule is not supported yet in native CSS. At the moment, it is a working draft and only available for discussion.
<p> tags should not be nested. <p> tags are considered "flow elements" and can only contain "phrasing content". In other words, a paragraph contains text, but wouldn't contain another paragraph. <h1> tags should not contain <p> tags.
To be nest-prefixed , a nesting selector must be the first simple selector in the first compound selector of the selector. If the selector is a list of selectors, every complex selector in the list must be nest-prefixed for the selector as a whole to be nest-prefixed.
To nest a selector, you simply separate them with a space. This will make paragraph tags inside main have one font size, and paragraph tags inside either header or footer have another font size. Descendant selectors target all elements inside the other, no matter how deeply nested it is.
You should style the h1
s based on the type of elements they are in, not just the depth.
For example, if you have general headings, article headings and sidebar item headings, you could do this:
h1 { font-size: 3em }
h2 { font-size: 2.5em }
article h1 { font-size: 2em }
article h2 { font-size: 1.5em }
aside h1 { font-size: 2.5em }
You would use whatever selector you use to select the articles or sidebar for layout (in my example, the article
and aside
tags, it might be section.sidebar
or something else) to differentiate between different h1
tags.
There is not much of a connection between the depth of the tag, and the size (although there seems to be a pattern; deeper is smaller). There is however a connection between the convention used for marking up your sidebar, and the size of the headings in the sidebar. The CSS selectors for the headings will match up with the selectors for the layout, which shows the connection.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With