Pseudo-classes (:
) allow you to style the different states of an element e.g. when you hover over it, when it is disabled, when it is the first child of its parent, etc.
Pseudo-elements (::
) allow you to style different parts of an element e.g. the first line, the first letter, inserting content before or after, etc.
Originally they all used a single colon, but CSS3 introduced the double colon to separate the two.