2010-05-26 19 views
66

Vorrei un campo di immissione testo contenente il segno "$" all'inizio e indipendentemente dal tipo di modifica apportato al campo, perché il segno sia persistente.Campo di immissione testo HTML con simbolo di valuta

Sarei buono se solo i numeri fossero accettati per l'input, ma questa è solo un'aggiunta di fantasia.

risposta

74

Considerare la simulazione di un campo di input con un prefisso o un suffisso prefissati utilizzando uno span con un bordo attorno a un campo di input senza bordi. Ecco un esempio di base kickoff:

.currencyinput { 
 
    border: 1px inset #ccc; 
 
} 
 
.currencyinput input { 
 
    border: 0; 
 
}
<span class="currencyinput">$<input type="text" name="currency"></span>

+0

Grazie mille! Questa è la soluzione che ha fatto il lavoro per me. Perfetto davvero! – User3419

+10

Inoltre, è possibile includere il "$" all'interno di un tag

+0

@Cohen Sebbene sia una buona idea avere più di un'etichetta [potrebbe causare problemi con l'accessibilità] (http://stackoverflow.com/a/ 3992160/1094772). – rybo111

2

Mettere il '$' davanti al campo di immissione di testo, invece che all'interno di esso. Rende la convalida dei dati numerici molto più semplice perché non è necessario analizzare "$" dopo l'invio.

È possibile, con JQuery.validate() (o altro), aggiungere alcune regole di convalida sul lato client che gestiscono la valuta. Ciò consentirebbe di avere il "$" all'interno del campo di input. Ma devi ancora fare la convalida sul lato server per la sicurezza e questo ti rimette nella posizione di dover rimuovere il '$'.

+1

Grazie! Ne ero al corrente, ma in realtà avevo bisogno che il mio segno di valuta fosse all'interno del campo di testo. C'è una risposta migliore sotto la quale credo possa essere di aiuto a molte persone. – User3419

+0

@Hristo: Sono contento che tu abbia trovato una soluzione adatta. Ma per la cronaca, quella che hai contrassegnato come risposta non mette $ ** nel ** campo di input.Rende solo ** sembra ** essere lì con lo stile. Detto questo, è decisamente lucido! – dnagirl

+1

Sì, risolve visivamente il problema, mentre il tuo suggerimento è solo indicativo (sì, ancora nella giusta direzione), ma non lo chiamerei soluzione. Grazie mille ancora e ricorda che non intendevo offendere nessuno qui! – User3419

0

Un'altra soluzione che preferisco è quello di utilizzare un elemento di input aggiuntivo per l'immagine del simbolo di valuta. Ecco un esempio utilizzando l'immagine di una lente di ingrandimento all'interno di un campo di ricerca:

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; 
} 

Il risultato è l'ingresso nella barra laterale sinistra qui:

https://fsfe.org

32

Utilizzare un genitore .input-icon div. Aggiungi facoltativamente .input-icon-right.

<div class="input-icon"> 
    <i>$</i> 
    <input type="text"> 
</div> 

<div class="input-icon input-icon-right"> 
    <i>€</i> 
    <input type="text"> 
</div> 

Allineare l'icona verticalmente con transform e top, e impostare pointer-events a none modo che scatti concentrano sull'ingresso. Regolare la padding e width a seconda dei casi:

.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 differenza della risposta accettata, questo manterrà ingresso evidenziazione di validazione, come ad esempio un bordo rosso quando c'è un errore.

JSFiddle usage example with Bootstrap and Font Awesome

+2

Grazie per 'pointer-events: none', amore che trova piccoli dettagli come questo – brichins

+1

Questa è una bella soluzione! –

+1

Concordato, buona soluzione! – dave4jr

1

Se avete solo bisogno di supportare Safari, si può fare in questo modo:

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

e un campo di input come

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

In questo modo si don' t bisogno di un tag extra e mantenere le informazioni sul simbolo nel markup.

+6

: before e: dopo che gli pseudo selettori CSS possono essere utilizzati solo per i tag contenitore e non funzionano per il tag di input. http://stackoverflow.com/questions/2587669/css-after-pseudo-element-on-input-field –

+1

Che peccato, hai ragione. L'ho provato solo in Safari ... – Sebastian

16

È possibile avvolgere il campo di immissione in uno span, che è position:relative;. Quindi aggiungi con :beforecontent:"€" il simbolo della tua valuta e fallo position:absolute. Lavorare 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; 
} 

Aggiornamento Se si desidera inserire il simbolo dell'euro sia a sinistra oa destra della casella di testo. Lavorare 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; 
} 
+0

Questo è molto vicino a quello che voglio, ma l'input non è stazionario alla larghezza della pagina e non può essere usato in assoluto. Relativo sposta anche il simbolo attorno. Come possiamo impostare la posizione assoluta/relativa all'ingresso in alto a sinistra? – nwolybug

+0

La valuta dell'euro è sempre mostrata sulla destra. Dovresti mettere il tuo simbolo a destra invece di sinistra. – jadok

+0

In francese e il prezzo sono sempre scritti come 2,50 € non € 2,50 e sono abbastanza sicuro che l'altro paese della zona euro faccia lo stesso. – jadok

9

Dal momento che non si può fare con ::beforecontent: '$' sugli ingressi e l'aggiunta di un elemento posizionato in modo assoluto aggiunge html in più - mi piace fare per uno sfondo SVG css in linea.

va qualcosa di simile:

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; 
} 

emette il seguente:

svg dollar sign background css

Nota: il codice deve essere tutti su una sola riga. Il supporto è abbastanza buono nei browser moderni, ma assicurati di testarlo.

+0

La migliore soluzione perché non richiede markup extra, molto elegante. Grazie! –

+1

Bella soluzione. Ho finito per aggiungere 'background-repeat: no-repeat;' come $ stava ripetendo nella casella di input. – Hamid

0

Per bootstrap sue opere

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

Non usare class = "forma-control" nel campo di immissione.

0

.currencyinput { 
 
    border: 1px inset #ccc; 
 
    padding-bottom: 1px;//FOR IE & Chrome 
 
} 
 
.currencyinput input { 
 
    border: 0; 
 
}
<span class="currencyinput">$<input type="text" name="currency"></span>

+0

Il codice senza spiegazione fa poco per aiutare l'OP o i futuri spettatori di questa risposta. Dovresti spiegare come questo risponde alla domanda. – leigero