---
title: Elements
seoTitle: Form elements
summary: Forms are one of the most important types of interaction with a website or app. Since their aim is to enable users to make a purchase, subscribe to a service or sign up to create an account, it's important to make sure they are easy to complete and help increase conversion rates. Use the available elements to create forms which are well-structured and user-friendly.
docs-libs: [nouislider]
description: Build user-friendly forms with styled inputs, selects, checkboxes, and radios. Learn about states, sizes, and layout options.
order: 1
related: [/ui/forms/validation, /ui/forms/helpers, /ui/forms/fieldset, /ui/plugins/date-picker, /ui/plugins/advanced-select]
---
import Example from '@components/Example.astro';
import CodeDocs from '@components/CodeDocs.astro';
import Icon from '@ui/Icon.astro'
## Classic inputs
Use classic, user-friendly inputs, label them appropriately and include input placeholders that will help users avoid confusion when completing a form. Add the `form-control` class to style your input controls.
```html
```
All variants of the input control are available in the examples below:
## Form control rounded
Use the `form-control-rounded` class if you prefer form controls with rounded corners.
## Form control flush
You can remove borders from your form control by adding the `form-control-flush` class.
## Input with icon
Add [icons](/ui/components/icon) to your input controls to suggest users what they should enter or inform them of the current state of a form element.
## Separated inputs
Include an additional element in your input section, such as a [button](/ui/components/button) which can be used to submit the information entered in the input control.
## Textarea and select
Use a multi-line text input control to enable users to enter longer pieces of text. The control will automatically adjust to the length of the text entered.
Add one of the available selects - either a dropdown or a multiple choice select - to let users choose from a predefined set of options.
Select
Select multiple
## Input size
Choose the size of an input control that will go well with your form design. Besides the default size, you can also use small and large input controls.
## Datalists
Use the `datalist` element to add an autocomplete feature to your input control. The list of available options will display once a user starts to type and will make it quicker to complete form sections.
## Toggle switches
Use toggle switches for the elements of your form which require choosing between two opposing states.
Toggle switches
Single switch
## Radios
Use radio buttons for the parts of your form which require users to choose one option from a set of two or more mutually exclusive options.
Radios
Inline Radios
## Checkboxes
Use checkboxes if you want to allow users to select more than one option from a set of predefined options or to turn an option on or off.
Checkboxes
Inline Checkboxes
## Range input
Add a [range slider](/ui/plugins/range-slider) to make it possible for users to set a value or range, such as a price range or a time frame.
## Input group
Create a group of input controls and place add-ons on either side of an input.
@
.tabler.io
https://.tabler.io
## Input with checkboxes or radios
Add checkboxes or radio buttons on either side of your input control.
## Input with prepended or appended text
Add text to your input control, either before or after the text which is to be entered by a user.
https://tabler.io/users/
.tabler.io
## Input with appended link
Include a link in your input control to add a clickable element within the control.
## Input with appended kbd
Include a `` in your input control to add a shortcut hint to the control.
ctrl + K
## Input with appended icon links
Add an icon link which you want to display at the end of your input control to visually represent actions which a user can take.
## Horizontal form
Put the label and the field in one `row` to place them side by side. The label takes `col-form-label` instead of `form-label`, which keeps it aligned with the field rather than sitting above it.
Add `required` to the label to append a red asterisk.
## Form footer
Wrap the buttons that close a form in `form-footer`. It only adds the top margin that separates them from the last field, so the spacing is the same in every form.
## Accessibility
- Every field needs a `label` with a `for` that matches the field id. A placeholder is not a label - it disappears as soon as the user types.
- When the design has no room for a visible label, keep the `label` and hide it with `visually-hidden` rather than dropping it.
- Tie help text and errors to the field with `aria-describedby`, so they are read together with it. See [form helpers](/ui/forms/helpers) and [validation states](/ui/forms/validation).
- Mark a required field with the `required` attribute, not only with an asterisk in the label.
- Group related checkboxes or radios in a `fieldset` with a `legend`. The legend is the only thing that names the group. See [fieldsets](/ui/forms/fieldset).
- Keep `input` types honest - `email`, `tel`, `url` and `number` change the on-screen keyboard on phones and let the browser validate for you.
- Do not disable a field to make it read-only. `disabled` removes it from the tab order and from the submitted data; `readonly` keeps both.
## SCSS variables
Use these SCSS variables to customize form controls. The default values are: