Som vanligt är bästa stället att läsa w3c.
<div> och <span> är båda containers som används för att markera innehållet som du innesluter med taggarna för att sedan sätta css-egenskaper på det. Det är som skiljer div från span är att span är ett inline-element vilket gör att den bara får innesluta andra inline-element. <div> är ett block-element och får således innesluta andra block-element och inline-element. Mer magiskt än så är det inte.