Skip to content
On this page

Focus ring ​

Focus rings are accessible outlines for components to show keyboard focus.

Focus rings follow the same heuristics as :focus-visible to determine when they are visible.

Three elements with a focus ring that moves between them.

Usage ​

Focus rings display on keyboard navigation. They may be attached to a control in one of three ways.

An element with a focus ring.

  1. Attached to the parent element

    html
    <button style="position: relative">
      <md-focus-ring style="--md-focus-ring-shape: 8px"></md-focus-ring>
    </button>
  2. Attached to a referenced element

    html
    <div style="position: relative">
      <md-focus-ring for="control" style="--md-focus-ring-shape: 8px"></md-focus-ring>
      <input id="control">
    </div>
  3. Attached imperatively

    html
    <div style="position: relative">
      <md-focus-ring id="ring" style="--md-focus-ring-shape: 8px"></md-focus-ring>
      <button id="ring-control"></button>
    </div>
    <script>
      const focusRing = document.querySelector('#ring');
      const control = document.querySelector('#ring-control');
      focusRing.attach(control);
    </script>

Note: focus rings must be placed within a position: relative container.

Inward ​

Focus rings can be changed to animate inwards by adding an inward attribute. This is useful for components like list items.

An element with a focus ring that animates inward.

html
<button style="position: relative">
  <md-focus-ring inward style="--md-focus-ring-shape: 8px"></md-focus-ring>
</button>

Animation ​

The focus ring animation may be customized or disabled using CSS custom properties.

An element with a focus ring that does not animate.

html
<style>
  md-focus-ring {
    --md-focus-ring-duration: 0s; /* disabled animation */
  }
</style>

Accessibility ​

Focus rings are visual components and do not have assistive technology requirements.

Theming ​

Focus rings supports Material theming and can be customized in terms of color and shape.

Tokens ​

TokenDefault value
--md-focus-ring-color--md-sys-color-secondary
--md-focus-ring-shape--md-sys-shape-corner-full
--md-focus-ring-width3px

Example ​

Image of a focus ring with a different theme applied

html
<style>
md-focus-ring {
  --md-focus-ring-shape: 0px;
  --md-focus-ring-width: 2px;
  --md-focus-ring-active-width: 4px;
  --md-sys-color-secondary: #4A6363;
}
</style>

<button>
  <md-focus-ring></md-focus-ring>
</button>

API ​

MdFocusRing <md-focus-ring> ​

Properties ​

PropertyAttributeTypeDefaultDescription
visiblevisiblebooleanfalseMakes the focus ring visible.
inwardinwardbooleanfalseMakes the focus ring animate inwards instead of outwards.
htmlForstringundefined
controlHTMLElementundefined

Methods ​

MethodParametersReturnsDescription
attachcontrolvoid
detachNonevoid

Events ​

EventTypeBubblesComposedDescription
visibility-changedEventNoNoFired whenever visible changes.
Focus ring has loaded