Почему у img не создается элемент :before?
Потому что :before и :after могут быть только у контейнеров. Изображения и разные input'ы ими не являются.
Не парный же тег, нет у него внутри текстовой ноды и вложенных элементов, вот и не работает.