Forms
Combine various forms, form control selectors, custom components and layout variations to create forms that covers a wide range of use cases.
Markup
<form pam-Form="stacked padded">
    <div pam-Grid>
        <div pam-Unit="1-1 medium:1-2">
            <fieldset pam-Fieldset="column">
                <legend>Text and select</legend>
                <label for="input-name">Name</label>
                <input id="input-name" type="text" placeholder="What is it?" pam-Form-Control="fluid" pam-skin="on:primary">
                <label for="input-email">Email</label>
                <input id="input-email" type="email" placeholder="Spam time" pam-Form-Control="fluid">
                <label for="input-password">Password</label>
                <input id="input-password" type="password" placeholder="A secret..." pam-Form-Control="fluid">
                <label for="select-geek">Choose geek level</label>
                <select id="select-geek" pam-Form-Control="fluid">
                    <option value="geek">Geek</option>
                    <option value="nerd">Nerd</option>
                    <option value="dork">Dork</option>
                </select>
                <label for="textarea-description">Please explain</label>
                <textarea rows="5" placeholder="The secret of 42..." pam-Form-Control="fluid"></textarea>
            </fieldset>
        </div>
        <div pam-Unit="1-1 medium:1-2">
            <fieldset pam-Fieldset="column">
                <legend>Checkboxes</legend>
                <label>
                    <input type="checkbox" value=""> I´m a hipster
                </label>
                <label>
                    <input type="radio" id="radio1" name="optionsRadios" value="radios" checked> Hipster
                </label>
                <label>
                    <input type="radio" id="radio2" name="optionsRadios" value="radios"> Geek
                </label>
            </fieldset>
            <fieldset>
                <legend>Misc</legend>
                <label for="input-file">File</label>
                <input id="input-file" type="file" pam-Form-Control="fluid">
                <label for="input-color">Color</label>
                <input id="input-color" type="color" pam-Form-Control="fluid">
            </fieldset>
        </div>
    </div>
</form>State
Give users feedback related to form controls by using native or custom states.
Native
Add the native form attributes disabled, readonly and required
to use native states with PAM forms.
Markup
<form pam-Form>
     <input type="text" placeholder="Input" value="[modifier]" [modifier]>
</form>Custom
Use the pam-Form-State to apply custom form states success or error.
Markup
<form pam-Form>
     <input type="text" placeholder="Input" value="[modifier]" pam-Form-State="[modifier]">
</form>Size
Adjust size of input, select or textarea with pam-Form-Size.
Markup
<form pam-Form="stacked">
    <input pam-Form-Size="large" type="text" placeholder="Large">
    <input type="text" placeholder="Default">
    <input pam-Form-Size="small" type="text" placeholder="Small">
</form>Width
Adjust width of input, select or textarea with
pam-Form-Width which supports thirds and fifths.
Markup
<form pam-Form="stacked">
    <input pam-Form-Width="1-1" type="text" placeholder="1-1">
    <input pam-Form-Width="2-3" type="text" placeholder="2-3">
    <input pam-Form-Width="1-2" type="text" placeholder="1-2">
    <input pam-Form-Width="1-3" type="text" placeholder="1-3">
    <input pam-Form-Width="1-4" type="text" placeholder="1-4">
</form>Layout
Form layout variations
Default
pam-Form sets up the base for forms and outputs a default inline form.
Markup
<form pam-Form>
    <input type="email" placeholder="Email">
    <input type="password" placeholder="Password">
    <input type="button" pam-Button value="Log in">
</form>Stacked
pam-Form="stacked" changes form elements to blocks so that the output is a stacked form.
Markup
<form pam-Form="stacked">
   <label for="email">Email</label>
    <input type="email" placeholder="Email">
    <label for="password">Password</label>
    <input type="password" placeholder="Password">
    <input type="button" pam-Button value="Log in">
</form>Grouped fields
pam-Fieldset combined with a <fieldset> element will group a set of form fields.
Markup
<form pam-Form>
    <fieldset pam-Fieldset="grouped">
        <input type="text" placeholder="Username">
        <input type="email" placeholder="Email">
        <input type="password" placeholder="Password">
    </fieldset>
    <fieldset pam-Fieldset="grouped">
        <input type="text" placeholder="Nickname">
        <input type="text" placeholder="City">
        <input type="text" placeholder="Favorite movie">
    </fieldset>
    <fieldset pam-Fieldset="actions">
        <input type="button" pam-Button="small" value="Log in">
    </fieldset>
</form>Message
pam-Form-Message is a helper element that shows text
under or on the side of a form field.
Block
The default message is a block element
Markup
<form pam-Form="stacked">
    <fieldset>
        <label>Username</label>
        <input type="text">
        <aside pam-Form-Message>Block help text</aside>
    </fieldset>
</form>Inline
To display the message inline apply the inline
value to pam-Form-Message.
Markup
<form pam-Form>
    <fieldset>
        <label>Username</label>
        <input type="text">
        <aside pam-Form-Message="inline">Block help text</aside>
    </fieldset>
</form>Custom controls
There are group of custom controls to use which gives more flexibility and control over the form controls.
Icon
pam-Form-Inline can group a form control with a icon. To apply the icon on the right side use pam-Form-Inline="reverse".
Markup
<form pam-Form>
    <div pam-Form-Inline>
        <label for="group-input" pam-Form-Icon>
            <div sg-mock-icon></div>
        </label>
        <input id="group-input" type="text" placeholder="Input group" pam-Form-Control>
    </div>
    <div pam-Form-Inline>
        <label for="group-select" pam-Form-Icon>
            <div sg-mock-icon></div>
        </label>
        <select id="group-select" pam-Form-Control>
            <option value="geek">Geek</option>
            <option value="nerd">Nerd</option>
            <option value="dork">Dork</option>
        </select>
    </div>
    <div pam-Form-Inline="reverse">
        <label for="group-input-reverse" pam-Form-Icon>
            <div sg-mock-icon></div>
        </label>
        <input id="group-input-reverse" type="text" placeholder="Input group" pam-Form-Control>
    </div>
</form>Lego
pam-Form-Group="lego" extend form controls by adding icons, buttons, selects
before or after text-based form controls as lego bricks.
Markup
<form pam-Form>
    <div pam-Form-Group="lego">
        <div pam-Form-Group-Addon>
            <select>
                <option value="honda">+46</option>
                <option value="toyota">+211</option>
                <option value="nissan">+1-284</option>
            </select>
        </div>
        <input id="addon-lego-1" type="text" placeholder="One addon" pam-Form-Control>
    </div>
    <div pam-Form-Group="lego">
        <input id="addon-lego-2" type="text" placeholder="One addon" pam-Form-Control>
        <div pam-Form-Group-Addon>
            <input type="button" pam-Button="small" value="send">
        </div>
    </div>
    <div pam-Form-Group="lego">
        <div pam-Form-Group-Addon>
            <select>
                <option value="honda">+46</option>
                <option value="toyota">+211</option>
                <option value="nissan" selected>+1-284</option>
            </select>
        </div>
            <input id="addon-lego-3" type="text" placeholder="Two addons" pam-Form-Control>
        <div pam-Form-Group-Addon>
            <input type="button" pam-Button="small" value="send">
        </div>
    </div>
</form>Lego block
pam-Form-Group="lego block" display lego brick as a block.
Markup
<form pam-Form>
    <div pam-Form-Group="lego block">
        <div pam-Form-Group-Addon>
            <select>
                <option value="honda">+46</option>
                <option value="toyota">+211</option>
                <option value="nissan">+1-284</option>
            </select>
        </div>
        <input id="addon-lego-block-1" type="text" placeholder="One addon" pam-Form-Control>
    </div>
    <div pam-Form-Group="lego block">
        <input id="addon-lego-block-2" type="text" placeholder="One addon" pam-Form-Control>
        <div pam-Form-Group-Addon>
            <input type="button" pam-Button="small" value="send">
        </div>
    </div>
    <div pam-Form-Group="lego block">
        <div pam-Form-Group-Addon>
            <select>
                <option value="honda">+46</option>
                <option value="toyota">+211</option>
                <option value="nissan" selected>+1-284</option>
            </select>
        </div>
            <input id="addon-lego-block-3" type="text" placeholder="Two addons" pam-Form-Control>
        <div pam-Form-Group-Addon>
            <input type="button" pam-Button="small" value="send">
        </div>
    </div>
</form>Select
pam-Select turns on custom styling of the select element.
Markup
<form pam-Form="stacked">
    <label for="select-native">Native select</label>
    <select id="select-native">
        <option value="geek">Geek</option>
        <option value="nerd">Nerd</option>
        <option value="dork">Dork</option>
    </select>
    <label for="select-custom">Custom select</label>
    <select id="select-custom" pam-Select="">
        <option value="geek">Geek</option>
        <option value="nerd">Nerd</option>
        <option value="dork">Dork</option>
    </select>
    <label for="select-multiple">Multiple select</label>
    <select id="select-multiple" multiple>
        <option value="geek">Geek</option>
        <option value="nerd">Nerd</option>
        <option value="dork">Dork</option>
    </select>
</form>Traits
pam-form-control is a generic trait to be used with form controls
to optimize and trim their behaviour when needed.
Markup
<form pam-Form="stacked">
    <label for="input-borderless">So borderless!</label>
    <input id="input-borderless" placeholder="Borderless" pam-Form-Control="borderless">
    <label for="input-fluid">Fluid like water</label>
    <input id="input-fluid" placeholder="Fluid" pam-Form-Control="fluid">
</form>Hooks
.hook-form
.hook-form-focus
.hook-form-disabled
.hook-form-hover
.hook-form-readonly
.hook-form-readonly-focus
.hook-form-focus-invalid
.hook-form-focus-invalid-focus
.hook-form-select
.hook-form-select-multiple
.hook-form-select-focus
.hook-form-select-custom
.hook-form-label
.hook-form-fieldset
.hook-form-legend
.hook-form-stacked
.hook-form-group
.hook-form-input-group
.hook-form-message
.hook-form-message-inline
.hook-form-state-success
.hook-form-state-error
.hook-form-size-large
.hook-form-size-small
.hook-form-field-inline
Variables
These are all the component specific variables that can be used for customization.
| Name | Value | 
|---|---|
| @form-background | @skin-white | 
| @form-border-radius | @border-radius | 
| @form-border-style | solid | 
| @form-border-width | 1px | 
| @form-border-color | @skin-border-primary | 
| @form-color | @skin-text-primary-on-light | 
| @form-font-size | @font-size-large | 
| @form-line-height | @line-height-base | 
| @form-margin | 0 0 @space-8 | 
| @form-padding-horizontal | @space-8 | 
| @form-padding-vertical | @space-8 | 
| @form-padding | @space-8 | 
| @form-placeholder-color | @skin-text-secondary-on-light | 
| @form-tap-highlight-color | rgba(0, 0, 0, 0) | 
| @form-transition-duration | @transition-duration-default | 
| @form-transition-property | border | 
| @form-transition-timing | ease | 
| @form-focus-border-color | @skin-primary | 
| @form-focus-border-width | 1px | 
| @form-hover-border-color | darken(@form-border-color, 30%) | 
| @form-hover-border-width | 1px | 
| @form-legend-width | 100% | 
| @form-legend-padding | @space-8 0 | 
| @form-fieldset-border | 0 | 
| @form-fieldset-margin | 0 | 
| @form-fieldset-padding | @space-8 0 @space-16 | 
| @form-fieldset-column-padding | @space-16 | 
| @form-label-margin | @space-8 0 | 
| @form-success-background | lighten(@skin-success, 45%) | 
| @form-success-border | @skin-success | 
| @form-success-color | @skin-success | 
| @form-error-background | lighten(@skin-error, 40%) | 
| @form-error-border | @skin-error | 
| @form-error-color | @skin-error | 
| @form-stacked-display | block | 
| @form-stacked-margin | @space-8 0 | 
| @form-fieldset-grouped-padding-bottom | @space-16 | 
| @form-fieldset-grouped-last-padding-bottom | @space-24 | 
| @form-fieldset-grouped-input-display | block | 
| @form-fieldset-grouped-input-last-margin-bottom | 0 | 
| @form-fieldset-grouped-input-position | relative | 
| @form-message-color | @skin-text-primary-on-light | 
| @form-message-display | block | 
| @form-message-font-size | @font-size-xsmall | 
| @form-message-inline-display | inline-block | 
| @form-message-inline-padding | 0 0 0 @space-8 | 
| @form-message-inline-vertical-align | middle | 
| @form-field-inline-margin | 0 0 @space-8 | 
| @form-field-inline-position | relative | 
| @form-field-inline-control-display | block | 
| @form-field-inline-control-padding-left | @space-48 | 
| @form-field-inline-control-width | 100% | 
| @form-field-inline-icon-align-items | center | 
| @form-field-inline-icon-background | transparent | 
| @form-field-inline-icon-bottom | 0 | 
| @form-field-inline-icon-display | inline-flex | 
| @form-field-inline-icon-justify-content | center | 
| @form-field-inline-icon-left | 0 | 
| @form-field-inline-icon-margin | 0 | 
| @form-field-inline-icon-position | absolute | 
| @form-field-inline-icon-right | auto | 
| @form-field-inline-icon-top | 0 | 
| @form-field-inline-icon-width | @space-48 | 
| @form-field-inline-reverse-control-padding-left | @space-8 | 
| @form-field-inline-reverse-control-padding-right | @space-48 | 
| @form-field-inline-reverse-control-padding-width | 100% | 
| @form-field-inline-reverse-icon-left | auto | 
| @form-field-inline-reverse-icon-right | 0 | 
| @form-group-lego-display | inline-flex | 
| @form-group-lego-margin-bottom | @space-16 | 
| @form-group-lego-child-all-margin-bottom | 0 | 
| @form-group-lego-child-all-min-width | @space-60 | 
| @form-group-lego-child-display | flex | 
| @form-group-lego-child-last-border-bottom-left-radius | 0 | 
| @form-group-lego-child-last-border-top-left-radius | 0 | 
| @form-group-lego-child-first-all-border-bottom-right-radius | 0 | 
| @form-group-lego-child-first-all-border-top-right-radius | 0 | 
| @form-group-lego-child-first-border-bottom-right-radius | 0 | 
| @form-group-lego-child-first-border-top-right-radius | 0 | 
| @form-group-lego-child-last-all-border-bottom-left-radius | 0 | 
| @form-group-lego-child-last-all-border-top-left-radius | 0 | 
| @form-group-lego-child-not-first-last-radius | 0 | 
| @form-group-lego-addon-border-radius | @form-border-radius | 
| @form-group-lego-addon-color | @form-color | 
| @form-group-lego-addon-font-size | @font-size-base | 
| @form-group-lego-addon-margin | 0 | 
| @form-group-lego-addon-min-width | @space-60 | 
| @form-group-lego-addon-position | relative | 
| @form-group-lego-addon-text-align | center | 
| @form-group-lego-addon-white-space | nowrap | 
| @form-group-lego-addon-first-all-border-right-color | transparent | 
| @form-group-lego-addon-first-all-focus-border-right-color | @form-focus-border-color | 
| @form-group-lego-addon-last-all-border-left-color | transparent | 
| @form-group-lego-addon-last-all-focus-border-left-color | @form-focus-border-color | 
| @form-group-lego-control-focus-zindex | 3 | 
| @form-group-lego-control-margin-bottom | 0 | 
| @form-group-lego-control-position | 0 | 
| @form-group-lego-control-zindex | 2 | 
| @form-group-lego-block-display | flex | 
| @form-select-custom-appearance | none | 
| @form-select-custom-background-color | @form-background | 
| @form-select-custom-background-image | "data:image/svg+xml | 
| @form-select-custom-background-offset | @space-8 | 
| @form-select-custom-background-repeat | no-repeat | 
| @form-select-custom-background-size | @space-12 | 
| @form-select-custom-display | inline-block | 
| @form-select-custom-max-width | 100% | 
| @form-select-custom-padding-right | @space-28 | 
| @form-select-custom-vertical-align | middle | 
| @form-control-borderless-border-color-focus | transparent | 
| @form-control-borderless-border-color | transparent | 
| @form-control-borderless-focus-box-shadow | 0 1px 3px @skin-gray-600 | 
| @form-control-borderless-transition | box-shadow 0.3s ease | 
| @form-control-fluid-width | 100% | 
| @form-control-padded-medium-screen-size-padding | @space-16 | 
| @form-control-padded-padding | @space-8 0 @space-16 |