Skip to content

Buttons ​

Buttons allow users to trigger actions.

Guidelines ​

Web Components Usage ​

2. Render the Astro Button Web Component ​

Pass properties as attributes of the Astro Button custom element:

xml
<rux-button size="large" disabled secondary>
  Large disabled secondary button
</rux-button>
<rux-button size="large" disabled secondary>
  Large disabled secondary button
</rux-button>

The component auto-imports the default Astro Icon Web Component for icons, if you specify one:

xml
<rux-button icon="settings">
  Button with icon using astro UXDS icon web component
</rux-button>
<rux-button icon="settings">
  Button with icon using astro UXDS icon web component
</rux-button>

Also, you can use Slots to define icons within buttons. This method is best if you need to override the default icon library SVG file:

xml
<rux-button>
    <rux-icon icon="custom" library="/icons/custom.svg" viewBox="0 0 128 128"></rux-icon>
    Slotted icon button
  </rux-button>
<rux-button>
    <rux-icon icon="custom" library="/icons/custom.svg" viewBox="0 0 128 128"></rux-icon>
    Slotted icon button
  </rux-button>

In this situation, you do not need to specify a size for the icon component -- the button's size attribute will define the appropriate size of the icon.

Basic HTML Usage ​

1. Include the Astro UXDS CSS file ​

Latest release is available in the static css directory.

xml
<link rel="stylesheet" href="/your-project/path/astro.css" />
<link rel="stylesheet" href="/your-project/path/astro.css" />

2. Markup the component using HTML and the Astro CSS classes ​

Astro CSS classes follow the BEM-style naming convention.

Configure the component using native HTML attributes or BEM-style class suffixes after rux-button--.

xml
<button class="rux-button">Submit</button>

<button class="rux-button rux-button--large rux-button--secondary" disabled>
  Large disabled secondary button
</button>
<button class="rux-button">Submit</button>

<button class="rux-button rux-button--large rux-button--secondary" disabled>
  Large disabled secondary button
</button>

The basic HTML/CSS usage supports icons if using Web Components (and importing the Astro Icon Component):

xml
<button class="rux-button rux-button--icon">
  <rux-icon class="rux-icon rux-button__icon" icon="settings" color="white"></rux-icon>
  Button with icon using astro UXDS icon web component
</button>
<button class="rux-button rux-button--icon">
  <rux-icon class="rux-icon rux-button__icon" icon="settings" color="white"></rux-icon>
  Button with icon using astro UXDS icon web component
</button>

Otherwise, wrap your icon SVG in an HTML element with the BEM-style classes "rux-icon rux-button__icon":

xml
<button class="rux-button rux-button--icon">
  <div class="rux-icon rux-button__icon">
    <svg ... ></svg>
  </div>
  Button with local icon
</button>
<button class="rux-button rux-button--icon">
  <div class="rux-icon rux-button__icon">
    <svg ... ></svg>
  </div>
  Button with local icon
</button>

For more information about AstroUXDS usage outside of a Web Component environment, please see Astro UXDS Stylesheets


Revision History ​

4.1 ​
  • Add styles for and example of using slots for Icon child component
4.0 ​
  • Swapped kebab-cased icon-only attribute for standard camelCase iconOnly
  • Deprecated type attribute in favor of separate size, iconOnly, and secondary attributes. default type is No longer supported.
  • Fixed the width of the small icon-only button and ensured icon-only buttons show No text, even if text is provided
  • Fixed secondary button icon color
  • Re-enabled missing focus styles on buttons.
  • Removed undocumented critical button style.
  • Replaced Polymer 3 implementation with LitElement for improved speed and interoperability with JS Frameworks as well as simpler template declaration now available in vanilla JavaScript.
3.0 ​
  • Removed Master Off Button Style
  • Replaced various properties with css custom properties to support
  • Removed .satcom class definition
  • Removed narrow/short definitions
1.4 ​
  • Added rux_ prefixes and BEM-compatible classes to all satcom_-prefixed elements. NOTE: satcom_ will be removed in a future version
  • Disabled user selection of text on all buttons
  • Removed redundant background hover from disabled state by using :not() on the :hover state
  • Removed redundant background hover from master off by using :not() on the :hover state // deprecate after 1.4
  • Fixed Firefox alignment issue where text was misaligned vertically
  • Renamed half-height to short and half-width to narrow (Note: rux_ only, satcom_ retains old syntax)
  • Removed user-select and placed it in astro.css to apply to all input types
  • Embedded master off icon and removed the additional states required to handle icons and gradient backgrounds

Properties ​

PropertyAttributeDescriptionTypeDefault
borderlessborderlessChanges button style from solid to borderless by setting the rux-button--borderless classbooleanfalse
disableddisabledToggles disabled attribute on the buttonbooleanfalse
iconiconFor a button style guide, see the Button section in Astro UXDS Guidelines Displays an Astro icon matching this string. For a full list of available icons, see the Icons section in Astro UXDS Guidelinesstring | undefinedundefined
iconOnlyicon-onlyHides slotted text from the button by setting rux-button--icon-only classbooleanfalse
secondarysecondaryChanges button style from solid to secondary by setting the rux-button--secondary classbooleanfalse
sizesizeChanges size of a button from medium to small or large by setting sizing classes rux-button--small rux-button--large"large" | "medium" | "small" | undefinedundefined
typetypeThe button type. Use 'submit' to submit native form data."button" | "submit"'button'

Shadow Parts ​

PartDescription
"container"the components native button element.
"icon"the optional rux-icon

Dependencies ​

Used by ​

Depends on ​

Graph ​

mermaid
graph TD;
  rux-button --> rux-icon
  rux-dialog --> rux-button
  style rux-button fill:#f9f,stroke:#333,stroke-width:4px
graph TD;
  rux-button --> rux-icon
  rux-dialog --> rux-button
  style rux-button fill:#f9f,stroke:#333,stroke-width:4px

Built with StencilJS