Several primitive components are included for building accessible forms.
import {
Label,
Input,
Select,
Textarea,
Radio,
Checkbox,
Slider,
} from 'theme-ui'
<Box as="form" onSubmit={(e) => e.preventDefault()}>
<Label htmlFor="username">Username</Label>
<Input name="username" id="username" mb={3} />
<Label htmlFor="password">Password</Label>
<Input type="password" name="password" id="password" mb={3} />
<Box>
<Label mb={3}>
<Checkbox />
Remember me
</Label>
</Box>
<Label htmlFor="sound">Sound</Label>
<Select name="sound" id="sound" mb={3}>
<option>Beep</option>
<option>Boop</option>
<option>Blip</option>
</Select>
<Label htmlFor="comment">Comment</Label>
<Textarea name="comment" id="comment" rows={6} mb={3} />
<Flex mb={3}>
<Label>
<Radio name="letter" /> Alpha
</Label>
<Label>
<Radio name="letter" /> Bravo
</Label>
<Label>
<Radio name="letter" /> Charlie
</Label>
</Flex>
<Label>Slider</Label>
<Slider mb={3} />
<Button>Submit</Button>
</Box>
Add styles for form elements in the theme.forms
object.
{
forms: {
label: {
fontSize: 1,
fontWeight: 'bold',
},
input: {
borderColor: 'gray',
'&:focus': {
borderColor: 'primary',
boxShadow: t => `0 0 0 2px ${t.colors.primary}`,
outline: 'none',
},
},
select: {
borderColor: 'gray',
'&:focus': {
borderColor: 'primary',
boxShadow: t => `0 0 0 2px ${t.colors.primary}`,
outline: 'none',
},
},
textarea: {
borderColor: 'gray',
'&:focus': {
borderColor: 'primary',
boxShadow: t => `0 0 0 2px ${t.colors.primary}`,
outline: 'none',
},
},
slider: {
bg: 'muted',
},
},
}
Edit the page on GitHub