Skip to main content Home
About About the Design SystemRoadmap
Get started OverviewDesignersDevelopers
Foundations OverviewColorGridIconographySpacingTypography
Tokens Overview Global colorbox shadowTypographyborderopacityspacelengthIconBreakpointsMedia Queries
Elements All elements Accordion Alert Announcement Audio player Avatar Back to top Badge Blockquote Breadcrumb Button Card Chip Code block Call to action Dialog Disclosure Footer Health index Icon Jump links Navigation (primary) Navigation (secondary) Pagination PopoverPlanned Progress stepsPlanned Site status Skip link Spinner Statistic Subnavigation Surface Switch Table Tabs Tag Tile Timestamp Tooltip Video embed
Theming OverviewColor PalettesCustomizingDevelopers
Patterns All PatternsCardTabsFilterFormLinkLink with iconLogo wallSearch barSkip navigationSticky bannerSticky cardTileVideo thumbnail
Personalization All Personalization PatternsAnnouncement
Accessibility FundamentalsAccessibility toolsAssistive technologiesCI/CDContentContributorsDesignDevelopmentManual testingResourcesScreen readers
Design/code status Release notes Get support

Button

OverviewStyleGuidelinesCodeAccessibilityDemos
ButtonColor ContextForm ControlIconVariantsButtonColor ContextForm ControlIconVariants

Button

import '@rhds/elements/rh-button/rh-button.js';
```
<rh-button>Primary</rh-button>
```

Color Context

rh-context-demo::part(demo) {
  display: flex;
  align-items: start;
  flex-wrap: wrap;
  gap: var(--rh-space-lg, 16px);
}
```
import '@rhds/elements/rh-button/rh-button.js';
import '@rhds/elements/lib/elements/rh-context-demo/rh-context-demo.js';
```
<rh-context-demo>
  <rh-button danger="">Danger</rh-button>
  <rh-button>Primary</rh-button>
  <rh-button variant="link">Link</rh-button>
  <rh-button variant="secondary">Secondary</rh-button>
  <rh-button variant="secondary" danger="">Secondary Danger</rh-button>
  <rh-button variant="tertiary">Tertiary</rh-button>
  <rh-button variant="close">Close</rh-button>
  <rh-button variant="play">Play</rh-button>
  <rh-button disabled="">Disabled</rh-button>

  <rh-button danger="" icon="information-fill">Danger</rh-button>
  <rh-button icon="information-fill">Primary</rh-button>
  <rh-button variant="link" icon="information-fill">Link</rh-button>
  <rh-button variant="secondary" icon="information-fill">Secondary</rh-button>
  <rh-button variant="secondary" danger="" icon="information-fill">Secondary Danger</rh-button>
  <rh-button variant="tertiary" icon="information-fill">Tertiary</rh-button>
  <rh-button variant="close" icon="information-fill">Close</rh-button>
  <rh-button variant="play" icon="information-fill">Play</rh-button>
  <rh-button disabled="" icon="information-fill">Disabled</rh-button>
</rh-context-demo>
```

Form Control

#checkboxes {
  display: grid;
  grid-template-columns: min-content 1fr;
}

label { display: block; }

form h2 {
  width: 100%;
}
```
import '@rhds/elements/rh-button/rh-button.js';
const form = document.getElementById('form');
const fieldset = document.getElementById('fieldset');

/** @this {HTMLFormElement} */
function onSubmit(event) {
  event.preventDefault();
  this.elements.output.textContent = 'Submitted';
}

/** @this {HTMLFormElement} */
function onReset() {
  fieldset.disabled = false;
  this.elements.output.textContent = 'Pending';
}

/** @this{HTMLInputElement} */
function onChange({ target: { checked, dataset: { controls } } }) {
  // eslint-disable-next-line no-console
  console.log(`${controls}.disabled =`, checked);
  const el = document.getElementById(controls);
  if (el) {
    el.disabled = checked;
  }
}

form.addEventListener('submit', onSubmit);
form.addEventListener('reset', onReset);
form.addEventListener('change', onChange);
```
<form id="form">
  <fieldset id="fieldset">
    <legend>
      rh-button in a <code>&lt;fieldset&gt;</code> element;
      clicking this button must submit the form
    </legend>
    <rh-button id="button" type="submit">Submit</rh-button>
  </fieldset>

  <fieldset id="checkboxes">
    <legend>Use these checkboxes to toggle disabled state</legend>
    <input id="fst" type="checkbox" data-controls="fieldset">
    <label for="fst">Disable fieldset</label>
    <input id="btn" type="checkbox" data-controls="button">
    <label for="btn">Disable rh-button</label>
  </fieldset>

  <fieldset id="outputs">
    <legend>Observe and reset form state</legend>
    <rh-button type="reset">Reset</rh-button>
    <label for="output">Form status:</label>
    <output id="output" name="output">Pending</output>
  </fieldset>
</form>
```

Icon

import '@rhds/elements/rh-button/rh-button.js';
```
#button-with-icon {
  display: flex;
  align-items: start;
  flex-wrap: wrap;
  gap: var(--rh-space-lg, 16px);
}
```
<section id="button-with-icon">
  <rh-button icon="error-fill" danger="">Danger</rh-button>
  <rh-button icon="information-fill">Primary</rh-button>
  <rh-button icon="external-link" icon-set="microns" variant="link">Link</rh-button>
  <rh-button icon="bug-fill" variant="secondary">Secondary</rh-button>
  <rh-button icon="bug-fill" variant="secondary" danger="">Secondary Danger</rh-button>
  <rh-button icon="close" icon-set="microns" variant="tertiary">Tertiary</rh-button>
  <rh-button icon="close" icon-set="microns" disabled="">Disabled</rh-button>
</section>
```

Variants

import '@rhds/elements/rh-button/rh-button.js';
```
#button-variants {
  display: flex;
  align-items: start;
  flex-wrap: wrap;
  gap: var(--rh-space-lg, 16px);
}
```
<section id="button-variants">
  <rh-button danger="">Danger</rh-button>
  <rh-button>Primary</rh-button>
  <rh-button variant="link">Link</rh-button>
  <rh-button variant="secondary">Secondary</rh-button>
  <rh-button variant="secondary" danger="">Secondary Danger</rh-button>
  <rh-button variant="tertiary">Tertiary</rh-button>
  <rh-button variant="close">Close</rh-button>
  <rh-button variant="play">Play</rh-button>
  <rh-button disabled="">Disabled</rh-button>
</section>
```
© 2021-2025 Red Hat, Inc. Deploys by Netlify