Button
Interactive element that users can click to perform an action or navigate to another page.
| Class name | Type | |
|---|---|---|
.prs-btn |
Component | For <button> or <a> |
.prs-btn-primary |
Modifier | Contained variant |
.prs-btn-secondary |
Modifier | Outlined variant |
.prs-btn-tertiary |
Modifier | Ghost-like variant |
.prs-btn-info |
Modifier | Blue variant |
.prs-btn-success |
Modifier | Green variant |
.prs-btn-warning |
Modifier | Yellow variant |
.prs-btn-danger |
Modifier | Red variant |
.prs-btn-sm |
Modifier | Small variant |
.prs-btn-lg |
Modifier | Large variant |
.prs-btn-square |
Modifier | Square variant |
.prs-btn-circle |
Modifier | Circle variant |
.prs-btn_hover |
State | Manually apply visual hover |
.prs-btn_focus |
State | Manually apply visual focus |
.prs-btn_disabled |
State | Manually apply visual disabled |
-
<button class="prs-btn prs-btn-primary">Default</button> <button class="prs-btn prs-btn-primary prs-btn-danger">Danger</button> <button class="prs-btn prs-btn-primary prs-btn-success">Success</button> -
<button class="prs-btn prs-btn-secondary">Default</button> <button class="prs-btn prs-btn-secondary prs-btn-danger">Danger</button> <button class="prs-btn prs-btn-secondary prs-btn-success">Success</button> -
<button class="prs-btn prs-btn-tertiary">Default</button> <button class="prs-btn prs-btn-tertiary prs-btn-danger">Danger</button> <button class="prs-btn prs-btn-tertiary prs-btn-success">Success</button> -
<button class="prs-btn prs-btn-primary prs-btn-sm">Small</button> <button class="prs-btn prs-btn-primary prs-btn-lg">Large</button> -
<button class="prs-btn prs-btn-primary prs-btn-square" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> <button class="prs-btn prs-btn-primary prs-btn-circle" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> <button class="prs-btn prs-btn-secondary prs-btn-square" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> <button class="prs-btn prs-btn-secondary prs-btn-circle" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> <button class="prs-btn prs-btn-tertiary prs-btn-square" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> <button class="prs-btn prs-btn-tertiary prs-btn-circle" aria-label="Close"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#nav-x" /></svg> </button> -
With Icon
Add
<svg>,<iconify-icon>, or.iconas a direct decendant to make sure everything renders correctly.<button class="prs-btn prs-btn-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#edit-download-export" /></svg> Leading Icon</button> <button class="prs-btn prs-btn-primary">Trailing Icon <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" role="img"><use href="/_assets/prs-icons.svg#edit-add" /></svg></button> -
Hover
Hover styles will apply automatically, but we also provide
.prs-btn_hoverif you need to manually apply the hover state.<button class="prs-btn prs-btn-primary prs-btn_hover">Primary</button> <button class="prs-btn prs-btn-secondary prs-btn_hover">Secondary</button> <button class="prs-btn prs-btn-tertiary prs-btn_hover">Tertiary</button> -
Focus
Focus styles will apply automatically, but we also provide
.prs-btn_focusif you need to manually apply the focus state.<button class="prs-btn prs-btn-primary prs-btn_focus">Primary</button> <button class="prs-btn prs-btn-secondary prs-btn_focus">Secondary</button> <button class="prs-btn prs-btn-tertiary prs-btn_focus">Tertiary</button> -
Disabled
Disabled styles will automatically apply when you use the
disabledattribute where applicable..prs-btn_disabledis provided if you need to manually apply the disabled state on elements that do not natively support it. Be aware that the.prs-btn_disabledclass does not truly disable the element. It is only visual. If the user disables CSS in their browser the element will be fully interactive.<button class="prs-btn prs-btn-primary" disabled>Primary</button> <button class="prs-btn prs-btn-secondary" disabled>Secondary</button> <button class="prs-btn prs-btn-tertiary" disabled>Tertiary</button> <a href="#" class="prs-btn prs-btn_disabled" aria-disabled="true" tabindex="-1">Ugh</a> <!-- this is just for demo purposes --> <script> document.querySelectorAll('a.prs-btn').forEach(link => { link.addEventListener('click', function(e) { e.preventDefault() }) }); </script>
CSS
Full Library
Component Only
.prs-btn {
padding: .25rem 1rem;
border-width: var(--prs-border-btn);
border-style: solid;
border-color: transparent;
font-size: 1rem;
line-height: 1.375rem;
display: inline-flex;
align-items: center;
justify-content: center;
gap: .5rem;
cursor: pointer;
user-select: none;
text-decoration-line: none;
border-radius: var(--prs-radius-btn);
transition-property: var(--prs-transition-property);
transition-timing-function: var(--prs-transition-timing);
transition-duration: var(--prs-transition-duration);
&:focus-visible,
&.prs-btn_focus {
outline: 2px solid transparent;
outline-offset: 1px;
}
&.prs-btn-sm {
padding: .25rem .75rem;
font-size: .75rem;
line-height: 1rem;
}
&.prs-btn-lg {
padding: .75rem 1rem;
font-size: 1.125rem;
line-height: 1.5rem;
}
&.prs-btn-square,
&.prs-btn-circle {
padding: 0;
width: 2rem;
height: 2rem;
line-height: 1;
flex-shrink: 0;
}
&.prs-btn-circle {
border-radius: 9999px;
}
&.prs-btn-square.prs-btn-sm,
&.prs-btn-circle.prs-btn-sm {
width: 1.5rem;
height: 1.5rem;
}
&.prs-btn-square.prs-btn-lg,
&.prs-btn-circle.prs-btn-lg {
width: 3rem;
height: 3rem;
}
svg,
iconify-icon,
.icon {
width: 1.125rem;
height: 1.125rem;
font-size: 1.125rem;
display: block;
}
&.prs-btn-sm {
svg,
iconify-icon,
.icon {
width: .875rem;
height: .875rem;
font-size: .875rem;
}
}
&.prs-btn-lg {
svg,
iconify-icon,
.icon {
width: 1.5rem;
height: 1.5rem;
font-size: 1.5rem;
}
}
&:disabled,
&[aria-disabled="true"],
&.prs-btn_disabled {
background-color: var(--prs-c-gray-400);
color: var(--prs-c-white);
cursor: not-allowed;
}
}
.prs-btn-primary {
background-color: var(--prs-c-primary);
color: var(--prs-c-white);
&:hover,
&.prs-btn_hover {
background-color: var(--prs-c-primary-900);
}
&:focus-visible,
&.prs-btn_focus {
background-color: var(--prs-c-primary);
outline-color: var(--prs-c-primary);
}
&.prs-btn-danger {
background-color: var(--prs-c-danger);
color: var(--prs-c-white);
&:hover,
&.prs-btn_hover {
background-color: var(--prs-c-danger-800);
color: var(--prs-c-danger-100);
}
&:focus-visible,
&.prs-btn_focus {
background-color: var(--prs-c-danger);
outline-color: var(--prs-c-danger);
}
}
&.prs-btn-success {
background-color: var(--prs-c-success-900);
color: var(--prs-c-white);
&:hover,
&.prs-btn_hover {
background-color: var(--prs-c-success-950);
color: var(--prs-c-white);
}
&:focus-visible,
&.prs-btn_focus {
background-color: var(--prs-c-success-900);
outline-color: var(--prs-c-success-900);
}
}
&:disabled,
&[aria-disabled="true"],
&.prs-btn_disabled {
background-color: var(--prs-c-gray-400);
color: var(--prs-c-white);
}
}
.prs-btn-secondary {
border-color: currentColor;
background-color: transparent;
color: var(--prs-c-primary);
&:hover,
&.prs-btn_hover {
border-color: var(--prs-c-primary);
background-color: var(--prs-c-primary-100);
color: var(--prs-c-primary);
}
&:focus-visible,
&.prs-btn_focus {
background-color: inherit;
outline-color: currentColor;
color: var(--prs-c-primary);
}
&.prs-btn-danger {
color: var(--prs-c-danger-600);
&:hover,
&.prs-btn_hover {
border-color: var(--prs-c-danger-800);
background-color: var(--prs-c-danger-100);
color: var(--prs-c-danger-800);
}
&:focus-visible,
&.prs-btn_focus {
background-color: inherit;
outline-color: currentColor;
color: var(--prs-c-danger);
}
}
&.prs-btn-success {
color: var(--prs-c-success-900);
&:hover,
&.prs-btn_hover {
border-color: var(--prs-c-success-950);
background-color: var(--prs-c-success-200);
color: var(--prs-c-success-950);
}
&:focus-visible,
&.prs-btn_focus {
background-color: inherit;
outline-color: currentColor;
color: var(--prs-c-success);
}
}
&:disabled,
&[aria-disabled="true"],
&.prs-btn_disabled {
border-color: currentColor;
background-color: transparent;
color: var(--prs-c-gray-500);
}
}
.prs-btn-tertiary {
background-color: transparent;
color: var(--prs-c-primary);
&:hover,
&.prs-btn_hover {
border-color: currentColor;
color: var(--prs-c-primary);
text-decoration: underline;
}
&:focus-visible,
&.prs-btn_focus {
border-color: transparent;
background-color: inherit;
text-decoration: none;
outline-color: currentColor;
}
&.prs-btn-danger {
color: var(--prs-c-danger-600);
}
&.prs-btn-success {
color: var(--prs-c-success-900);
}
&:disabled,
&[aria-disabled="true"],
&.prs-btn_disabled {
border-color: transparent;
background-color: transparent;
color: var(--prs-c-gray-500);
text-decoration: none;
}
}
Coming soon...