Form Input
Basic input
Section titled “Basic input” <label class="label" for="text">Text</label> <input class="input" type="text" id="text" placeholder="Text …" />
<label class="label" for="disabled"> Disabled</label><input class="input" type="text" id="disabled" placeholder="Disabled …" disabled/>
<label class="label" for="email"> Email</label><input class="input" type="email" id="email" placeholder="Email …" />
<label class="label" for="tel"> tel</label><input class="input" type="tel" id="tel" placeholder="tel …" />
<label class="label" for="url"> Url</label><input class="input" type="url" id="url" placeholder="Url …" />
<label class="label" for="number"> Number</label><input class="input" type="number" id="number" placeholder="Number …" />
<label class="label" for="search"> Search</label><input class="input" type="search" id="search" placeholder="Search …" />
<label class="label" for="password"> Password</label><input class="input" type="password" id="password" placeholder="Password …" />
<label class="label" for="select"> Select</label><select class="input" id="select"> <option value="">Select a role</option> <option value="developer">Developer</option> <option value="designer">Designer</option> <option value="manager">Manager</option></select>
<label class="label" for="multiple"> Multiple</label><select class="input" id="multiple" multiple> <option value="">Select a role</option> <option value="developer">Developer</option> <option value="designer">Designer</option> <option value="manager">Manager</option></select>
<label class="label" for="textarea"> Textarea</label><textarea class="input" id="textarea" rows="4" placeholder="Textarea …"></textarea>
<label class="label" for="radio"> Radio</label><input class="input" type="radio" id="radio" />
<label class="label" for="checkbox"> Checkbox</label><input class="input" type="checkbox" id="checkbox" />
<label class="label" for="color"> Colour</label><input class="input" type="color" id="color" placeholder="Color …" />
<label class="label" for="date"> Date</label><input class="input" type="date" id="date" placeholder="Date …" />
<label class="label" for="datetime-local"> Datetime local</label><input class="input" type="datetime-local" id="datetime-local" placeholder="Datetime local …"/>
<label class="label" for="month"> Month</label><input class="input" type="month" id="month" placeholder="Month …" />
<label class="label" for="week"> Week</label><input class="input" type="week" id="week" placeholder="Week …" />
<label class="label" for="time"> Time</label><input class="input" type="time" id="time" placeholder="Time …" />
<label class="label" for="file"> File</label><input class="input" type="file" id="file" placeholder="File …" />
<label class="label" for="range"> Range</label><input class="input" type="range" id="range" placeholder="Range …" />
<label class="label" for="output"> Output</label><output class="input" id="output" for="range"></output>
<label for="datalist" class="label"> Datalist</label><input class="input" list="options" id="datalist" placeholder="Type to search..."/><datalist id="options"> <option value="San Francisco"></option> <option value="New York"></option> <option value="Seattle"></option> <option value="Los Angeles"></option> <option value="Chicago"></option></datalist>https://github.com/davidbrooksio/cwf-lite/blob/master/style/modules/form.css
Directorystyle
Directorymodules
- form.css
@layer cwf-modules { .input { accent-color: var(--input-accent-color, var(--color-primary)); appearance: var(--input-appearance, auto); background-color: var(--input-background-color, var(--color-background)); background-image: var(--input-background-image, none); background-repeat: var(--input-background-repeat, no-repeat); background-position: var(--input-background-position, 50% 50%); background-size: var(--input-background-size, 1rem); border-color: var(--input-border-color, var(--color-border)); border-radius: var(--input-border-radius, var(--size-2)); border-style: var(--input-border-style, solid); border-width: var(--input-border-width, 1px); box-shadow: var(--input-box-shadow, none); color: var(--input-color, var(--color-text)); cursor: var(--input-cursor, auto); font-family: var(--input-font-family, inherit); font-size: var(--input-font-size, inherit); font-weight: var(--input-font-weight, 400); height: var(--input-height, var(--control-height, auto)); line-height: var(--input-line-height, var(--control-line-height));
&::-webkit-datetime-edit, &::-webkit-datetime-edit-fields-wrapper, &::-webkit-datetime-edit-text, &::-webkit-datetime-edit-minute, &::-webkit-datetime-edit-hour, &::-webkit-datetime-edit-day, &::-webkit-datetime-edit-month, &::-webkit-datetime-edit-year { padding-block: 0; }
margin-block-start: var(--input-margin-top, 0); margin-inline-end: var(--input-margin-right, 0); margin-block-end: var(--input-margin-bottom, var(--size-3)); margin-inline-start: var(--input-margin-left, 0);
min-height: var(--input-min-height, 0); min-width: var(--input-min-width, 0); outline: var(--input-outline, 0);
padding-block-start: var(--input-padding-top, var(--control-padding-y)); padding-inline-end: var(--input-padding-right, var(--size-4)); padding-block-end: var(--input-padding-bottom, var(--control-padding-y)); padding-inline-start: var(--input-padding-left, var(--size-4));
pointer-events: var(--input-pointer-events, initial); resize: var(--input-resize, initial); transition: var(--input-transition, all 0.2s ease-in-out); vertical-align: var(--input-vertical-align, initial); width: var(--input-width, 100%);
&::placeholder { color: var( --input-placeholder-color, hsl(from var(--color-text) h s l / 45%) ); }
&:hover { background-color: var( --input-hover-background-color, var(--color-background) ); border-color: var(--input-hover-border-color, var(--color-border)); box-shadow: var(--input-hover-box-shadow, none); color: var(--input-hover-color, var(--color-text)); }
&:focus-visible, &:focus { background-color: var( --input-focus-background-color, var(--color-background) ); border-color: var(--input-focus-border-color, var(--color-primary)); box-shadow: var( --input-focus-box-shadow, 0 0 0 0.25em hsl(from var(--color-primary) h s l / 15%) ); color: var(--input-focus-color, var(--color-text)); }
&:disabled { background-color: var( --input-disabled-background-color, var(--color-neutral-hover) ); pointer-events: var(--input-disabled-pointer-events, none); }
/* Modern Native User Validation Styling */ &:user-invalid { border-color: var(--input-invalid-border-color, var(--color-red)); box-shadow: var( --input-invalid-box-shadow, 0 0 0 0.25em hsl(from var(--color-red) h s l / 15%) ); }
/* --------------------------------- Select --------------------------------- */ &:is(select) { appearance: var(--input-select-appearance, none);
&:not([multiple]) { padding-inline-end: var(--input-select-padding-right, var(--size-7)); background-image: var( --input-select-background-image, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e") ); background-position: var( --input-select-background-position, right 0.5em center ); background-size: var(--input-select-background-size, 1em); }
&[multiple] { padding-block: var(--input-select-multiple-padding-y, 0); padding-inline: var(--input-select-multiple-padding-x, 0);
& option { padding-block-start: var(--option-padding-top, var(--size-3)); padding-inline-end: var(--option-padding-right, var(--size-4)); padding-block-end: var(--option-padding-bottom, var(--size-3)); padding-inline-start: var(--option-padding-left, var(--size-4)); } } }
/* -------------------------------- Textarea -------------------------------- */ &:is(textarea) { height: auto; min-height: var(--input-textarea-min-height, var(--size-9)); resize: var(--input-textarea-resize, vertical); }
/* ---------------------------------- Color --------------------------------- */ &:is([type="color"]) { /* padding-y + line-height + 4px for some reason */ --input-color-size: calc(2ch + 1.15rem + 4px);
appearance: var(--input-color-appearance, none); width: var(--input-color-width, var(--input-color-size)); height: var(--input-color-height, var(--input-color-size));
padding-block: var(--input-color-padding-y, 0.5ch); padding-inline: var(--input-color-padding-x, 0.5ch);
&::-webkit-color-swatch-wrapper { padding: 0; } }
/* ---------------------------------- Range --------------------------------- */ &:is([type="range"]) { height: auto;
&:focus-visible, &:focus { box-shadow: var(--input-range-focus-box-shadow, none); } }
/* -------------------------------- Checkbox -------------------------------- */ &:is([type="checkbox"]) { appearance: var(--input-checkbox-appearance, none);
padding-block: var(--input-checkbox-padding-y, var(--size-3)); padding-inline: var(--input-checkbox-padding-x, var(--size-3));
width: var(--input-checkbox-width, 1em); height: var(--input-checkbox-height, 1em); background-image: var(--input-checkbox-background-image, none); background-size: var(--input-checkbox-checked-background-size, 100%);
&:checked { background-color: var( --input-checkbox-checked-background-color, var(--color-primary) ); background-image: var( --input-checkbox-checked-background-image, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e") ); } }
/* ---------------------------------- Radio --------------------------------- */ &:is([type="radio"]) { appearance: var(--input-radio-appearance, none); border-radius: var(--input-radio-border-radius, 50%);
padding-block: var(--input-radio-padding-y, var(--size-3)); padding-inline: var(--input-radio-padding-x, var(--size-3));
width: var(--input-radio-width, 1em); height: var(--input-radio-height, 1em); background-image: var(--input-radio-background-image, none); background-size: var(--input-radio-background-size, 100%);
&:checked { background-image: var( --input-radio-checked-background-image, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e") ); background-color: var( --input-radio-checked-background-color, var(--color-primary) ); } }
/* ---------------------------------- File ---------------------------------- */ &:is([type="file"]) { appearance: var(--input-file-appearance, none); cursor: var(--input-file-cursor, pointer);
&::-webkit-file-upload-button, &::file-selector-button { -webkit-appearance: button; -webkit-margin-end: var(--input-file-button-margin-end, var(--size-4));
padding-block-start: var( --input-file-button-padding-top, var(--size-3) ); padding-inline-end: var( --input-file-button-padding-right, var(--size-4) ); padding-block-end: var( --input-file-button-padding-bottom, var(--size-3) ); padding-inline-start: var( --input-file-button-padding-left, var(--size-4) );
margin-block: var( --input-file-button-margin-y, calc(var(--size-3) * -1) ); margin-inline: var( --input-file-button-margin-x, calc(var(--size-4) * -1) ); margin-inline-end: var( --input-file-button-margin-inline-end, var(--size-4) ); color: var(--input-file-button-color, inherit); background: var( --input-file-button-background, var(--color-neutral-hover) ); pointer-events: var(--input-file-button-pointer-events, none); border-color: var(--input-file-button-border-color, inherit); border-style: var(--input-file-button-border-style, solid); border-width: var(--input-file-button-border-width, 0); border-inline-end-width: var( --input-file-button-border-inline-end-width, 1px ); border-radius: var(--input-file-button-border-radius, 0); } }
/* --------------------------------- Search --------------------------------- */ &:is([type="search"]) { border-radius: var(--input-search-border-radius, 99rem); }
/* --------------------------------- Output --------------------------------- */ &:is(output) { display: var(--input-output-display, block);
/* Fix for output height */ &::before { content: ""; display: inline-block; vertical-align: middle; height: 100%; pointer-events: none; } }
/* ---------------------------------- List ---------------------------------- */ &:is([list]) { appearance: var(--input-list-appearance, none); padding-inline-end: var(--input-list-padding-right, var(--size-7)); background-image: var( --input-list-background-image, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e") ); background-position: var( --input-list-background-position, right 0.5em center ); background-size: var(--input-list-background-size, 1em);
&::-webkit-calendar-picker-indicator { display: none !important; } } }
/* ---------------------------------- Label --------------------------------- */ .label { display: var(--label-display, inline-flex); color: var(--label-color, inherit); font-weight: var(--label-font-weight, 400); letter-spacing: var(--label-letter-spacing, unset);
margin-block-start: var(--label-margin-top, 0); margin-inline-end: var(--label-margin-right, 0); margin-block-end: var(--label-margin-bottom, var(--size-1)); margin-inline-start: var(--label-margin-left, 0);
width: var(--label-width, 100%); }}