Button

A button makes an action visible and also triggers this action through interaction.

Normal buttons

Buttons have 5 appearance variations covering different use cases for strong or weak CTAs. Every variation has its own CSS modifier class:

CSS classDescription
No modifier, defaultNeutral button
flix-btn--primaryPrimary button
flix-btn--secondarySecondary button
flix-btn--tertiaryTertiary button
flix-btn--dangerDanger button
    <button type="button" class="flix-btn">Neutral</button>
    <button type="button" class="flix-btn flix-btn--primary">Primary</button>
    <button type="button" class="flix-btn flix-btn--secondary">Secondary</button>
    <button type="button" class="flix-btn flix-btn--tertiary">Tertiary</button>
    <button type="button" class="flix-btn flix-btn--danger">Danger</button>

Please note that although you can use flix-btn classes with any html elements we highly advise using the native HTML button element as much as possible to keep the right semantics and follow the best accessibility practices.

Pay attention that multiple button siblings in one container preserve side spacing, this means you don't need additional styles or elements when creating a simple Yes/No button groups.

flix-btn--link modifier triggers a more subtle button "link" variation. This can work in combination with any other modifier in order to achieve the desired result. A good option if you need an "arrow-button" like component with a different icon.

    <button type="button" class="flix-btn flix-btn--link flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Neutral</span>
    </button>
    <button type="button" class="flix-btn flix-btn--primary flix-btn--link flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Primary</span>
    </button>
    <button type="button" class="flix-btn flix-btn--secondary flix-btn--link flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid"></i>
      <span class="flix-btn__text">Secondary</span>
    </button>
    <button type="button" class="flix-btn flix-btn--tertiary flix-btn--link flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid"></i>
      <span class="flix-btn__text">Tertiary</span>
    </button>
    <button type="button" class="flix-btn flix-btn--danger flix-btn--link flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid"></i>
      <span class="flix-btn__text">Danger</span>
    </button>

Buttons and icons

It's possible to put an icon element inside the button, however 4 simple modifications are required in order for it to work nicely:

  • flix-btn--has-icon modifier class should be added to the button;
  • flix-btn__icon mix class should be added to the flix-icon element;
  • to hide icon element from screen readers aria-hidden="true" needs to be applied to it;
  • button text should be wrapped in flix-btn__text element;
<button class="flix-btn flix-btn--has-icon flix-btn--secondary">
    <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
    <span class="flix-btn__text">Icon button</span>
</button>

When using icon-only buttons, make sure to provide a textual description for assistive technologies on aria-label.

    <button type="button" aria-label="Settings" class="flix-btn flix-btn--has-icon flix-btn--tertiary flix-btn--square">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
    </button>
    <button type="button" aria-label="Delete" class="flix-btn flix-btn--has-icon flix-btn--danger flix-btn--square">
      <i class="flix-btn__icon flix-icon flix-icon-delete" aria-hidden="true"></i>
    </button>
    <button type="button" aria-label="Available Seats: 1" class="flix-btn flix-btn--has-icon flix-btn--disabled flix-btn--square" disabled="">
      1
    </button>
    <button type="button" aria-label="Get info" class="flix-btn flix-btn--has-icon flix-btn--square flix-btn--link">
      <i class="flix-btn__icon flix-icon flix-icon-info" aria-hidden="true"></i>
    </button>

Disabled button

flix-btn--disabled modifier can be added to any button in order to indicate a blocked action, pair it with the disabled attribute to fully block interaction.

    <button type="button" class="flix-btn flix-btn--disabled" disabled="">Neutral</button>
    <button type="button" class="flix-btn flix-btn--primary flix-btn--disabled" disabled="">Primary</button>
    <button type="button" class="flix-btn flix-btn--secondary flix-btn--disabled" disabled="">Secondary</button>
    <button type="button" class="flix-btn flix-btn--tertiary flix-btn--disabled" disabled="">Tertiary</button>
    <button type="button" class="flix-btn flix-btn--danger flix-btn--disabled" disabled="">Danger</button>
    <button type="button" disabled="" class="flix-btn flix-btn--link flix-btn--disabled flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Neutral</span>
    </button>
    <button type="button" disabled="" class="flix-btn flix-btn--primary flix-btn--link flix-btn--disabled flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Primary</span>
    </button>
    <button type="button" disabled="" class="flix-btn flix-btn--secondary flix-btn--link flix-btn--disabled flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Secondary</span>
    </button>
    <button type="button" disabled="" class="flix-btn flix-btn--tertiary flix-btn--link flix-btn--disabled flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Tertiary</span>
    </button>
    <button type="button" disabled="" class="flix-btn flix-btn--danger flix-btn--link flix-btn--disabled flix-btn--has-icon">
      <i class="flix-btn__icon flix-icon flix-icon-settings-solid" aria-hidden="true"></i>
      <span class="flix-btn__text">Danger</span>
    </button>

Size variations

  • flix-btn--block block button, has 100% width, occupies the whole container;
  • flix-btn--square small square button;

    <button type="button" class="flix-btn flix-btn--block">Neutral block</button>
    <br/>
    <button type="button" class="flix-btn flix-btn--square" aria-label="Settings"><i class="flix-btn__icon flix-icon flix-icon-settings-solid"></i></button>

Loading state

All button types have "loading" state that can be triggered with a flix-btn--loading modifier. Use it when form data processing needs to be indicated to the user.

    <button type="button" class="flix-btn flix-btn--secondary flix-btn--loading">Loading...</button>
    <button type="button" class="flix-btn flix-btn--primary flix-btn--link flix-btn--loading">Loading...</button>

Modifiers list

SelectorDescription
flix-btn--primaryprimary button
flix-btn--secondarysecondary button
flix-btn--tertiarytertiary button
flix-btn--dangerdanger button
flix-btn--disableddisabled button
flix-btn--loadingloading button
flix-btn--has-iconbutton with icon
flix-btn--linkbutton link
flix-btn--blockblock button
flix-btn--squaresquare button