Campo de entrada de texto HTML con símbolo de moneda


Me gustaría tener un campo de entrada de texto que contenga el signo "$" al principio, y no importa qué edición se produzca en el campo, para que el signo sea persistente.

Sería bueno si solo se aceptaran números para la entrada, pero eso es solo una adición elegante.

Author: halfer, 2010-05-26

12 answers

Considere simular un campo de entrada con un prefijo o sufijo fijo usando un intervalo con un borde alrededor de un campo de entrada sin bordes. Este es un ejemplo básico:

.currencyinput {
    border: 1px inset #ccc;
}
.currencyinput input {
    border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>
 83
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-10 15:29:53

Utilice un div padre .input-icon. Opcionalmente añadir .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 establezca pointer-events en none para que los clics se centren en la entrada. Modifíquese padding y width según proceda:

.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 retendrá el resaltado de validación de entrada, como un borde rojo cuando hay un error.

Ejemplo de uso de JSFiddle con Bootstrap y Fuente Awesome

 40
Author: rybo111,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 10:11:35

Puede envolver su campo de entrada en un intervalo, que position:relative;. Luego se agrega con :before content:"€" su símbolo de moneda y hacerla position:absolute. Trabajando JSFiddle

HTML

<span class="input-symbol-euro">
    <input type="text" />
</span>

CSS

.input-symbol-euro {
    position: relative;
}
.input-symbol-euro input {
    padding-left:18px;
}
.input-symbol-euro:before {
    position: absolute;
    top: 0;
    content:"€";
    left: 5px;
}

Actualización Si desea poner el símbolo del euro a la izquierda o a la derecha del cuadro de texto. Trabajando JSFiddle

HTML

<span class="input-euro left">
    <input type="text" />
</span>
<span class="input-euro right">
    <input type="text" />
</span>

CSS

 .input-euro {
     position: relative;
 }
 .input-euro.left input {
     padding-left:18px;
 }
 .input-euro.right input {
     padding-right:18px;
     text-align:end; 
 }

 .input-euro:before {
     position: absolute;
     top: 0;
     content:"€";
 }
 .input-euro.left:before {
     left: 5px;
 }
 .input-euro.right:before {
     right: 5px;
 }
 25
Author: Philipp Hofmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-08 10:59:02

Dado que no se puede hacer ::before con content: '$' en las entradas y la adición de un elemento absolutamente posicionado añade html extra - Me gusta hacer a un fondo SVG css en línea.

Es algo así:

input {
    width: 85px;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='16px' width='85px'><text x='2' y='13' fill='gray' font-size='12' font-family='arial'>$</text></svg>");
    padding-left: 12px;
}

Produce lo siguiente:

svg dólar signo fondo css

Nota: el código debe estar en una sola línea. El soporte es bastante bueno en los navegadores modernos, pero asegúrese de probar.

 13
Author: Jeff Callahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-18 08:02:30

Ponga el '$' delante del campo de entrada de texto, en lugar de dentro de él. Hace que la validación de datos numéricos sea mucho más fácil porque no tienes que analizar el ' $ ' después de enviar.

Puedes hacerlo con jQuery.validate () (u otro), agregue algunas reglas de validación del lado del cliente que manejen la moneda. Eso le permitiría tener el ' $ ' dentro del campo de entrada. Pero todavía tiene que hacer la validación del lado del servidor para la seguridad y eso lo pone de nuevo en la posición de tener que eliminar '$'.

 3
Author: dnagirl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-26 13:22:02

Si solo necesitas soporte para Safari, puedes hacerlo así:

input.currency:before {
  content: attr(data-symbol);
  float: left;
  color: #aaa;
}

Y un campo de entrada como

<input class="currency" data-symbol="€" type="number" value="12.9">

De esta manera no necesita una etiqueta adicional y mantener la información del símbolo en el marcado.

 2
Author: Sebastian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-27 20:43:39
 1
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:50

Otra solución que prefiero es utilizar un elemento de entrada adicional para una imagen del símbolo de la moneda. Aquí hay un ejemplo usando una imagen de una lupa dentro de un campo de texto de búsqueda:

Html:

<input type="image" alt="Subscribe" src="/graphics/icons/search-button.png">
<input type="text" placeholder="Search" name="query">

Css:

#search input[type="image"] {
background-color: transparent;
border: 0 none;
margin-top: 10px;
vertical-align: middle;
margin: 5px 0 0 5px;
position: absolute;
}

Esto resulta en la entrada en la barra lateral izquierda aquí:

Https://fsfe.org

 0
Author: Sam Tuke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-19 17:07:15

Ninguna de estas respuestas realmente ayudan si le preocupa alinear el borde izquierdo con otros campos de texto en un formulario de entrada.

Recomiendo colocar el signo de dólar absolutamente a la izquierda alrededor de-10px o 5px izquierda (dependiendo de si lo desea dentro o fuera de la caja de entrada). La solución interna requiere direction: rtl en el css de entrada.

También puede agregar relleno a la entrada para evitar la dirección: rtl, pero eso alterará el ancho del contenedor de entrada para no haga coincidir los otros contenedores del mismo ancho.

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:-10px;">$</div>
 </div>
 <input type='text' />
</div>

O

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:5px;">$</div>
 </div>
 <input type='text' style='direction: rtl;' />
</div>

Https://i.imgur.com/ajrU0T9.png

Ejemplo: https://plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview

 0
Author: Ted Scheckler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 15:19:15

Para bootstrap sus obras

<span class="form-control">$ <input type="text"/></span>

No use class="form-control" en el campo de entrada.

 -1
Author: Jestin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 12:09:24

.currencyinput {
    border: 1px inset #ccc;
    padding-bottom: 1px;//FOR IE & Chrome
}
.currencyinput input {
    border: 0;
}
<span class="currencyinput">$<input type="text" name="currency"></span>
 -1
Author: Christian Bocaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-19 20:30:58

Sí, si está usando bootstrap, esto funcionaría.

.form-control input {
    border: none;
    padding-left: 4px;
}

Y

<span class="form-control">$ <input type="text"/></span>
 -1
Author: Johnson Carneiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-04 14:41:08