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)
![]()
- Sprite file holds many named symbols (
ci-*). - Markup references one symbol inside an inline SVG with utility size classes.
- Colour usually follows text colour so icons stay on-brand.
Anatomy (Card Icon view)
- Stylesheet loads Material Symbols Outlined from Google Fonts.
- Span shows the icon name as ligature text with Card colour modifiers.
- Dialog: Card View = Icon, Icon name text field (
./iconName).

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
currentColorwith 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-labelon 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 withwidth/height1em by default; modifiersci--sm,ci--md,ci--lgmap to CDS icon size tokens (icons.less)..c-card__icon:font-family: 'Material Symbols Outlined',font-sizefrom CDS tokens,font-variation-settingsfor 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 exampleci-chevron-right,ci-external-link,ci-rss). - Card icon colour modifiers:
c-card__icon--burgundy,--white,--black(from card background context incard.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 forc-card__icon). - Informative: If the icon conveys meaning without redundant text, expose a name with
aria-labelon the SVG (or visible text), or userole="img"with a short label. - Links: When an icon is inside a link, the link text should include the destination (or
aria-labelon 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__iconmodifiers; verify on dark and light card backgrounds.
Testing
| Test | Status |
|---|---|
| Keyboard-only flows where icons are controls | Required when icons are interactive |
| Screen reader names for informative icons | Recommended |
| Zoom and text scaling for Material Symbols and sprite sizes | Recommended |
WCAG / guidelines
Related
- Search (search affordance patterns with
concordia-search-iconand 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:
- SVG sprite (
svg-sprites.svg): one file, many<symbol>entries withids such asci-search,ci-person,ci-external-link. Reference with<use href="…#ci-…">and the.ciutility classes. Best when you need crisp SVG, single HTTP cache, and tight control in LESS (colour viacurrentColor, sizes via tokens). - 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 underclientlibs/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:
- Material Symbols guide (Google for Developers): axes,
font-variation-settings, and how the font works in CSS. - Material Symbols and icons on Google Fonts: search icons, preview weight / fill / size, and copy names for authoring.
- Material Icons (MUI): React component API; same icon names and metaphors for teams building in MUI.
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
| Location | Format |
|---|---|
navigation/navigation.jsp, navigation/mega-menu-main.jspf, navigation/mega-menu-subsite.jspf | SVG 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.jsp | SVG sprite (shared chrome and CDS template wiring) |
Search
| Location | Format |
|---|---|
search/unified-search/unified-search.jsp | Concordia (concordia-search-icon on the submit control) |
search/thunderstone-faceted-search/thunderstone-faceted-search.jsp | SVG sprite (ci-search, ci-filter-list, ci-reset) |
search/thunderstone-faceted-search/filters.jsp | Concordia (concordia-arrow-burgundy-down-icon for mobile filter affordance) |
Lists, grids, and faceted filters
| Location | Format |
|---|---|
news-events/news-list/format_faceted_search.jsp | SVG sprite (ci-rss) + Concordia search icon on the keyword button |
news-events/news-list/format_list.jsp, news-events/news-list/format_grid.jsp | SVG sprite |
news-events/news-list/grid-scripts/searchbar.jsp | Concordia search icon |
news-events/events-list/events-list.jsp | SVG sprite (ci-rss) |
news-events/calendar/calendar.jsp | Concordia search icon |
news-events/events-category-filter/events-category-filter.jsp, news-events/audiences/audiences.jsp | SVG sprite |
program-list/program-list.jsp | Concordia burgundy arrow (filter section headers) |
academics/research-awards-list/research-awards-list.jsp | Concordia burgundy arrow |
cce/cce-offering-list/cce-offering-list.html | Concordia burgundy arrow |
it-services/service-list/service-list.html | Concordia search icon |
individual-profile-list/individual-profile-list.html | SVG 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
| Location | Format |
|---|---|
faculty/faculty-profile/faculty-profile-default.jsp, faculty-profile-academ.jsp | SVG sprite (supervisor, email, availability, website, circle check/cross, external link, …) |
faculty/faculty-profile/sections/profile-block.jspf, contact-information.jspf | SVG 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.jsp | SVG sprite |
In-page navigation and secondary nav
| Location | Format |
|---|---|
anchor-navigation/anchor-navigation.html | SVG sprite (ci-chevron-up beside anchor links) |
secondary-navigation/horizontal.jsp, secondary-navigation/vertical.jsp | SVG sprite (ci-chevron-up in injected submenu UI) |
Content components
| Location | Format |
|---|---|
card/ (Icon view via cardViews/iconCard.jspf) | Material Symbols webfont only (iconName text + Google Fonts link) |
link-list/link-list.jsp | SVG sprite (ci-chevron-right, ci-external-link per item styling in link-list.less) |
join-the-conversation/join-the-conversation.html | SVG sprite (iconId from model maps to #ci-* in the sprite) |
alert/alert.jsp | SVG sprite |
status-bar/status-bar.jsp | SVG sprite |
value-prop-block/value-prop-block.jsp | SVG sprite (accordion arrow pattern) |
title/title.jsp | SVG 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
| Pattern | Where | Notes |
|---|---|---|
| SVG sprite | etc/designs/concordia/clientlibs/img/svg-sprites.svg | Central symbol definitions. |
.ci base | etc/designs/concordia/clientlibs/base/less/icons.less | Size, display, fill: currentcolor. |
| Material Symbols (Card) | apps/concordia/components/card/cardViews/iconCard.jspf | Google Fonts <link>, span.c-card__icon, iconName. |
| Card icon CSS | etc/designs/concordia/clientlibs/card/less/card.less | .c-card__icon and colour modifiers. |
| Concordia icons | base/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.svgandicons.less(typically via base or embedded clientlibs). - Material webfont:
iconCard.jspfincludes 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. |