Maintenant, il suffit d’utiliser les flex box pour les aligner côte à côte et de donner une hauteur au conteneur : .input-container { display: flex; height: 24px; } input-container > input { flex: 1; } On veut une icône à la place du label. Très bien : on va placer en fond sur ce dernier. Pour ne pas afficher le texte qu’il contient, on va également lui donner une largeur définie (celle de l’icône), masquer ce qui se dépasse (avec overflow) et faire en sorte que le texte soit entièrement sorti du champ de vision du label (avec box-sizing et padding). Le CSS devient alors : .input-container { display: flex; } input-container > input { flex: 1; } input-container > label { width: 24px; padding-left: 24px; box-sizing: border-box; overflow: hidden; background: url(icone.png); }