Utilice un .input-icon
div padre . Opcionalmente agregue .input-icon-right
.
<div class="input-icon">
<input type="text">
<i>$</i>
</div>
<div class="input-icon input-icon-right">
<input type="text">
<i>€</i>
</div>
Alinee el icono verticalmente con transform
y top
, y configúrelo pointer-events
en none
para que los clics se enfoquen en la entrada. Ajuste el padding
y width
según corresponda:
.input-icon {
position: relative;
}
.input-icon > i {
position: absolute;
display: block;
transform: translate(0, -50%);
top: 50%;
pointer-events: none;
width: 25px;
text-align: center;
font-style: normal;
}
.input-icon > input {
padding-left: 25px;
padding-right: 0;
}
.input-icon-right > i {
right: 0;
}
.input-icon-right > input {
padding-left: 0;
padding-right: 25px;
text-align: right;
}
A diferencia de la respuesta aceptada, esto mantendrá resaltado la validación de entrada, como un borde rojo cuando hay un error.
Ejemplo de uso de JSFiddle con Bootstrap y Font Awesome