moim zdaniem najlepszym rozwiązaniem byłoby stworzenie <label> z atrybutem 'for' i ostylowanie go absolutnie względem jakiegoś kontenera (np. DIV'a) dla <label> oraz <input>
Mówię o czymś takim:
https://codepen.io/emancypage/pen/NYeqgP
Tak na szybko. Oczywiście możesz poprawić funkcjonalność znikania tekstu z pomocą javascriptu na zasadzie, że gdy ktoś zacznie pisać to dopiero wtedy zacznie znikać label.
Chyba, że Ci chodzi o to, że kompletnie nie ma być napisu, to uważam takie podejście za słabe, mimo, że będzie ikonka lupki. Teraz jako placeholder masz Email, a lupka ma się nijak do emaila. Jeśli będzie ikonka koperty dla emaila to mogę to różnie odczytywać, np. czy chodzi tu o mój e-mail, czy może chodzi o e-mail na który ma się wysłać ta wiadomość itp.
Lepiej chyba jak będzie ten tekst mimo wszystko.
Ostatecznie możesz dodać atrybut TITLE do ikonki i po najechaniu wyświetli Ci się ten właśnie title