Fresh logo

Styling active links

Fresh automatically enhances the accessibility of <a> elements by adding the aria-current attribute when rendering links that match the current URL. This attribute is recognized by assistive technologies and clearly indicates the current page within a set of pages.

  • aria-current=“page” - Added to links with an exact path match, enhancing accessibility by indicating the current page to assistive technologies.

As we aim to improve accessibility, we encourage the use of aria-current for styling current links where applicable.

Styling with CSS

The aria-current attribute is easily styled with CSS using attribute selectors, providing a native way to visually differentiate the active link.

/* Give links pointing to the current page a green color */
a[aria-current='page'] {
  color: green;
}

/* Color all ancestor links of the current page */
a[aria-current='true'] {
  color: peachpuff;
}

Tailwind / Twind

In Tailwind or similar CSS frameworks like Twind, you can apply styles to elements with the aria-current attribute using bracket notation in your class definitions. However, the specific syntax varies slightly between Tailwind and Twind. For Tailwind, use the syntax:

function Menu() {
  return (
    <a href="/foo" class="aria-[current]:text-green-600">
      Link to some page
    </a>
  );
}

For Twind, the syntax is:

function Menu() {
  return (
    <a href="/foo" class="[aria-current]:text-green-600">
      Link to some page
    </a>
  );
}

Twind Plugin

The original twind plugin (import twindPlugin from "$fresh/plugins/twind.ts";) supports the above style:

class="[aria-current='page']:text-green-600"

TwindV1 Plugin

The new twind plugin (import twindPlugin from "$fresh/plugins/twindv1.ts";) requires a slightly different syntax (note the position of the left bracket):

class="aria-[current='page']:text-green-600"