Skip to content

Commit ff51fc9

Browse files
rubenmarcusclaude
andauthored
fix(docs): resolve mobile hamburger menu and docs sidebar navigation (#164)
The backdrop-filter on .navbar created a containing block that trapped position:fixed children (sidebar/backdrop) inside the nav's 60px-tall box. Additionally, overflow-y on the items container clipped the secondary docs panel used by Docusaurus' sliding mechanism. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent df700ba commit ff51fc9

3 files changed

Lines changed: 140 additions & 8 deletions

File tree

docs/docusaurus.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ const config: Config = {
275275
{ name: 'twitter:site', content: '@ralphstarter' },
276276
],
277277
navbar: {
278-
title: '',
278+
title: 'ralph starter',
279279
logo: {
280280
alt: 'ralph-starter',
281281
src: 'img/favicon-96x96.png',

docs/src/components/HeroSection/styles.module.css

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,16 @@
472472
justify-content: center;
473473
}
474474

475+
.ralphContainer {
476+
justify-content: flex-end;
477+
align-items: flex-start;
478+
}
479+
475480
.ralphContainer .ralphImage {
476-
width: 480px;
481+
width: 380px;
482+
margin-top: 4rem;
483+
margin-right: -3rem;
484+
opacity: 0.7;
477485
}
478486

479487
.terminal {
@@ -507,7 +515,10 @@
507515
}
508516

509517
.ralphContainer .ralphImage {
510-
width: 320px;
518+
width: 260px;
519+
margin-top: 3rem;
520+
margin-right: -4rem;
521+
opacity: 0.55;
511522
}
512523

513524
.integrationLogos {

docs/src/css/custom.css

Lines changed: 126 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ body::before {
140140
width: 100%;
141141
height: 100%;
142142
pointer-events: none;
143-
z-index: 9999;
143+
z-index: 50;
144144
opacity: 0.02;
145145
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
146146
}
@@ -202,9 +202,11 @@ body::before {
202202
opacity: 0.8;
203203
}
204204

205-
/* Homepage: hide navbar */
206-
.homepage .navbar {
207-
display: none !important;
205+
/* Homepage: hide navbar on desktop only */
206+
@media screen and (min-width: 997px) {
207+
.homepage .navbar {
208+
display: none !important;
209+
}
208210
}
209211

210212
/* Navbar alignment - Vercel style */
@@ -236,7 +238,23 @@ body::before {
236238
display: block;
237239
}
238240

239-
/* Navbar brand title */
241+
/* Navbar brand title - native title styling (visible on mobile only) */
242+
.navbar__title {
243+
font-family: var(--font-display);
244+
font-weight: 500;
245+
font-size: 1rem;
246+
color: var(--quantum-white);
247+
letter-spacing: -0.01em;
248+
}
249+
250+
/* On desktop, hide native title since HTML brand-stack handles it */
251+
@media screen and (min-width: 997px) {
252+
.navbar__title {
253+
display: none;
254+
}
255+
}
256+
257+
/* Navbar brand title - HTML item (desktop only, hidden on mobile to avoid duplicate) */
240258
.navbar__brand-stack {
241259
display: inline-flex;
242260
align-items: center;
@@ -258,6 +276,13 @@ body::before {
258276
line-height: 25px;
259277
}
260278

279+
/* On mobile, hide the duplicate HTML brand item; native title is enough */
280+
@media screen and (max-width: 996px) {
281+
.navbar__brand-stack {
282+
display: none;
283+
}
284+
}
285+
261286
/* Ensure HTML navbar items align properly */
262287
.navbar__item.navbar__item--html {
263288
display: flex;
@@ -1057,6 +1082,102 @@ code {
10571082
}
10581083
}
10591084

1085+
/* ============================================
1086+
MOBILE NAVBAR SIDEBAR (hamburger menu)
1087+
============================================ */
1088+
1089+
/* The <nav> element gets .navbar-sidebar--show when the hamburger is toggled.
1090+
Problem: backdrop-filter on .navbar creates a containing block that traps
1091+
position:fixed children (.navbar-sidebar, .navbar-sidebar__backdrop) inside
1092+
the nav's 3.75rem-tall box instead of the viewport.
1093+
Fix: expand the nav to cover the full viewport when the sidebar is open,
1094+
and override the constrained height so children can render full-screen. */
1095+
.navbar-sidebar--show {
1096+
position: fixed !important;
1097+
top: 0 !important;
1098+
left: 0 !important;
1099+
right: 0 !important;
1100+
bottom: 0 !important;
1101+
height: 100% !important;
1102+
z-index: 200 !important;
1103+
overflow: visible !important;
1104+
}
1105+
1106+
.navbar-sidebar {
1107+
background: var(--quantum-void) !important;
1108+
border-right: 1px solid var(--quantum-tungsten);
1109+
z-index: 200 !important;
1110+
}
1111+
1112+
.navbar-sidebar__brand {
1113+
background: var(--quantum-void) !important;
1114+
border-bottom: 1px solid var(--quantum-tungsten);
1115+
padding: 0.75rem 1rem;
1116+
}
1117+
1118+
.navbar-sidebar__items {
1119+
background: var(--quantum-void) !important;
1120+
/* Do NOT set overflow-y here — it implicitly sets overflow-x: auto,
1121+
which clips the second panel used by Docusaurus' sliding mechanism
1122+
for the docs sidebar secondary menu. */
1123+
}
1124+
1125+
.navbar-sidebar__item {
1126+
overflow-y: auto;
1127+
}
1128+
1129+
.navbar-sidebar__item.menu {
1130+
padding: 0.5rem;
1131+
}
1132+
1133+
.navbar-sidebar .menu__list {
1134+
padding-left: 0;
1135+
}
1136+
1137+
.navbar-sidebar .menu__link {
1138+
font-family: var(--font-body);
1139+
font-weight: 500;
1140+
color: var(--quantum-silver) !important;
1141+
padding: 0.75rem 1rem;
1142+
font-size: 0.95rem;
1143+
display: flex;
1144+
}
1145+
1146+
.navbar-sidebar .menu__link:hover {
1147+
color: var(--quantum-white) !important;
1148+
background: rgba(152, 152, 159, 0.08);
1149+
}
1150+
1151+
.navbar-sidebar .menu__link--active {
1152+
color: var(--quantum-white) !important;
1153+
font-weight: 600;
1154+
}
1155+
1156+
/* Hide badge HTML items in mobile sidebar (they overflow) */
1157+
.navbar-sidebar .navbar__badge-link {
1158+
display: none;
1159+
}
1160+
1161+
/* Backdrop overlay when sidebar is open */
1162+
.navbar-sidebar__backdrop {
1163+
background: rgba(0, 0, 0, 0.6) !important;
1164+
z-index: 199 !important;
1165+
}
1166+
1167+
/* ============================================
1168+
MOBILE DOCS SIDEBAR
1169+
============================================ */
1170+
@media screen and (max-width: 996px) {
1171+
/* Remove border-radius and border on mobile so sidebar toggle works */
1172+
div[class*="docsWrapper"] {
1173+
border-radius: 0;
1174+
border-left: none;
1175+
border-right: none;
1176+
margin: 0 auto;
1177+
width: 100%;
1178+
}
1179+
}
1180+
10601181
/* ============================================
10611182
RESPONSIVE
10621183
============================================ */

0 commit comments

Comments
 (0)