ButtonLink
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,_ariaControlsand_ariaDescription. - Keyboard navigation and focus management follow standard button patterns.
Links and References
Usage
Difference between Button and Link
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
_disabledproperty with justification – disabled ButtonLinks should explain why they are not available. - Icons should be used sparingly and meaningfully via the
_iconsproperty. - Use the
_onproperty 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
<KolButtonLink _label="ButtonLink" />Functionality (with Code)
Basic ButtonLink
A simple ButtonLink with basic properties:
<KolButtonLink _label="Works like a button" />With Icons
ButtonLink with icons before and/or after the label:
<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
| Event | Trigger | Value |
|---|---|---|
click | Element is clicked | _value property |
onMouseDown | A 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
| Property | Attribute | Description | Type | Default |
|---|---|---|---|---|
_accessKey | _access-key | Defines the key combination that can be used to trigger or focus the component's interactive element. | string | undefined | undefined |
_ariaControls | _aria-controls | Defines which elements are controlled by this component. (https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls) | string | undefined | undefined |
_ariaDescription | _aria-description | Defines the value for the aria-description attribute. | string | undefined | undefined |
_ariaExpanded | _aria-expanded | Defines whether the interactive element of the component expanded something. (https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded) | boolean | undefined | undefined |
_ariaSelected | _aria-selected | Defines 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 | undefined | undefined |
_disabled | _disabled | Makes the element not focusable and ignore all events. | boolean | undefined | false |
_hideLabel | _hide-label | Hides 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 | undefined | false |
_icons | _icons | Defines the icon classnames (e.g. _icons="fa-solid fa-user"). | KoliBriHorizontalIcons & KoliBriVerticalIcons | string | undefined | undefined |
_inline | _inline | Defines whether the component is displayed as a standalone block or inline without enforcing a minimum size of 44px. | boolean | undefined | true |
_label (required) | _label | Defines 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. | string | undefined |
_name | _name | Defines the technical name of an input field. | string | undefined | undefined |
_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" | undefined | undefined |
_shortKey | _short-key | Adds a visual shortcut hint after the label and instructs the screen reader to read the shortcut aloud. | string | undefined | undefined |
_tooltipAlign | _tooltip-align | Defines where to show the Tooltip preferably: top, right, bottom or left. | "bottom" | "left" | "right" | "top" | undefined | 'top' |
_type | _type | Defines either the type of the component or of the components interactive element. | "button" | "reset" | "submit" | undefined | 'button' |
_value | _value | Defines the value of the element. | boolean | null | number | object | string | undefined | undefined |
_variant | _variant | Defines which variant should be used for presentation. | string | undefined | undefined |
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
| Slot | Description |
|---|---|
"expert" | Custom label content, e.g. for rich text or icons. |