Only inline elements may be contained within inline elements. span
is an inline element. So, tags like a
, img
, sup
, etc. can go within a span, but block level elements like div
and p
cannot.
UPDATE
In reality, different elements which default to inline display behave differently. Some “inline” elements may allow block elements (a
for example), while others don’t (like span
).
If you’re interested in what an HTML tag may contain, your most official source is the WHATWG page on HTML elements. You can check any HTML element and see what content is permitted (see ‘Content Model’ for each element):
http://www.whatwg.org/specs/web-apps/current-work/multipage/#auto-toc-4
Here’s the definition of the span tag, which indicates that only ‘phrasing’ content is allowed.
http://www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-span-element