Files
webawesome/source/docs/forms.md

394 lines
10 KiB
Markdown
Raw Normal View History

2017-08-08 17:41:40 -04:00
---
layout: default.html
title: Forms
description: Default form control styles.
---
## Forms
Shoelace gives you beautiful forms without hassle. Most form controls dont need a special class for styling.
### Form Controls
Form controls are styled at 100% of the width of their parent element.
<table class="table table-bordered">
<thead>
<tr>
<th>Input Type</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>&lt;input type=&quot;checkbox&quot;&gt;</code></td>
<td>
<label><input type="checkbox" checked> Checkbox 1</label><br>
<label><input type="checkbox"> Checkbox 2</label>
</td>
</tr>
<tr>
<td><code>&lt;input type=&quot;color&quot;&gt;</code></td>
<td><input type="color" value="#0099dd"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;date&quot;&gt;</code></td>
<td><input type="date"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;email&quot;&gt;</code></td>
<td><input type="email"></td>
</tr>
<tr>
<td>
<code>&lt;input type=&quot;file&quot;&gt;</code>
<br>
2017-08-13 15:41:38 -04:00
<span class="text-small text-secondary">
2017-08-12 17:53:57 +02:00
File inputs arent supported. Use a [file button](buttons.html#file-buttons) instead.
2017-08-08 17:41:40 -04:00
</span>
</td>
<td>
<label class="button button-block">Select File <input type="file"></label>
</td>
</tr>
<tr>
<td><code>&lt;input type=&quot;number&quot;&gt;</code></td>
<td><input type="number"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;password&quot;&gt;</code></td>
<td><input type="password"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;radio&quot;&gt;</code></td>
<td>
<label><input type="Radio" name="radio" checked> Radio 1</label><br>
<label><input type="Radio" name="radio"> Radio 2</label>
</td>
</tr>
<tr>
<td><code>&lt;input type=&quot;range&quot;&gt;</code></td>
<td><input type="range"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;search&quot;&gt;</code></td>
<td><input type="search"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;text&quot;&gt;</code></td>
<td><input type="text"></td>
</tr>
<tr>
<td><code>&lt;input type=&quot;time&quot;&gt;</code></td>
<td><input type="time"></td>
</tr>
<tr>
<td><code>&lt;select&gt;</code></td>
<td>
<select>
<option>Item 1</option>
<option>Item 2</option>
<option>Item 3</option>
</select>
</td>
</tr>
<tr>
<td><code>&lt;textarea&gt;</code></td>
<td><textarea rows="4"></textarea></td>
</tr>
</tbody>
</table>
2017-08-17 14:13:56 -04:00
You can change the size of most form controls with the `input-[xs|sm|lg|xl]` modifiers.
2017-08-08 17:41:40 -04:00
```html
2017-08-17 14:13:56 -04:00
<input type="text" class="input-xs" placeholder="XS">
<input type="text" class="input-sm" placeholder="SM">
2017-08-08 17:41:40 -04:00
<input type="text" placeholder="Default">
2017-08-17 14:13:56 -04:00
<input type="text" class="input-lg" placeholder="LG">
<input type="text" class="input-xl" placeholder="XL">
2017-08-08 17:41:40 -04:00
2017-08-17 14:13:56 -04:00
<select class="input-xs"><option>Item</option></select>
<select class="input-sm"><option>Item</option></select>
2017-08-08 17:41:40 -04:00
<select><option>Item</option></select>
2017-08-17 14:13:56 -04:00
<select class="input-lg"><option>Item</option></select>
<select class="input-xl"><option>Item</option></select>
2017-08-08 17:41:40 -04:00
```
2017-08-26 10:04:07 -04:00
<div class="row">
<div class="col-sm-6">
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<input type="text" class="input-xs" placeholder="XS">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<input type="text" class="input-sm" placeholder="SM">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<input type="text" placeholder="Default">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<input type="text" class="input-lg" placeholder="LG">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<input type="text" class="input-xl" placeholder="XL">
</div>
</div>
2017-08-26 10:04:07 -04:00
<div class="col-sm-6">
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<select class="input-xs"><option>XS</option></select>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<select class="input-sm"><option>SM</option></select>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<select><option>Default</option></select>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<select class="input-lg"><option>LG</option></select>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<select class="input-xl"><option>XL</option></select>
</div>
</div>
2017-08-08 17:41:40 -04:00
</div>
Disabled form controls look like this:
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<input type="text" placeholder="Input" disabled>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label><input type="checkbox" disabled> Checkbox</label>
<label><input type="radio" disabled> Radio</label>
</div>
Read-only form controls look like this:
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<input type="text" readonly value="This is read-only">
</div>
### Form Control Spacing
2017-08-23 09:59:22 -04:00
For proper spacing of individual form controls, wrap them in `input-field` containers.
2017-08-08 17:41:40 -04:00
```html
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Name</label>
<input type="text">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Password</label>
<input type="password">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label><input type="checkbox"> Remember me</label>
</div>
```
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Username</label>
<input type="text">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Password</label>
<input type="password">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label><input type="checkbox"> Remember me</label>
</div>
### Input Groups
Form controls and buttons can be grouped by wrapping them in `input-group` containers.
```html
<div class="input-group">
<input type="text">
<button type="button" class="button">Submit</button>
</div>
<div class="input-group">
<button type="button" class="button">Submit</button>
<input type="text">
</div>
<div class="input-group">
<input type="text" placeholder="First">
<input type="text" placeholder="Middle">
<input type="text" placeholder="Last">
<button type="button" class="button">Submit</button>
</div>
<div class="input-group">
<button type="button" class="button">Option 1</button>
<button type="button" class="button">Option 2</button>
<button type="button" class="button">Option 3</button>
</div>
```
2017-08-13 15:41:38 -04:00
<div class="input-group">
<input type="text">
<button type="button">Submit</button>
2017-08-08 17:41:40 -04:00
</div>
2017-08-13 15:41:38 -04:00
<div class="input-group">
<button type="button">Submit</button>
<input type="text">
2017-08-08 17:41:40 -04:00
</div>
2017-08-13 15:41:38 -04:00
<div class="input-group">
<input type="text" placeholder="First">
<input type="text" placeholder="Middle">
<input type="text" placeholder="Last">
<button type="button">Submit</button>
2017-08-08 17:41:40 -04:00
</div>
2017-08-13 15:41:38 -04:00
<div class="input-group">
<button type="button">Option 1</button>
<button type="button">Option 2</button>
<button type="button">Option 3</button>
2017-08-08 17:41:40 -04:00
</div>
### Input Addons
2017-08-17 14:13:56 -04:00
To create an input addon, use `<span class="input-addon">`. Addons can appear anywhere inside an input group. Use the `input-addon-[xs|sm|lg|xl]` modifiers to change the size to match adjacent form controls.
2017-08-08 17:41:40 -04:00
```html
<div class="input-group">
2017-08-17 14:13:56 -04:00
<span class="input-addon input-addon-xs">$</span>
<input type="text" class="input-xs">
<span class="input-addon input-addon-xs">.00</span>
</div>
<div class="input-group">
<span class="input-addon input-addon-sm">$</span>
<input type="text" class="input-sm">
<span class="input-addon input-addon-sm">.00</span>
2017-08-08 17:41:40 -04:00
</div>
<div class="input-group">
<span class="input-addon">$</span>
<input type="text">
<span class="input-addon">.00</span>
</div>
<div class="input-group">
2017-08-17 14:13:56 -04:00
<span class="input-addon input-addon-lg">$</span>
<input type="text" class="input-lg">
<span class="input-addon input-addon-lg">.00</span>
</div>
<div class="input-group">
<span class="input-addon input-addon-xl">$</span>
<input type="text" class="input-xl">
<span class="input-addon input-addon-xl">.00</span>
2017-08-08 17:41:40 -04:00
</div>
```
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<div class="input-group">
2017-08-17 14:13:56 -04:00
<span class="input-addon input-addon-xs">$</span>
<input type="text" class="input-xs">
<span class="input-addon input-addon-xs">.00</span>
</div>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<div class="input-group">
<span class="input-addon input-addon-sm">$</span>
<input type="text" class="input-sm">
<span class="input-addon input-addon-sm">.00</span>
2017-08-08 17:41:40 -04:00
</div>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<div class="input-group">
<span class="input-addon">$</span>
<input type="text">
<span class="input-addon">.00</span>
</div>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<div class="input-group">
2017-08-17 14:13:56 -04:00
<span class="input-addon input-addon-lg">$</span>
<input type="text" class="input-lg">
<span class="input-addon input-addon-lg">.00</span>
</div>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-17 14:13:56 -04:00
<div class="input-group">
<span class="input-addon input-addon-xl">$</span>
<input type="text" class="input-xl">
<span class="input-addon input-addon-xl">.00</span>
2017-08-08 17:41:40 -04:00
</div>
</div>
### Form Groups
Related form controls can be grouped in a `<fieldset>`. An optional `<legend>` can be used to display a name for the group.
```html
<fieldset>
<legend>User</legend>
...
</fieldset>
```
<fieldset>
<legend>Login</legend>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Username</label>
<input type="text">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>Password</label>
<input type="password">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<label>
<input type="checkbox"> Remember me
</label>
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field">
2017-08-08 17:41:40 -04:00
<button type="button">Login</button>
</div>
</fieldset>
### Validation
2017-08-23 09:59:22 -04:00
Form controls can be made valid or invalid using the `input-valid` and `input-invalid` modifiers. Its better to apply modifiers to the surrounding `input-field` so labels will be styled as well, but modifiers can be applied directly to form controls as needed.
2017-08-08 17:41:40 -04:00
```html
2017-08-23 09:59:22 -04:00
<div class="input-field input-valid">
2017-08-08 17:41:40 -04:00
<label>Valid</label>
<input type="text">
</div>
2017-08-23 09:59:22 -04:00
<div class="input-field input-invalid">
2017-08-08 17:41:40 -04:00
<label>Invalid</label>
<input type="text">
</div>
```
2017-08-26 10:04:07 -04:00
<div class="row">
<div class="col-sm-6">
2017-08-23 09:59:22 -04:00
<div class="input-field input-valid">
2017-08-17 14:13:56 -04:00
<label>Valid</label>
<input type="text">
</div>
2017-08-08 17:41:40 -04:00
</div>
2017-08-26 10:04:07 -04:00
<div class="col-sm-6">
2017-08-23 09:59:22 -04:00
<div class="input-field input-invalid">
2017-08-26 10:04:07 -04:00
<label>Invalid</label>
<input type="text">
2017-08-08 17:41:40 -04:00
</div>
</div>