The W3C Recommendation HTML 4.01 Specification says:
9.3.1 Paragraphs: the P element
The P element represents a paragraph.
7.5.4 Grouping elements: the DIV and SPAN elements
The DIV and SPAN elements, in conjunction with the id and class attributes, offer a generic mechanism for adding structure to documents. These elements define content to be inline (SPAN) or block-level (DIV) but impose no other presentational idioms on the content. Thus, authors may use these elements in conjunction with style sheets, the lang attribute, etc., to tailor HTML to their own needs and tastes.
Suppose, for example, that we wanted to generate an HTML document based on a database of client information. Since HTML does not include elements that identify objects such as "client", "telephone number", "email address", etc., we use DIV and SPAN to achieve the desired structural and presentational effects.
If you've got an actual paragraph, use P
, but if you're structuring something that's not a paragraph, use DIV
or SPAN
. The choice of which element to use is semantic, and should be based on the content. The choice of styling is orthogonal, really. You can style your paragraphs or your divisions however you like; they're both block level elements.
You do make an interesting point about trying to keep paragraph styles specific to the text, and not for document formatting, but this is only possible if you already have higher level divisions that the paragraphs are inside. If you don't, that wouldn't be an option. I'm personally a fan of simpler structure than more complex structure, so if my paragraphs suffice and don't need to be in higher level divisions, I'd just put the styling on the paragraphs, rather than wrapping them in divisions.