---
title: "Feature: Social link logos"
manual: "Frontend Theme for Extension Development"
version: "main"
source: "Changelog/2.0/Feature-SocialLinkLogos.rst"
rendered: "2026-09-28T12:50:34+00:00"
---

# Feature: Social link logos {#feature-social-link-logos}

## Description {#description}

`theme_sociallinks` renders a row of platform logos. Each entry of the
element gained a field **Platform logo**, which offers the fifteen
brand logos the extension vendors - see [Feature: Brand logos](Feature-BrandLogos.html#feature-brand-logos) \- with the
logo next to every option and a grid of them under the list.

The element used to render the same vertical list of text links as
`theme_linklist`, because no platform logo shipped. It now has a
component of its own, `.theme-social-links`: the row is horizontal, and
an entry that has a logo collapses to a square of the minimum target size.

### The name stays in the markup {#the-name-stays-in-the-markup}

An entry always carries the platform's name as text, whether a logo was
picked or not. Where one was, the stylesheet hides that text **visually** and
it goes on naming the link for assistive technology; the logo itself is
`aria-hidden`, like every other icon of the theme. A link whose only
content is a logo would otherwise be announced by its URL.

The rule that hides the name is `:has(.theme-icon)` on the link, not a
class the template writes. The logo comes out of a record and is rendered
`optional`, so a platform name a later Font Awesome version dropped
renders nothing - and a class decided earlier would then hide the name of an
entry with nothing left in it.

## Impact {#impact}

A new column `tx_theme_list_item.brand_icon`, derived from the TCA by
`DefaultTcaSchema` like every other column of that table, so the database
analyser adds it. Existing records are unaffected: the column is empty, and an
entry without a logo renders as the text link it rendered before.

The element's child form changed: the entries of `theme_sociallinks` now
show **Platform logo**, **Link** and **Link label**
instead of the shared **Link** palette. The palette's own icon field
offers the solid set, which holds no platform logo, so it is no longer shown
on this relation.

A site package that overrode
`Templates/ContentElements/ThemeSociallinks.html` or styled
`.theme-content-menu` inside `theme_sociallinks` has to follow the
new markup - see [Components](../../Components/Index.html#components).

The seeded showcase shows both states: two entries with a logo, two without.
