- <SeoBreadcrumbs> (UI-SPEC L1): the resolve answer's trail as nav > ol with server-rendered links and the last item as aria-current text; nothing with fewer than two items, with page meta seo.breadcrumbs false or with the option seo.breadcrumbs false; props items, label, hideCurrent, locale - one trail per page: the first rendered instance claims it (seoClaimBreadcrumbs, kept per path) - seoSitePath: same-origin CMS URLs become paths, non-http(s) URLs are never links; useSeoLabels takes an optional locale - L1 default styles with CSS-generated separators
59 lines
1.7 KiB
CSS
59 lines
1.7 KiB
CSS
/* SEO layer base styles. Only .seo-* classes, never a bare element or
|
|
another layer's classes; values come from seo-tokens.css, and the app's
|
|
own CSS (loaded after the layers') wins. Long names and titles wrap and
|
|
are never truncated: the full text stays in the HTML. */
|
|
|
|
/* Visually hidden, still read by screen readers (the new-tab hint inside
|
|
external links, labels of icon-only controls). */
|
|
.seo-visually-hidden {
|
|
position: absolute !important;
|
|
width: 1px !important;
|
|
height: 1px !important;
|
|
padding: 0 !important;
|
|
margin: -1px !important;
|
|
overflow: hidden !important;
|
|
clip: rect(0, 0, 0, 0) !important;
|
|
clip-path: inset(50%) !important;
|
|
white-space: nowrap !important;
|
|
border: 0 !important;
|
|
}
|
|
|
|
/* The focus ring of every layer link: 2px in the accent colour. */
|
|
.seo-breadcrumbs a:focus-visible,
|
|
.seo-pagination a:focus-visible,
|
|
.seo-sitemap a:focus-visible,
|
|
.seo-sitemap-link:focus-visible {
|
|
outline: 2px solid var(--seo-color-accent);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* L1 breadcrumbs: a wrapping row, separators generated here (never read by
|
|
screen readers), the current page muted and bold. */
|
|
.seo-breadcrumbs {
|
|
font-size: var(--seo-font-size-small);
|
|
}
|
|
.seo-breadcrumbs__list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
list-style: none;
|
|
margin: 0 0 var(--seo-space-4);
|
|
padding: 0;
|
|
}
|
|
.seo-breadcrumbs__item {
|
|
overflow-wrap: anywhere;
|
|
}
|
|
.seo-breadcrumbs__item + .seo-breadcrumbs__item::before {
|
|
content: var(--seo-breadcrumbs-separator) / '';
|
|
color: var(--seo-color-muted);
|
|
padding-inline: var(--seo-space-2);
|
|
}
|
|
.seo-breadcrumbs__link {
|
|
display: inline-block;
|
|
padding-block: var(--seo-space-1);
|
|
}
|
|
.seo-breadcrumbs__current {
|
|
color: var(--seo-color-muted);
|
|
font-weight: 600;
|
|
}
|