Icon

Use icons when you need consistent SVG symbols or webfont icons for interface affordances.

Live demo

Icons help visitors recognize actions and categories faster than text alone. Use them to support labels, not to replace essential wording for everyone.

Behaviour

  • Sprite icons inherit colour from context and scale with size modifiers.
  • Card Icon view renders a Material ligature in a styled span; authors type an icon name from the catalogue.
  • Concordia background icons are fixed glyphs; use when matching existing pages or legacy patterns.

Anatomy (SVG sprite)

Icon sprite anatomy

  1. Sprite file holds many named symbols (ci-*).
  2. Markup references one symbol inside an inline SVG with utility size classes.
  3. Colour usually follows text colour so icons stay on-brand.

Anatomy (Card Icon view)

  1. Stylesheet loads Material Symbols Outlined from Google Fonts.
  2. Span shows the icon name as ligature text with Card colour modifiers.
  3. Dialog: Card View = Icon, Icon name text field (./iconName).

Card icon (placeholder)

Replace with Card Icon view on light and dark backgrounds.

Content guidelines

  • Sprite: Only symbols that exist in the shared sprite can render without a code change.
  • Card: Authors pick names from the Material catalogue on Google Fonts; spelling must match.
  • Decorative vs informative: If the icon repeats visible text, treat it as decorative. If it is the only cue, provide a text alternative (see Accessibility).

Best practices

Do

  • Pick icons from Material Symbols / Google Fonts first, then check whether the sprite already has a matching ci-* symbol for implementation efficiency.
  • Use currentColor with sprite SVGs so icons respect text and link colours.

Don't

  • Do not introduce a new one-off PNG icon for a pattern that already has a sprite or Material equivalent.
  • Do not rely on colour alone for meaning; pair with text or labels.
  • Don’t use aria-label on purely decorative icons beside visible text.

When to use

  • Sprite: Navigation affordances, filters, faculty profile lines, links with external-link affordance, RSS, and any high-traffic path where one cached file helps.
  • Material Symbols (Card): Marketing or content cards where authors need a pickable icon without code deploys.

When not to use

  • Do not use icons without a clear label when the meaning is not obvious.

Related

  Resource
!Figma CU Design System (Figma) (icon and component specs).
Card Icon view, iconName, and c-card__icon styling.
  • .ci (sprite): Inline SVG with width/height 1em by default; modifiers ci--sm, ci--md, ci--lg map to CDS icon size tokens (icons.less).
  • .c-card__icon: font-family: 'Material Symbols Outlined', font-size from CDS tokens, font-variation-settings for FILL, wght, GRAD, opsz (card.less).
  • Concordia icons: Fixed-size background images; brand-specific arrows and search glyphs; not variable font.

Design tokens

Source Role
--cds-size-icon-sm / -md / -lg Sprite icon sizes via .ci--*.
--cds-font-size-300 (and variants) Card icon font size.
font-variation-settings on .c-card__icon Material weight, optical size, fill, grade for Card.

Keep weight, fill, and optical size aligned with Card LESS or design tokens unless a documented exception exists. Refer to Tokens for typography and spacing around icons.

Variants

  • Sprite symbol ids: ci-* (for example ci-chevron-right, ci-external-link, ci-rss).
  • Card icon colour modifiers: c-card__icon--burgundy, --white, --black (from card background context in card.jsp).
  • Decorative: If the icon is next to a visible label or heading, use aria-hidden="true" on the SVG or span and let text carry the name (Card Icon view does this for c-card__icon).
  • Informative: If the icon conveys meaning without redundant text, expose a name with aria-label on the SVG (or visible text), or use role="img" with a short label.
  • Links: When an icon is inside a link, the link text should include the destination (or aria-label on the link when design uses icon-only controls).

Colour and contrast

  • Sprite icons use currentColor; ensure contrast against the background meets WCAG when used as the only cue (usually pair with text).
  • Material Symbols inherit colour from .c-card__icon modifiers; verify on dark and light card backgrounds.

Testing

TestStatus
Keyboard-only flows where icons are controlsRequired when icons are interactive
Screen reader names for informative iconsRecommended
Zoom and text scaling for Material Symbols and sprite sizesRecommended

WCAG / guidelines

Related

  • Search (search affordance patterns with concordia-search-icon and sprite usage).
  • Card (Icon view and Material Symbols).

CRXDE Lite query

Use this query in CRXDE Lite to find instances of this component.

/jcr:root/content//*[@sling:resourceType = 'concordia/components/card/cardViews/iconCard.jspf']

Design language and preferred methods

Treat Material Design as the canonical icon set. Material Symbols (variable font) is how Google ships those icons on the web today. Material UI exposes the same family as React components for app teams; naming and metaphors match what you see on Google Fonts.

In AEM, preferred methods:

  1. SVG sprite (svg-sprites.svg): one file, many <symbol> entries with ids such as ci-search, ci-person, ci-external-link. Reference with <use href="…#ci-…"> and the .ci utility classes. Best when you need crisp SVG, single HTTP cache, and tight control in LESS (colour via currentColor, sizes via tokens).
  2. Material Symbols Outlined (webfont): used by the Card component Icon view. Authors type an icon name string; the JSP loads the Google Fonts stylesheet and renders a <span> with the Material Symbols font. Best when authors pick icons from the Material catalogue without deploying new SVGs.

Other patterns (existing pages):

  • Concordia icon classes (concordia-icon, concordia-search-icon, arrow classes): background images under clientlibs/img/icons/ (SVG or PNG). Prefer sprite or Material Symbols for new UI unless you are matching an existing pattern.
  • Component-specific inline SVG or images elsewhere; migrate toward the two preferred methods when touching those areas.

Material Symbols: axes and settings

Material Symbols are a variable font. Appearance is controlled by four axes:

Axis Name Role (short)
opsz Optical size Tunes stroke weight for the drawn size (often paired with CSS font-size).
wght Weight Stroke weight from thin to bold (numeric range in the font).
FILL Fill Outlined (0) versus filled (1) for states or emphasis.
GRAD Grade Fine emphasis adjustment without changing layout size much.

Card Icon view loads a stylesheet that registers the variable font axis ranges (for example optical size 24, weight 100–700, fill 0, grade 0). Card LESS sets font-variation-settings on .c-card__icon (for example weight 300, optical size 24, fill 0, grade 0). Adjust only with design approval so icons stay consistent with Figma and the CDS.

Official references:

Formats at a glance

Format Mechanism Typical assets / CSS
SVG sprite <svg class="ci …"><use href="/etc/designs/concordia/clientlibs/img/svg-sprites.svg#ci-…"></use></svg> svg-sprites.svg; base sizes in base/less/icons.less (.ci, .ci--sm / --md / --lg).
Material Symbols (webfont) <span class="c-card__icon"> with ligature text; Google Fonts stylesheet cardViews/iconCard.jspf; card/less/card.less.
Concordia icon (background) Empty <span class="concordia-icon concordia-…"> styled with background-image base/less/icons.less; files under clientlibs/img/icons/ (SVG and PNG).

Some screens combine formats (for example a sprite toolbar icon and a Concordia search glyph on the same page).

Where icons are used (codebase inventory)

Paths below are under apps/concordia/components/ unless noted. Format means how the icon is delivered in markup, not the design metaphor.

Global navigation and page chrome

LocationFormat
navigation/navigation.jsp, navigation/mega-menu-main.jspf, navigation/mega-menu-subsite.jspfSVG sprite (ci-search, ci-close, ci-chevron-up, ci-plus, ci-minus, …)
page/concordia/header.jsp, page/concordia/header-top.jsp, page/concordia/cds/body.jspSVG sprite (shared chrome and CDS template wiring)

Search

LocationFormat
search/unified-search/unified-search.jspConcordia (concordia-search-icon on the submit control)
search/thunderstone-faceted-search/thunderstone-faceted-search.jspSVG sprite (ci-search, ci-filter-list, ci-reset)
search/thunderstone-faceted-search/filters.jspConcordia (concordia-arrow-burgundy-down-icon for mobile filter affordance)

Lists, grids, and faceted filters

LocationFormat
news-events/news-list/format_faceted_search.jspSVG sprite (ci-rss) + Concordia search icon on the keyword button
news-events/news-list/format_list.jsp, news-events/news-list/format_grid.jspSVG sprite
news-events/news-list/grid-scripts/searchbar.jspConcordia search icon
news-events/events-list/events-list.jspSVG sprite (ci-rss)
news-events/calendar/calendar.jspConcordia search icon
news-events/events-category-filter/events-category-filter.jsp, news-events/audiences/audiences.jspSVG sprite
program-list/program-list.jspConcordia burgundy arrow (filter section headers)
academics/research-awards-list/research-awards-list.jspConcordia burgundy arrow
cce/cce-offering-list/cce-offering-list.htmlConcordia burgundy arrow
it-services/service-list/service-list.htmlConcordia search icon
individual-profile-list/individual-profile-list.htmlSVG sprite (ci-person, ci-school, dynamic ci-*) + Concordia burgundy arrow
individual-profile-list/filters/ (faculty.html, class-year.html, recognition.html, …)Concordia burgundy arrow

Profiles and faculty

LocationFormat
faculty/faculty-profile/faculty-profile-default.jsp, faculty-profile-academ.jspSVG sprite (supervisor, email, availability, website, circle check/cross, external link, …)
faculty/faculty-profile/sections/profile-block.jspf, contact-information.jspfSVG sprite
faculty/faculty-profile-list/ (listitem_full.jsp, listitem_name_title_status.jsp, supervisor_listitem.jsp, manual-entry.jsp, …)SVG sprite (placeholder, email, …)
faculty/faculty-profile-search/faculty-profile-search.jspSVG sprite

In-page navigation and secondary nav

LocationFormat
anchor-navigation/anchor-navigation.htmlSVG sprite (ci-chevron-up beside anchor links)
secondary-navigation/horizontal.jsp, secondary-navigation/vertical.jspSVG sprite (ci-chevron-up in injected submenu UI)

Content components

LocationFormat
card/ (Icon view via cardViews/iconCard.jspf)Material Symbols webfont only (iconName text + Google Fonts link)
link-list/link-list.jspSVG sprite (ci-chevron-right, ci-external-link per item styling in link-list.less)
join-the-conversation/join-the-conversation.htmlSVG sprite (iconId from model maps to #ci-* in the sprite)
alert/alert.jspSVG sprite
status-bar/status-bar.jspSVG sprite
value-prop-block/value-prop-block.jspSVG sprite (accordion arrow pattern)
title/title.jspSVG sprite

Auditing or extending usage

To list every JSP/HTML reference to the shared sprite:

rg 'svg-sprites\.svg' apps/concordia --glob '*.{jsp,jspf,html,htm}'

To find Concordia background icon spans:

rg 'concordia-icon' apps/concordia --glob '*.{jsp,jspf,html,htm}'

Implementation

PatternWhereNotes
SVG spriteetc/designs/concordia/clientlibs/img/svg-sprites.svgCentral symbol definitions.
.ci baseetc/designs/concordia/clientlibs/base/less/icons.lessSize, display, fill: currentcolor.
Material Symbols (Card)apps/concordia/components/card/cardViews/iconCard.jspfGoogle Fonts <link>, span.c-card__icon, iconName.
Card icon CSSetc/designs/concordia/clientlibs/card/less/card.less.c-card__icon and colour modifiers.
Concordia iconsbase/less/icons.less.concordia-icon, .concordia-search-icon, arrow classes, background URLs.

Markup examples

Sprite:

<svg class="ci ci--md" aria-hidden="true">
  <use href="/etc/designs/concordia/clientlibs/img/svg-sprites.svg#ci-external-link"></use>
</svg>

Informative sprite (when there is no adjacent text):

<svg class="ci ci--sm" role="img" aria-label="RSS">
  <use href="/etc/designs/concordia/clientlibs/img/svg-sprites.svg#ci-rss"></use>
</svg>

Dependencies

  • Card Icon view: Google Fonts stylesheet (Material Symbols Outlined); Card clientlibs.
  • Sprite: No font download; relies on svg-sprites.svg and icons.less (typically via base or embedded clientlibs).
  • Material webfont: iconCard.jspf includes the Google Fonts <link>; avoid duplicating that pattern if Icon view is used heavily on one page until a central load exists.
  Resource
!AEM Component paths in Implementation; sprite in design clientlibs.