Skip to content

Commit 0401cc5

Browse files
authored
Add underline to SubNav active link (#865)
* add underline styles to active page links * add changeset * update changeset * resolve PR feedback * add vertical padding back to SubNav * update snapshots * reword changeset * reword changeset
1 parent 00ef069 commit 0401cc5

5 files changed

+47
-11
lines changed

.changeset/loud-swans-repeat.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@primer/react-brand': patch
3+
---
4+
5+
Style improvements to the `SubNav` component.
6+
7+
- Fixed a bug in `SubNav.Link` elements with `aria-current`, which caused inconsistent appearance across viewports.

packages/react/src/SubNav/SubNav.module.css

+39-6
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@
151151
.SubNav__link:focus-visible .SubNav__link-label::after,
152152
.SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after {
153153
opacity: 1;
154-
transform: translate3d(0, 0.2em, 0);
155154
transform: scale(0.8, 1);
156155
}
157156

@@ -427,8 +426,17 @@
427426
position: relative;
428427
}
429428

430-
.SubNav .SubNav__link--has-sub-menu:hover .SubNav__sub-menu-children .SubNav__link-label::after {
431-
display: none;
429+
.SubNav .SubNav__link-label::after {
430+
opacity: 0;
431+
transform: scale(0);
432+
bottom: 0;
433+
}
434+
435+
.SubNav__link:hover .SubNav__link-label::after,
436+
.SubNav__link:focus-visible .SubNav__link-label::after,
437+
.SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after {
438+
opacity: 1;
439+
transform: scale(1);
432440
}
433441
}
434442

@@ -522,16 +530,20 @@
522530
text-decoration: none !important; /* dotcom override */
523531
transition: color 0.2s var(--brand-animation-easing-glide);
524532
position: relative;
525-
padding: 4px 0;
533+
padding: var(--base-size-4) 0;
526534
}
527535

528536
.SubNav__link-label {
529537
font-size: var(--brand-text-size-100);
530538
line-height: var(--brand-text-lineHeight-100);
531539
}
532540

541+
.SubNav__link--has-sub-menu {
542+
padding: var(--base-size-4) 0;
543+
}
544+
533545
/* To fix hover distance between link and dropdown */
534-
.SubNav__link.SubNav__link--has-sub-menu::after {
546+
.SubNav__link--has-sub-menu::after {
535547
content: '';
536548
position: absolute;
537549
bottom: calc(var(--base-size-12) * -1);
@@ -596,16 +608,37 @@
596608
}
597609

598610
.SubNav__sub-menu--dropdown .SubNav__link-label::after {
599-
display: none;
611+
opacity: 1;
612+
transform: scale(0);
600613
}
601614

602615
.SubNav__link--has-sub-menu {
616+
position: relative;
603617
display: inline-flex;
604618
align-items: center;
605619
gap: var(--base-size-4);
606620
cursor: pointer;
607621
}
608622

623+
.SubNav__sub-menu--dropdown .SubNav__link-label {
624+
position: relative;
625+
padding: var(--base-size-4) 0;
626+
}
627+
628+
/* Show underline on submenu parent when child has aria-current */
629+
.SubNav__link--has-sub-menu:has(.SubNav__link[aria-current]:not([aria-current='false']))
630+
> .SubNav__link
631+
.SubNav__link-label::after {
632+
opacity: 1;
633+
transform: scale(0.8, 1);
634+
}
635+
636+
.SubNav__link--has-sub-menu .SubNav__link[aria-current]:not([aria-current='false']) .SubNav__link-label::after,
637+
.SubNav__link--has-sub-menu .SubNav__link:hover .SubNav__link-label::after {
638+
opacity: 1;
639+
transform: scale(1);
640+
}
641+
609642
.SubNav__sub-menu-icon {
610643
display: inline-block !important;
611644
fill: var(--brand-color-text-muted);

packages/react/src/SubNav/SubNav.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -370,11 +370,7 @@ const SubNavLinkWithSubmenu = forwardRef<HTMLDivElement, SubNavLinkProps>(
370370

371371
return (
372372
<div
373-
className={clsx(
374-
styles['SubNav__link'],
375-
styles['SubNav__link--has-sub-menu'],
376-
isExpanded && styles['SubNav__link--expanded'],
377-
)}
373+
className={clsx(styles['SubNav__link--has-sub-menu'], isExpanded && styles['SubNav__link--expanded'])}
378374
data-testid={testId || testIds.subMenu}
379375
ref={ref}
380376
onMouseOver={() => setIsExpanded(true)}

0 commit comments

Comments
 (0)