A CSS component for rendering form fields. Ensures inputs, labels and help text behave consistently across browsers.
Read more about SUIT CSS.
FormField- Containing element. Apply state classes to thisFormField-input- Consistent rendering of various form inputsFormField-select- Used for select elements only (instead ofFormField-input)FormField-label- Label text for the inputFormField-text- Used to display help text or validation messagesFormField-check- Wraps aroundinputandlabelwhen using either radio or checkbox inputsFormField-checkInput- Theinputclass when insideFormField-checkFormField-checkLabel- Thelabelwhen insideFormField-check
is-error- Applies the error colours to each elementis-warning- Applies the warning colours to each elementis-success- Applies the success colours to each element
This works with other inputs such as textarea, range and file.
<div class="FormField">
<label class="FormField-label" for="surname">Surname</label>
<input class="FormField-input" type="text" id="surname" placeholder="Enter your surname">
<p class="FormField-text">Some optional text to the user about the input field</p>
</div>Select elements require their own class name to ensure consistent rendering in Blink/Webkit.
<div class="FormField">
<label class="FormField-label" for="select">Select</label>
<select class="FormField-select">
<option>Some option</option>
<option>Another option</option>
</select>
</div><label class="FormField">
<span class="FormField-label">Surname</span>
<input class="FormField-input" type="text" placeholder="Enter your surname">
<p class="FormField-text">Some text to the user about the input field</p>
</label>Checkbox and radio inputs require an additional container and different class names.
This controls positioning and allows the FormField-text to be rendered beneath:
<div class="FormField">
<label class="FormField-check">
<input class="FormField-checkInput" name="shopping" type="radio">
<span class="FormField-checkLabel">Apples</span>
</label>
<label class="FormField-check">
<input class="FormField-checkInput" name="shopping" type="radio">
<span class="FormField-checkLabel">Oranges</span>
</label>
<span class="FormField-text">Some text about the choices above</span>
</div>A state class of is-error, is-success or is-warning can be applied to the
root element:
<div class="FormField is-error">
<label class="FormField-label">Surname</label>
<input class="FormField-input" type="text" placeholder="Enter your surname">
<p class="FormField-text">There was a problem!</p>
</div>FormField leaves the layout concerns to another component or utility, for
example suitcss-components-grid.
Can be handled by a component that controls the <form/> itself:
<form class="UserForm">
<div class="UserForm-field">
<div class="FormField">
// ...
</div>
</div>
<div class="UserForm-field">
<div class="FormField">
// ...
</div>
</div>
</form>The following achieves an inline form effect
<div class="FormField">
<div class="Grid Grid--alignMiddle">
<div class="Grid-cell u-size2of12">
<label class="FormField-label u-textBold">Username</label>
</div>
<div class="Grid-cell u-sizeFill">
<input class="FormField-input" type="text" value="SomeCoolUsername">
<p class="FormField-text">That username is already taken!</p>
</div>
</div>
</div>--FormField-label-color--FormField-label-marginBottom
--FormField-input-borderColor--FormField-input-borderRadius--FormField-input-borderWidth--FormField-input-color--FormField-input-fontFamily--FormField-input-fontSize--FormField-input-padding
--FormField-text-fontSize--FormField-text-marginTop
--FormField-select-height
--FormField-check-gutter- Space between checkbox/radio and the label
--FormField-input-onDisabled-backgroundColor--FormField-onError-color--FormField-onWarning-color--FormField-onSuccess-color
Install Node (comes with npm).
npm install
To generate a build:
npm run build
To lint code with postcss-bem-linter and stylelint
npm run lint
To generate the testing build.
npm run build-test
To watch the files for making changes to test:
npm run watch
Basic visual tests are in test/index.html.
- Google Chrome (latest)
- Opera (latest)
- Firefox (latest)
- Safari 7.1+
- Internet Explorer 10+
- Android 5+ (Chrome 55, Firefox 51)
- iOS 7+ (Safari)
- Windows phone 8.1+