Text area
A text area is a multi-line text area component that allows users to enter and edit longer blocks of text, such as comments, messages, or descriptions.
On this page
You can find here the OUDS Text Input design guidelines.
Overview
Use a .text-area wrapper to create a text area with OUDS styles, then wrap a pair of <textarea class="text-area-field"> and <label> elements in .text-area-container. Note that the <label> must come before the <textarea>.
<div class="text-area mb-md">
<div class="text-area-container">
<label for="exampleTextArea">Additional comment</label>
<textarea class="text-area-field" id="exampleTextArea"></textarea>
</div>
</div>
<div class="text-area">
<div class="text-area-container">
<label for="exampleTextAreaPlaceholder">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaPlaceholder" placeholder="Enter your comment here"></textarea>
</div>
</div> Variants
Outlined
Add .text-area-container-outlined for a minimalist text area with a transparent background and a visible stroke outlining the field.
<div class="text-area">
<div class="text-area-container text-area-container-outlined">
<label for="exampleTextAreaOutlined">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaOutlined"></textarea>
</div>
</div> Rounded
Add .text-area-container-rounded for a finish with rounded corners.
<div class="text-area mb-md">
<div class="text-area-container text-area-container-rounded">
<label for="exampleTextAreaRounded">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaRounded"></textarea>
</div>
</div>
<div class="text-area">
<div class="text-area-container text-area-container-rounded text-area-container-outlined">
<label for="exampleTextAreaRoundedAlt">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaRoundedAlt"></textarea>
</div>
</div> Helper text
To display a helper text below text areas, add a .text-input-helper as a sibling of a .text-area-container.
Helper text should be explicitly associated with the text area it relates to using the aria-describedby attribute. This will ensure that assistive technologies—such as screen readers—will announce this helper text when the user focuses or enters the input.
Your have 180 characters left.
<div class="text-area">
<div class="text-area-container">
<label for="textAreaWithHelperText">Additional comment</label>
<textarea id="textAreaWithHelperText" class="text-area-field" aria-describedby="textAreaWithHelperTextHelpBlock"></textarea>
</div>
<p id="textAreaWithHelperTextHelpBlock" class="text-input-helper">
Your have <strong>180</strong> characters left.
</p>
</div> Helper link
If the helper text is not sufficient, it's possible to offer the user an additional help link. The helper link can also be displayed on its own without helper text.
To display a helper link below inputs, use a standard small link with .link and .link-sm classes as a sibling of a .text-area-container.
If a helper link is used in conjunction with a helper text, the aria-describedby attribute should refer to the helper text and the helper link should to be referenced by the aria-labelledby attribute.
<div class="text-area mb-md">
<div class="text-area-container">
<label for="textAreaWithHelperTextLink">Additional comment</label>
<textarea id="textAreaWithHelperTextLink" aria-describedby="feedbackTextHelpBlock" aria-labelledby="feedbackTextHelpMore" class="text-area-field"></textarea>
</div>
<p id="feedbackTextHelpBlock" class="text-input-helper">
You have <strong>180</strong> characters left.
</p>
<a href="#" id="feedbackTextHelpMore" class="link link-sm">
More information
</a>
</div>
<div class="text-area">
<div class="text-area-container mt-lg">
<label for="textAreaHelperLink">Additional comment</label>
<textarea id="textAreaHelperLink" aria-describedby="feedbackTextHelpLink" class="text-area-field"></textarea>
</div>
<a href="#" id="feedbackTextHelpLink" class="link link-sm">
More information
</a>
</div> States
Disabled
Add the disabled boolean attribute on an input to give it a grayed out appearance, remove pointer events, and prevent focusing.
<div class="text-area mb-md">
<div class="text-area-container">
<label for="exampleTextAreaDisabled">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaDisabled" disabled>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nisi turpis, vel dignissim enim imperdiet eu. Ut quis mollis erat. Pellentesque id leo pellentesque urna volutpat placerat non nec sem. Integer mauris eros, congue nec magna sit amet, pulvinar laoreet diam. Nam tristique nisl ac nisi aliquet, et molestie turpis maximus.</textarea>
</div>
</div>
<div class="text-area">
<div class="text-area-container text-area-container-outlined">
<label for="exampleTextAreaOutlinedDisabled">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaOutlinedDisabled" disabled>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nisi turpis, vel dignissim enim imperdiet eu. Ut quis mollis erat. Pellentesque id leo pellentesque urna volutpat placerat non nec sem. Integer mauris eros, congue nec magna sit amet, pulvinar laoreet diam. Nam tristique nisl ac nisi aliquet, et molestie turpis maximus.</textarea>
</div>
</div> Readonly
Add the readonly boolean attribute on an input to prevent modification of the input’s value. readonly inputs can still be focused and selected, while disabled inputs cannot.
<div class="text-area mb-md">
<div class="text-area-container">
<label for="exampleTextAreaReadonly">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaReadonly" readonly>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nisi turpis, vel dignissim enim imperdiet eu. Ut quis mollis erat. Pellentesque id leo pellentesque urna volutpat placerat non nec sem. Integer mauris eros, congue nec magna sit amet, pulvinar laoreet diam. Nam tristique nisl ac nisi aliquet, et molestie turpis maximus.</textarea>
</div>
</div>
<div class="text-area">
<div class="text-area-container text-area-container-outlined">
<label for="exampleTextAreaOutlinedReadonly">Additional comment</label>
<textarea class="text-area-field" id="exampleTextAreaOutlinedReadonly" readonly>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer viverra nisi turpis, vel dignissim enim imperdiet eu. Ut quis mollis erat. Pellentesque id leo pellentesque urna volutpat placerat non nec sem. Integer mauris eros, congue nec magna sit amet, pulvinar laoreet diam. Nam tristique nisl ac nisi aliquet, et molestie turpis maximus.</textarea>
</div>
</div> Invalid
The invalid state is the equivalent of the ‘Error’ state that you can find in the design specification.
To display an invalid input, add .is-invalid to a .text-area-field within the .text-area-container. Please take a look at our Validation page to learn more.
For accessibility purpose, the invalid should be associated with a .text-input-error as a sibling of a .text-area-container and related to it with an aria-labelledby attribute when displayed. Note that the .text-input-error will replace the helper text, so it should be descriptive enough to convey the error.
You have 180 characters left.
You have 20 characters too many.
<div class="text-area mb-md">
<div class="text-area-container">
<label for="exampleTextAreaInvalid">Additional comment</label>
<textarea class="text-area-field is-invalid" id="exampleTextAreaInvalid" aria-describedby="commentTextHelpBlock" aria-labelledby="commentFeedback"></textarea>
</div>
<p id="commentTextHelpBlock" class="text-input-helper">
You have <strong>180</strong> characters left.
</p>
<p id="commentFeedback" class="text-input-error">
You have <strong>20</strong> characters too many.
</p>
</div>
<div class="text-area">
<div class="text-area-container text-area-container-outlined">
<label for="exampleTextAreaOutlinedInvalid">Additional comment</label>
<textarea class="text-area-field is-invalid" id="exampleTextAreaOutlinedInvalid" aria-describedby="commentTextHelpBlockOutlined" aria-labelledby="commentFeedbackOutlined"></textarea>
</div>
<p id="commentTextHelpBlockOutlined" class="text-input-helper">
You have <strong>180</strong> characters left.
</p>
<p id="commentFeedbackOutlined" class="text-input-error">
You have <strong>180</strong> characters left.
</p>
<a href="#" id="commentTextHelpLinkOutlined" class="link link-sm">
More information
</a>
</div>
Bootstrap
$enable-bootstrap-compatibility: true
This part is enabled only when $enable-bootstrap-compatibility is set to true. Read more
about Bootstrap compatibility.
Example
Form controls are styled with a mix of Sass and CSS variables, allowing them to adapt to color modes and support any customization method.
<div class="mb-md">
<label for="exampleFormControlInput1" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>
<div class="mb-md">
<label for="exampleFormControlTextarea1" class="form-label">Example textarea</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div> Sizing
Set heights using classes like .form-control-lg and .form-control-sm.
<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg" aria-label=".form-control-lg example">
<input class="form-control" type="text" placeholder="Default input" aria-label="default input example">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm" aria-label=".form-control-sm example"> Form text
Block-level or inline-level form text can be created using .form-text.
Form text should be explicitly associated with the form control it relates to using the aria-describedby attribute. This will ensure that assistive technologies—such as screen readers—will announce this form text when the user focuses or enters the control.
Form text below inputs can be styled with .form-text. If a block-level element will be used, a top margin is added for easy spacing from the inputs above.
<label for="inputPassword5" class="form-label">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<div id="passwordHelpBlock" class="form-text">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</div> Inline text can use any typical inline HTML element (be it a <span>, <small>, or something else) with nothing more than the .form-text class.
<div class="row g-3 align-items-center">
<div class="col-auto">
<label for="inputPassword6" class="col-form-label">Password</label>
</div>
<div class="col-auto">
<input type="password" id="inputPassword6" class="form-control" aria-describedby="passwordHelpInline">
</div>
<div class="col-auto">
<span id="passwordHelpInline" class="form-text">
Must be 8-20 characters long.
</span>
</div>
</div> Disabled
Add the disabled boolean attribute on an input to give it a grayed out appearance, remove pointer events, and prevent focusing.
<input class="form-control" type="text" placeholder="Disabled input" aria-label="Disabled input example" disabled>
<input class="form-control" type="text" value="Disabled readonly input" aria-label="Disabled input example" disabled readonly> Readonly
Add the readonly boolean attribute on an input to prevent modification of the input’s value. readonly inputs can still be focused and selected, while disabled inputs cannot.
<input class="form-control" type="text" value="Readonly input here..." aria-label="readonly input example" readonly> Readonly plain text
If you want to have <input readonly> elements in your form styled as plain text, replace .form-control with .form-control-plaintext to remove the default form field styling and preserve the correct margin and padding.
<div class="mb-md row">
<label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com">
</div>
</div>
<div class="mb-md row">
<label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword">
</div>
</div> <form class="row g-3">
<div class="col-auto">
<label for="staticEmail2" class="visually-hidden">Email</label>
<input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="email@example.com">
</div>
<div class="col-auto">
<label for="inputPassword2" class="visually-hidden">Password</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="Password">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-md">Confirm identity</button>
</div>
</form> File input
<div class="mb-md">
<label for="formFile" class="form-label">Default file input example</label>
<input class="form-control" type="file" id="formFile">
</div>
<div class="mb-md">
<label for="formFileMultiple" class="form-label">Multiple files input example</label>
<input class="form-control" type="file" id="formFileMultiple" multiple>
</div>
<div class="mb-md">
<label for="formFileDisabled" class="form-label">Disabled file input example</label>
<input class="form-control" type="file" id="formFileDisabled" disabled>
</div>
<div class="mb-md">
<label for="formFileSm" class="form-label">Small file input example</label>
<input class="form-control form-control-sm" id="formFileSm" type="file">
</div>
<div>
<label for="formFileLg" class="form-label">Large file input example</label>
<input class="form-control form-control-lg" id="formFileLg" type="file">
</div> Color
Set the type="color" and add .form-control-color to the <input>. We use the modifier class to set fixed heights and override some inconsistencies between browsers.
<label for="exampleColorInput" class="form-label">Color picker</label>
<input type="color" class="form-control form-control-color" id="exampleColorInput" value="#563d7c" title="Choose your color"> Datalists
Datalists allow you to create a group of <option>s that can be accessed (and autocompleted) from within an <input>. These are similar to <select> elements, but come with more menu styling limitations and differences. While most browsers and operating systems include some support for <datalist> elements, their styling is inconsistent at best.
Learn more about support for datalist elements.
<label for="exampleDataList" class="form-label">Datalist example</label>
<input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search...">
<datalist id="datalistOptions">
<option value="San Francisco">
<option value="New York">
<option value="Seattle">
<option value="Los Angeles">
<option value="Chicago">
</datalist>