Sulla base della risposta di Michael, ho creato la mia versione di questo usando jQuery. Penso che sia una versione più pulita / più breve della maggior parte delle risposte qui e sembra riuscire a fare il lavoro.
Sto facendo la stessa cosa della maggior parte delle persone qui usando un intervallo per scrivere il testo di input e poi ottenere la larghezza. Quindi sto impostando la larghezza quando le azioni keyupeblur sono chiamati.
Ecco un codice funzionante . Questo codice mostra come può essere usato con più campi di input.
Struttura HTML:
<input type="text" class="plain-field" placeholder="Full Name">
<span style="display: none;"></span>
jQuery:
function resizeInputs($text) {
var text = $text.val().replace(/\s+/g, ' '),
placeholder = $text.attr('placeholder'),
span = $text.next('span');
span.text(placeholder);
var width = span.width();
if(text !== '') {
span.text(text);
var width = span.width();
}
$text.css('width', width + 5);
};
La funzione sopra ottiene il valore di input, taglia gli spazi extra e imposta il testo nell'intervallo per ottenere la larghezza. Se non c'è testo, ottiene invece il segnaposto e lo inserisce invece nell'intervallo. Una volta inserito il testo nell'intervallo, imposta la larghezza dell'input. La + 5larghezza è perché senza che l'input viene tagliato un po 'nel browser Edge.
$('.plain-field').each(function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('keyup blur', function() {
var $text = $(this);
resizeInputs($text);
});
$('.plain-field').on('blur', function() {
var $text = $(this).val().replace(/\s+/g, ' ');
$(this).val($text);
});
Se questo potrebbe essere migliorato, per favore fatemi sapere in quanto questa è la soluzione più pulita che potrei trovare.