---
title: "Feature: An icon and a style for a theme link"
manual: "Frontend Theme for Extension Development"
version: "main"
source: "Changelog/2.0/Feature-ThemeLinkIconAndStyle.rst"
modified: "2026-09-17T04:52:50+00:00"
---

# Feature: An icon and a style for a theme link

## Description

The link of the hero and teaser content elements - the **Link**
palette - offers two choices besides the link and its label:

-   ****Link style****

    **Primary**, **Secondary**, **Ghost** and, new,
    **Link**: the plain button or one of its modifiers
    `theme-button--secondary`, `theme-button--ghost` and
    `theme-button--link`.

-   ****Link icon****

    An icon of the Font Awesome Free solid set, picked by name - see
    [Feature: Editors pick an icon by name](Feature-IconPicker.html#feature-icon-picker). It is rendered before the label.

The link of an inline list item - in the link list, the social links, the
author's links and the cards of the teaser grid - has the **Link icon**
as well. It has no style: in a list of links a button would break the list.

The icon is decoration; the label still names the link for a screen reader.
It is spaced by the gap of the link, so it comes first in a right-to-left page
too.

## Impact

Two columns are added, `tt_content.tx_theme_link_icon` and
`tx_theme_list_item.link_icon`. The database schema is derived from TCA;
run the database analyser after the update.

The existing column `tt_content.tx_theme_link_variant` keeps its name and
its values, and gains the value `link`.

`<theme:icon>` has a new argument, `optional`. With it, an empty
name or a name the icon set does not have renders nothing instead of throwing.
It is meant for a name read from a record: a later Font Awesome version may
no longer have the icon an editor picked, and that costs the icon, not the
page.

A site package that overrides `Partials/ContentElement/LinkButton.html`,
`Partials/ContentElement/LinkList.html` or
`Templates/ContentElements/ThemeMediaTeaserGrid.html` renders neither the
new style nor the icon until it adds them.
