606

I have this text input in a form:

<input type="text"
       cols="40" 
       rows="5" 
       style="width:200px; height:50px;" 
       name="Text1" 
       id="Text1" 
       value="" />

I am trying to get it to take multiple lines of input. The width and height make the box to be bigger, but the user can enter text all (s)he wants yet it fills one line only.

How do I make the input more like a textarea?

1
  • 1
    See https://css-tricks.com/the-cleanest-trick-for-autogrowing-textareas/ for a way to autogrow textareas using HTML and CSS, until there is a native way. Commented Aug 17, 2024 at 14:43

10 Answers 10

952

You need to use a textarea to get multiline handling.

<textarea name="Text1" cols="40" rows="5"></textarea>

Sign up to request clarification or add additional context in comments.

7 Comments

Yes, but, textarea doesn't support the pattern attribute. So darn.
hmmmm, what. Im looking for multiple insert for type text. why this people ask this ques.
@AlexH your comment is very important and helpful indeed, thanks.
what I don't like about this is that in JQuery, you can't set textarea value using val(). You have to append to it. :(
@AlexH: You could remove your comment and add it again if you want to alter anything.
|
87

You can't. At the time of writing, the only HTML form element that's designed to be multi-line is <textarea>.

Comments

68

It is possible to make a text-input multi-line by giving it the word-break: break-word; attribute. (Only tested this in Chrome)

3 Comments

Thanks! I noticed that Chrome was allowing multiple lines for inputs, which I totally didn't want to, and the reason was word-break which was inherited from the body element
Looks good in Chrome 39 and Safari 8.0.2, but not Firefox 34 in my brief testing. :( jsfiddle.net/msybs9g7
This solution is outdated and not supported in most browsers anymore. Use <textarea> instead
65

Use the textarea

<textarea name="textarea" style="width:250px;height:150px;"></textarea>

don't leave any space between the opening and closing tags Or Else This will leave some empty lines or spaces.

1 Comment

Thanks, I was wondering if the height would work instead of rows.
49

If you need Multiline Textarea with Auto Height Increase feature, You can use following simple javascript,

function auto_height(elem) {  /* javascript */
    elem.style.height = '1px';
    elem.style.height = `${elem.scrollHeight}px`;
}
.auto_height { /* CSS */
  width: 100%;
}
<textarea rows="1" class="auto_height" onInput="auto_height(this)"></textarea>

8 Comments

Thanks. I modified this and used it in my react textarea
P.S you want to add overflow: hidden to the textarea, or else it will add the extra height few letters before the actual needed one.
For me this caused the textarea to slightly increase in height when you start typing. A workaround is to set padding to 0 and restore it after setting the height: codepen.io/mrexodia/pen/LYdrBqM
Probably nered a ResizeObserver too for if the window is size changed
in react.js I applied it and it worked.
|
21

Check this:

The TEXTAREA element creates a multi-line text input control

Comments

16

You should use textarea to support multiple-line inputs.

<textarea rows="4" cols="50">
Here you can write some text to display in the textarea as the default text
</textarea>

Comments

10

Use <div contenteditable="true"> (supported well) with storing to <input type="hidden">.

HTML:

<div id="multilineinput" contenteditable="true"></div>
<input type="hidden" id="detailsfield" name="detailsfield">

jQuery:

$("#multilineinput").on('keyup',function(e) {   
    $("#detailsfield").val($(this).text()); //store content to input[type=hidden]
});
//optional - one line but wrap it
$("#multilineinput").on('keypress',function(e) {    
    if(e.which == 13) { //on enter
        e.preventDefault(); //disallow newlines     
        // here comes your code to submit
    }
});

Comments

-7

If you're using React, you could use the 3rd-party UI library MUI. It has a custom proprietary <Input> element with a multiline option.

As LSE commented, ultimately it gets rendered as <textarea>.

  <FormControl>
    <InputLabel htmlFor="textContract">{`textContract`}</InputLabel>
    <Input
      id="textContract"
      multiline
      rows="30"
      type="text"
      value={props.textContract}
      onChange={() => {}}
    />
  </FormControl>

https://material-ui.com/components/text-fields/#multiline

1 Comment

From the documentation : The multiline prop transforms the text field into a <textarea> element.. So even though it looks like an <input>, it's rendering a <textarea>.
-14

If you don't need to edit it, you can use a

<span>text here</span>

It will expand with the text.

1 Comment

This would remove the input element completely; doesn't help at all.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.