Skip to main content

Your opinion matters! Together with you, we want to continuously improve KoliBri. Share your ideas, wishes, or suggestions—quickly and easily.

ButtonLink

This documentation is currently being revised and is in beta status. Content may still change.
This component is being retested for accessibility. The full test is still pending and can only be completed after a release.

Synonyms: Button-Link, Pseudo-Link

Description: The ButtonLink component is semantically a button but has both the visual appearance and functional behavior of a link. It combines all relevant properties of the button with the design characteristics of a link, enabling more flexible styling of interactive elements.

Example

A button that looks and behaves like a link:

<KolButtonLink _label="Button looks like a link" />

Accessibility

  • The component is semantically a button, which is important for accessibility – screen readers present the element correctly as a button.
  • The visual link design is implemented via CSS and does not affect the semantic role.
  • The component supports all standard button accessibility properties such as _disabled, _ariaExpanded, _ariaSelected, _ariaControls and _ariaDescription.
  • Keyboard navigation and focus management follow standard button patterns.

Usage

The ButtonLink component is suitable for cases where the semantic structure of a button is required but the visual appearance of a link is desired:

  • Button: Semantically and visually a button – use this for primary actions.
  • Link: Semantically and visually a link – use this for navigation.
  • ButtonLink: Semantically a button, visually a link – use this when you need a link-like appearance with button semantics.

Best Practices / Recommendations

  • Use ButtonLink only when it makes sense to combine a link-like appearance with button semantics.
  • Use the _disabled property with justification – disabled ButtonLinks should explain why they are not available.
  • Icons should be used sparingly and meaningfully via the _icons property.
  • Use the _on property with a click callback to control the component – not _href.

Use Cases

  • Contextual actions that should look link-like but require button semantics
  • Navigation in tables or lists that require button semantics for accessibility
  • Business logic triggers that should appear visually unobtrusive like links

Construction / Technology

Playground

Tooltip Align
Icons
<KolButtonLink _label="ButtonLink" />

Functionality (with Code)

A simple ButtonLink with basic properties:

<KolButtonLink _label="Works like a button" />

With Icons

ButtonLink with icons before and/or after the label:

Icons
<KolButtonLink _icons="fa-solid fa-heart" _label="With icon" />

With Hidden Label

The label is hidden and only displayed as a tooltip:

<KolButtonLink _hideLabel={true} _label="Tooltip" />

Disabled

A disabled ButtonLink does not respond to interactions:

<KolButtonLink _disabled={true} _label="Disabled" />

With Keyboard Shortcut

A visual hint for an available keyboard shortcut:

<KolButtonLink _label="With Shortkey" _shortKey="s" />

ARIA Attributes

ButtonLink with ARIA attributes for extended semantics:

<KolButtonLink _ariaControls="menu-content" _ariaExpanded={false} _label="Menu" />

Events

For the handling of events or callbacks, see .

EventTriggerValue
clickElement is clicked_value property
onMouseDownA pointing device key is pressed while the pointer is inside the element

API

Overview

The ButtonLink component is semantically a button but has the appearance of a link. All relevant properties of the Button component are adopted and extended with the design-defining properties of a link.

A button can be disabled, therefore the ButtonLink also has the _disabled property. How this is styled visually is determined by the UX designer.

Instead of using _href as with a regular link, the ButtonLink's behavior is controlled via a click callback using the _on property.

A link has the target property which optionally opens the link in a new window/tab. This behavior is not yet implemented.

Since a link, unlike a button, is not offered in multiple variants (primary, secondary, etc.), the _customClass and _variant properties are not available.

Properties

PropertyAttributeDescriptionTypeDefault
_accessKey_access-keyDefines the key combination that can be used to trigger or focus the component's interactive element.string | undefinedundefined
_ariaControls_aria-controlsDefines which elements are controlled by this component. (https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls)string | undefinedundefined
_ariaDescription_aria-descriptionDefines the value for the aria-description attribute.string | undefinedundefined
_ariaExpanded_aria-expandedDefines whether the interactive element of the component expanded something. (https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded)boolean | undefinedundefined
_ariaSelected_aria-selectedDefines whether the interactive element of the component is selected (e.g. role=tab). (https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected)boolean | undefinedundefined
_disabled_disabledMakes the element not focusable and ignore all events.boolean | undefinedfalse
_hideLabel_hide-labelHides the caption by default and displays the caption text with a tooltip when the interactive element is focused or the mouse is over it.boolean | undefinedfalse
_icons_iconsDefines the icon classnames (e.g. _icons="fa-solid fa-user").KoliBriHorizontalIcons & KoliBriVerticalIcons | string | undefinedundefined
_inline_inlineDefines whether the component is displayed as a standalone block or inline without enforcing a minimum size of 44px.boolean | undefinedtrue
_label (required)_labelDefines the visible or semantic label of the component (e.g. aria-label, label, headline, caption, summary, etc.). Set to false to enable the expert slot.stringundefined
_name_nameDefines the technical name of an input field.string | undefinedundefined
_on--Gibt die EventCallback-Funktionen für die Button-Events an.undefined | { onClick?: EventValueOrEventCallback<MouseEvent, StencilUnknown> | undefined; onMouseDown?: EventCallback<MouseEvent> | undefined; }undefined
_role_role[DEPRECATED] We prefer the semantic role of the HTML element and do not allow for customization. We will remove this prop in the future.

Defines the role of the components primary element.
"tab" | "treeitem" | undefinedundefined
_shortKey_short-keyAdds a visual shortcut hint after the label and instructs the screen reader to read the shortcut aloud.string | undefinedundefined
_tooltipAlign_tooltip-alignDefines where to show the Tooltip preferably: top, right, bottom or left."bottom" | "left" | "right" | "top" | undefined'top'
_type_typeDefines either the type of the component or of the components interactive element."button" | "reset" | "submit" | undefined'button'
_value_valueDefines the value of the element.boolean | null | number | object | string | undefinedundefined
_variant_variantDefines which variant should be used for presentation.string | undefinedundefined

Methods

click

click() => Promise<void>

Clicks the primary interactive element inside this component.

Returns

Type: Promise<void>

focus() => Promise<void>

Sets focus on the internal element.

Returns

Type: Promise<void>

getValue() => Promise<StencilUnknown>

Returns the current value.

Returns

Type: Promise<StencilUnknown>

Slots

SlotDescription
"expert"Custom label content, e.g. for rich text or icons.

Further Information