Skip to content

Button

Triggers an action. Six colour roles, five variants, four sizes, icon-only, loading and disabled states.

Variants

Colours

Every colour role works with every variant.

Sizes

With icons

States

Link styled as button

Block

Installation

Everything ships in one stylesheet. There is nothing to import per component.

<link rel="stylesheet" href="https://mian.ro/dist/mian.css">

Prefer to own the files? /r/button.json is a registry item with this component's CSS and example markup, ready to copy into your project with any tool that reads the open registry-item format.

Class reference

Class / attributeDescription
mn-btnBase button. Solid, primary colour by default.
mn-btn-outlineBordered, transparent background. Neutral unless a colour role is added.
mn-btn-softTinted background, coloured text.
mn-btn-ghostNo background until hover.
mn-btn-linkLooks like a link, behaves like a button.
mn-btn-xs · mn-btn-sm · mn-btn-lgSizes. Heights come from the noodle's density.
mn-btn-iconSquare, for a single icon. Give it an aria-label.
mn-btn-block · mn-btn-pillFull width · fully rounded.
mn-primary · mn-secondary · mn-accent · mn-success · mn-warning · mn-danger · mn-info · mn-neutralColour roles. Combine with any variant.
aria-busy="true"Loading state: hides the label, shows a spinner, blocks clicks.

Accessibility

  • Use a real <button> for actions and <a class="mn-btn"> for navigation.
  • Icon-only buttons need an aria-label; the icon itself is aria-hidden.
  • aria-busy="true" is announced by screen readers and prevents double submission.
  • Disabled buttons use the native disabled attribute; for a focusable disabled state use aria-disabled="true".
Choose a noodle

Minimal

Flat

Pixel

Linear

Thin

Glass

Textured

Bold

Elegant

Rounded

On this page