Pseudo-elements can only be defined for container elements. Because of how they appear in the container itself as a DOM element. Inputs cannot contain other elements, so they are not supported. A button, on the other hand, although the form element supports them, because it is a container of other sub-elements.
More from specification 2.1
The pseudo-elements ::after and ::before now use a double colon to avoid confusion with pseudo-classes (which obviously use : , although an older version of IE (7.8) will not recognize double colons. Keep this in mind if you are trying to support them.
source share