Home

Links

Usage

Links are controlled by a small set of state tokens. Start with:

  • --link-color, --link-color-visited, and --link-color-hover for state colors

  • --link-decoration and --link-decoration-hover for underline behavior

  • --link-focus-ring-* tokens to align focus styling with your theme

  • --link-transition-duration for interaction timing

These tokens inherit semantic color and focus-ring defaults, so overriding them preserves dark-mode variants automatically.

Tokens

Link Color Tokens

Control the visual appearance of links in different states. These tokens automatically inherit dark mode behavior from semantic tokens.

TokenDescriptionDefault Value
--link-colorDefault link colorvar(--color-accent)
--link-color-darkDefault link color in dark modevar(--color-accent-dark)
--link-color-visitedColor for visited linksvar(--color-purple-700)
--link-color-visited-darkVisited link color in dark modevar(--color-purple-400)
--link-color-hoverColor when hovering or focusedvar(--color-blue-700)
--link-color-hover-darkHover/focus color in dark modevar(--color-blue-300)

Link Decoration Tokens

Control underline visibility and behavior across different link states.

TokenDescriptionDefault Value
--link-decorationDefault text decoration (underline visibility)none
--link-decoration-hoverText decoration on hover/focusunderline

Link Interaction Tokens

Control transitions and focus ring styling for enhanced user experience.

TokenDescriptionDefault Value
--link-transition-durationDuration of color transitionsvar(--transition-duration-base)
--link-focus-ring-widthFocus ring outline widthvar(--focus-ring-width)
--link-focus-ring-colorFocus ring outline colorvar(--focus-ring-color)
--link-focus-ring-offsetFocus ring offset from linkvar(--focus-ring-offset)
--link-focus-border-radiusFocus ring border radiusvar(--radius-xs)

Examples

Default Links

Clean, modern link styling with hover underlines:

:root {
  /* No design token overrides */
}

This is a paragraph with a default link that shows underline on hover. Links maintain clean appearance while providing clear interaction feedback.

Always Underlined Links

Traditional web styling with persistent underlines:

:root {
  --link-decoration: underline;
  --link-decoration-hover: underline;
  --link-color: var(--color-blue-700);
}

Traditional underlined links maintain the classic web convention where all links are visually distinct through persistent underlines, making them immediately identifiable as clickable elements.

Subtle Links

Reduced contrast for secondary content areas:

:root {
  --link-color: var(--color-gray-600);
  --link-color-hover: var(--color-gray-900);
  --link-decoration: none;
  --link-decoration-hover: underline;
  --link-transition-duration: var(--transition-duration-slow);
}

For sidebars, footnotes, or secondary content, subtle links use muted colors that don't compete with primary content while still providing clear interaction feedback through slower, more deliberate transitions.

High Contrast Links

Bold, accessible styling for maximum visibility:

:root {
  --link-color: var(--color-blue-800);
  --link-color-visited: var(--color-purple-800);
  --link-color-hover: var(--color-blue-900);
  --link-decoration: underline;
  --link-decoration-hover: underline;
}

For accessibility-focused designs, high-contrast links use strong colors and persistent underlines to ensure maximum visibility. Previously visited links show distinct purple coloring to help users track their navigation history.

Tips

State colors: Set --link-color, --link-color-visited, and --link-color-hover for predictable state changes without per-link CSS.

Decoration: Use --link-decoration and --link-decoration-hover to control underlines across all link states.

Focus ring: Align link focus styling with the global focus system via --link-focus-ring-*.

Global accent: Override --color-accent to shift the default link color everywhere, then fine-tune with specific --link-* tokens.

© 2026 Stencila