Forms are a grouping of input controls that allow a user to submit information to your application.
Do
City
and State
, Start
and End
, Min
and Max
)Don’t
Do
Don’t
<form role="form" class="form" style="padding: 0 15px;">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample1">
<label class="mdl-textfield__label static-label" for="sample1">static-label</label>
<span class="mdl-textfield__error">Only alphabet and no spaces</span>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample1">
<label class="mdl-textfield__label" for="sample1">placeholder label</label>
<span class="mdl-textfield__error">Only alphabet and no spaces</span>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-textfield--full-width">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample3">
<label class="mdl-textfield__label" for="sample3">floating-label</label>
<span class="mdl-textfield__error">Only alphabet and no spaces</span>
</div>
</form>
Required fields should be marked as required.
<form role="form" class="form">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width is-required">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample1" aria-required="true" />
<label class="mdl-textfield__label static-label" for="sample1">static-label <span class="required-field"></span></label>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Only alphabet and no spaces</span>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--full-width is-required">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample2" aria-required="true" />
<label class="mdl-textfield__label" for="sample2">placeholder label <span class="required-field"></span></label>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Only alphabet and no spaces</span>
</div>
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-textfield--full-width is-required">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample3" aria-required="true">
<label class="mdl-textfield__label" for="sample3">floating-label <span class="required-field"></span></label>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Only alphabet and no spaces</span>
</div>
</form>
There are two main types of form validation, often used together.
This field is required.
)The email or password you entered is incorrect.
, and Please fix the 3 errors.
)For input fields that are cramped, you may need to resort to using a popover error message.
Do
Email is already in use
rather than There was an error
)Don’t
<form class="form" style="max-width: 450px;" role="form">
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<input class="mdl-textfield__input" type="text" pattern="[A-Z,a-z]*" id="sample11" />
<label class="mdl-textfield__label" for="sample11">Type any number(s) here...</label>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Only alphabet and no spaces</span>
</div>
</form>
<form>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" id="sample12" />
<label class="mdl-textfield__label" for="sample12">Type any alphabet(s) here...</label>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Only numbers</span>
</div>
</form>
Help text can be placed at the top of the form, under the heading of a form group, under an individual form field, or as a popover when the field is focused.
<form class="form" style="max-width: 450px;" role="form">
<div class="form-group">
<div class="form-group-heading">
<h4>Public profile</h4>
<p class="help-block">This information will appear on your public profile.</p>
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<label for="ht3" class="mdl-textfield__label">Full name</label>
<input class="mdl-textfield__input" type="text" pattern="([a-zA-Z]{3,30}\s*)+[a-zA-Z]{3,30}" id="ht3">
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Not a valid full name</span>
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<label for="ht4" class="mdl-textfield__label">Email</label>
<input class="mdl-textfield__input" type="text" pattern="^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$" id="ht4">
<p class="mdl-textfield__help">This is how people will contact you.</p>
<span class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Not a valid email address</span>
</div>
</div>
</form>
Most input fields have technical character limits. The system should handle this gracefully in all scenarios.
Text box
Text area
<form class="form" style="max-width: 450px;" role="form">
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<label for="ht4" class="mdl-textfield__label">Email</label>
<input class="mdl-textfield__input" type="text" maxlength="25" data-charlimit=" 'target' : '.mdl-textfield__counter', 'limit' : 25 " pattern="^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$" id="ht4">
<p class="mdl-textfield__error"><i class="fa fa-exclamation-triangle fa-fw"></i> Not a valid email address</p>
<p class="mdl-textfield__help">This is how people will contact you.</p>
<p class="mdl-textfield__counter"></p>
</div>
</form>
<form>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield mdl-textfield--full-width">
<label for="ta2" class="mdl-textfield__label">Description</label>
<textarea class="mdl-textfield__input" id="ta2" rows="3" class="form-control form-control-width-fill"
data-charlimit=" 'target' : '.mdl-textfield__counter', 'limit': 140 "></textarea>
<p class="mdl-textfield__counter"></p>
</div>
</form>
These examples show various form configurations.
<div class="" style="max-width: 450px;">
<form role="form" style="max-width: 350px;">
<div class="mdl-selectfield mdl-js-selectfield mdl-selectfield--floating-label">
<select class="mdl-selectfield__select" id="t12" required aria-required="true">
<option value=""></option>
<option value="Mr.">Mr.</option>
<option value="Mrs.">Mrs.</option>
<option value="Miss">Miss</option>
</select>
<label class="mdl-selectfield__label" for="t12">Title<span class="required-field"></span></label>
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="fn12">First name <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="fn12" value="John" required aria-required="true">
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="mn12">Middle name <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="mn12" required aria-required="true">
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="ln12">Last name <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="ln12" value="Smith" required aria-required="true">
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="phone12">Telephone number <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="phone12" required aria-required="true">
</div>
<div class="mdl-selectfield mdl-js-selectfield mdl-selectfield--floating-label">
<select class="mdl-selectfield__select" id="t122" required aria-required="true">
<option value=""></option>
<option value="USA">United States</option>
<option value="MEX">Mexico</option>
<option value="CAN">Canada</option>
</select>
<label class="mdl-selectfield__label" for="t122">Country<span class="required-field"></span></label>
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="adline1">Address line 1 <span class="required-field"></span> </label>
<input type="text" class="mdl-textfield__input" id="adline1" required aria-required="true">
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="adline2"> Address line 2 <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="adline2" required aria-required="true">
</div>
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="city12">City <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="city12" required aria-required="true">
</div>
<div class="row">
<div class="col-sm-6">
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="state12">State <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="state12" required aria-required="true">
</div>
</div>
<div class="col-sm-6">
<div class="mdl-textfield mdl-textfield--floating-label mdl-js-textfield is-required">
<label class="mdl-textfield__label" for="zipcode12">Zip code <span class="required-field"></span></label>
<input type="text" class="mdl-textfield__input" id="zipcode12" required aria-required="true">
</div>
</div>
</div>
<button type="button" class="btn btn-default">Cancel</button>
<button type="submit" disabled class="btn btn-primary pull-right">Next</button>
</form>
</div>