Forms


Form controls have global styling defined at the HTML element level.

Most labels and controls are 100% the width of the <form> parent element, unless you specify inline layout.

Single-line text field

<input type="text"> is a single-line text field.

Vanilla also styles HTML’s other single-line field types: password, datetime, datetime-local, date, month, time, week, number, email, url, search and tel. For the search type, see Search box.

Multi-line text field

<textarea> is a multi-line text field.

Note: The attribute readonly disables the input but it still retains a default cursor.

Checkbox

Use checkboxes to select one or more options, default checkboxes can appear in three states: selected, unselected and disabled.

Updated

By default, checkboxes are vertically aligned to the baseline of text wrapped in a label, h5, h6, or p tag. If you need to align them to other elements, use one of the following classes: is-h1, is-h2, is-h3, is-h4, is-h5, is-muted-heading, is-muted-inline-heading, is-inline-label, or is-table-header.

Radio button

Use radio buttons to select one or more options, our radio buttons can appear in four states: both selected, unselected and disabled.

Updated

By default, radio buttons are vertically aligned to the baseline of text wrapped in a label, h5, h6, or p tag. If you need to align them to other elements, use one of the following classes: is-h1, is-h2, is-h3, is-h4, is-h5, is-muted-heading, is-muted-inline-heading, is-inline-label, or is-table-header.

Select

Use the <select> element to create a drop-down list.

Use the multiple attribute to create a multiple select control.

Range

New

The <input type="range"> allows a user to select from a specified range of values, where the precise value is not considered important.

Fieldset

You can use the <fieldset> element to divide the form into different logical sections.

Inline

By applying the class .p-form--inline and wrapping any form control in .p-form__group you can change the layout style of any form to be inline.

Stacked

By applying the class .p-form--stacked and wrapping any form control in .p-form__group you can change the layout style of any form to be stacked.

Disabled

Adding the disabled attribute to an input will prevent user interaction.

Note:All disabled inputs have an opacity of `0.5` and `not-allowed` cursor on hover.

Validation

To use form validation feedback - which includes feedback messages, icons and border colours - wrap individual input elements in a p-form-validation and additionally apply the .is-error, .is-caution or .is-success to the wrapper as appropriate.

If your form uses select elements then you will additionally need to wrap only the <select> element in a wrapper with the class p-form-validation__select-wrapper to mitigate some of the quirks of this specific HTML element across browsers.

Descriptive text relating to the element's validation status should use the class p-form-validation__message.

Required

By applying the class .is-required the attribute specifies that an input field must be filled out before submitting the form.

Dense form elements

In contexts where vertical space is limited, e.g. inside a table row, you might prefer form elements with reduced vertical padding. Add class .is-dense to achieve that:

Import

To import just this base element into your project, copy the snippet below and include it in your main Sass file.

@import 'patterns_forms';

To add form help text or validation into your project, copy either or both snippets below and include it in your main Sass file.

@import 'patterns_form-help-text';
@import 'patterns_form-validation';

For more information see Customising Vanilla in your projects, which includes overrides and importing instructions.

Design

For more information view the forms design spec, which includes the specification in markdown format and a PNG image.