Grundinställningar:
<div> är ett block, dvs före och efter innehållet radbryts det automagiskt om man inte kopplat bort detta med CSS.
<span> Är en Inline-tag som inte påverkar utseendet på de ord som den innehåller alls. Inte heller radbryts det före eller efter en <span> om man inte ändrat det beteendet med CSS.
Rekommendation alltså:
<div> - när du vill ha ett block (eller ett "layer" som du positionerar ut med CSS ;) )
<span> - när du vill påverka en del av en textrad eller motsvarande.
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.
Så behöver det inte vara. Saken med <p> är att den påbörjar ett nytt stycke. Sen kan det se ut lite hur som helst.
Det går ju t.ex. lätt att ta bort den "radbrytning" (marginal) som kommer före/efter med CSS. :)