The element/block joint

Where does a single element end and a composed block begin? The lazy answer is to count selectors — one tag is an element, several make a block. It breaks at once. Headings are six tags on a shared scale; code is pre, code, kbd, samp — plainly families, yet just as plainly elements, not blocks.

The real joint is dependency. A block has proprietary parts — pieces with no life outside it. A table's td, a figure's figcaption, a details's summary: none means anything alone; each exists only as part of its whole. An element is complete on its own, even inside a family. An h2 is a finished thing; so is a kbd. They share a scale, but neither is a part of the other.

So the test isn't how many selectors, it's whether the part can stand alone. If yes, you have a family of elements. If no — if the part only makes sense in the embrace of its parent — you have a block. That line is what sorts the base layer (every bare tag, each complete) from the blocks layer (the composed few: table, lists, details).

It's the same boundary the whole system keeps drawing, one scale down: high cohesion inside, a clean edge around. A block is just an element whose parts agreed to belong to each other.