How to calculate the width of an input HTML element so that it matches the size of its content ? I already update an input on the fly as the user types :
<input type='text' onkeydown='this.size=this.value.length' />
However, this does not seem completely correct because it does not take into account the fact that some characters are longer than others :
- I will get more and more whitespace if I type only some "l" characters
- the size will be insufficient if I type only some "w" characters
How to proceed?
PS: Why I want to do this (already answered this in a answer that was deleted)? I have sentences in which I have to replace the bracket content by inputs (ex: [user] is [years] old). I have no idea what the sentence can be, so I do not know an adequate length for the inputs, and I would like to keep it readable on one line (avoiding too much whitespace).
You could use a (hidden) canvas and the
measureText()
method of the context to get your string's width.EDIT:
Looks fast enough.
First, define some CSS...
...then use some JavaScript...
jsFiddle.
You will want to choose a reasonable start width for your
input
element too.If using jQuery is not a problem, here is a demo I put together on jsFiddle. It uses an
Autoexpand.js
file that does what you want. Check out the last example in the fiddle.Some specifics:
.keyup
and.keypress
for the fastest response possible.Also included in the jsFiddle are links to download a pastebin version of the fiddle since jsFiddle Sandbox breaks in IE8. That said, it also works in IE7 too!
First : Add this div where you want
Second : Use this function