Color Palette
NVIDIA brand colors and grayscale system used throughout the navigation component.
Brand Colors
Brand Green
#76b900
--color-brand-green
Brand Green Hover
#8ed100
--color-brand-green-hover
Grayscale System
Black / Gray 1000
#000000
--color-black
Gray 900
#1a1a1a
--color-gray-900
Gray 800
#333333
--color-gray-800
Gray 600
#666666
--color-gray-600
Gray 400
#999999
--color-gray-400
Gray 100
#e0e0e0
--color-gray-100
White
#ffffff
--color-white
CSS Variables
:root {
/* Colors - NVIDIA Brand */
--color-black: #000000;
--color-gray-1000: #000000;
--color-gray-900: #1a1a1a;
--color-gray-800: #333333;
--color-gray-600: #666666;
--color-gray-400: #999999;
--color-gray-100: #e0e0e0;
--color-white: #ffffff;
--color-brand-green: #76b900;
--color-brand-green-hover: #8ed100;
}
Typography
Font family, sizes, and text styling specifications.
Font Family
NVIDIA GTC 2026
NVIDIA Sans (Primary)
Font Stack
--font-family: 'NVIDIA Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
Font Sizes
Navigation Small Text
Navigation Base Text
Navigation Large Text
Font Size Variables
:root {
--font-size-small: 14px;
--font-size-base: 16px;
--font-size-large: 18px;
}
Text Styles
| Element | Size | Weight | Line Height | Transform |
|---|---|---|---|---|
| Nav Link | 16px | 400 | 30px | capitalize |
| Dropdown Link | 14px | 400 | normal | none |
| CTA Button | 16px | 700 | 1.25 | none |
| Event Details | 16px | 400/700 | 1 | none |
| Mobile Nav Link | 18px | 400 | normal | none |
Spacing
Consistent spacing values for padding, margins, and gaps.
Core Dimensions
Logo Dimensions
Logo Container
190px
104px
Logo Variables
:root {
--logo-width: 190px;
--logo-height: 104px;
}
.logo-img {
max-height: 42px;
max-width: 141px;
}
Gap & Padding Values
| Element | Property | Value |
|---|---|---|
| Nav Links | gap | 20px |
| Nav Link (icon gap) | gap | 6px |
| Nav Main Content | gap | 30px |
| Info Links | gap | 15px |
| CTA Button | padding | 12px 14px |
| Dropdown Menu | padding | 8px 0 |
| Dropdown Link | padding | 10px 16px |
Spacing Variables
:root {
/* Spacing */
--side-padding: 15px;
--nav-info-height: 44px;
--nav-main-height: 60px;
--nav-total-height: 104px;
--logo-width: 190px;
--logo-height: 104px;
}
Responsive Breakpoints
Viewport-specific max-widths and behavior changes.
Breakpoint Diagram
Max-Width Values
| Breakpoint | Media Query | Content Max-Width | Key Changes |
|---|---|---|---|
| Desktop | default |
1290px | Full navigation, all links visible |
| Laptop | max-width: 1350px |
1290px | Same as desktop |
| Tablet | max-width: 1024px |
954px | Mobile menu, hamburger visible, logo collapsed |
| Phone | max-width: 640px |
610px | Smaller CTA, reduced info bar height |
Responsive Dimension Changes
| Variable | Desktop | Tablet (≤1024px) | Phone (≤640px) |
|---|---|---|---|
--nav-info-height |
44px | 44px | 36px |
--nav-main-height |
60px | 60px | 60px |
--logo-height |
104px | 60px | 60px |
| Logo max-height | 42px | 30px | 26px |
| Event details font | 16px | 14px | 12px |
Breakpoint Variables
:root {
/* Breakpoint max-widths */
--max-width-desktop: 1290px;
--max-width-laptop: 1290px;
--max-width-tablet: 954px;
--max-width-phone: 610px;
}
/* Tablet */
@media (max-width: 1024px) {
:root {
--nav-info-height: 44px;
--nav-main-height: 60px;
--logo-height: 60px;
}
}
/* Phone */
@media (max-width: 640px) {
:root {
--nav-info-height: 36px;
--nav-main-height: 60px;
--logo-height: 60px;
}
}
Components
Live examples of navigation component elements with their code.
Navigation Links
HTML
<ul class="nav-links" role="menubar">
<li class="nav-item" role="none">
<a href="#keynote" class="nav-link" role="menuitem">Keynote</a>
</li>
<li class="nav-item has-dropdown" role="none">
<button class="nav-link dropdown-toggle"
aria-expanded="false"
aria-haspopup="true"
role="menuitem">
Agenda
<span class="dropdown-icon"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li role="none">
<a href="#sessions" class="dropdown-link" role="menuitem">Sessions</a>
</li>
</ul>
</li>
</ul>
CSS
.nav-links {
display: flex;
align-items: center;
gap: 20px;
list-style: none;
flex: 1;
}
.nav-link {
display: flex;
align-items: center;
gap: 6px;
color: var(--color-gray-600);
text-decoration: none;
font-size: var(--font-size-base);
line-height: 30px;
text-transform: capitalize;
background: none;
border: none;
cursor: pointer;
padding: 0;
white-space: nowrap;
transition: color var(--transition-fast);
}
.nav-link:hover,
.nav-link:focus {
color: var(--color-gray-100);
}
CTA Button
HTML
<a href="#register" class="cta-button">
<span class="cta-text">Register Now</span>
<span class="cta-divider">|</span>
<span class="cta-text">Log In</span>
</a>
CSS
.cta-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 5px;
background-color: var(--color-brand-green);
color: var(--color-black);
text-decoration: none;
font-size: var(--font-size-base);
font-weight: 700;
padding: 12px 14px;
line-height: 1.25;
white-space: nowrap;
transition: background-color var(--transition-fast);
}
.cta-button:hover,
.cta-button:focus {
background-color: var(--color-brand-green-hover);
}
.cta-divider {
font-weight: 400;
opacity: 0.7;
}
Dropdown Menu
CSS
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
min-width: 180px;
background-color: var(--color-gray-900);
border: 1px solid var(--color-gray-800);
list-style: none;
padding: 8px 0;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: opacity var(--transition-fast),
transform var(--transition-fast),
visibility var(--transition-fast);
z-index: var(--z-dropdown);
}
.nav-item.has-dropdown:hover .dropdown-menu,
.dropdown-toggle[aria-expanded="true"] + .dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-link {
display: block;
padding: 10px 16px;
color: var(--color-gray-400);
text-decoration: none;
font-size: var(--font-size-small);
transition: background-color var(--transition-fast),
color var(--transition-fast);
}
.dropdown-link:hover,
.dropdown-link:focus {
background-color: var(--color-gray-800);
color: var(--color-gray-100);
}
Info Bar
AI Conference March 16–19 | San Jose, CA
HTML
<div class="nav-info-bar">
<div class="nav-info-content">
<span class="event-details">
<strong>AI Conference & Expo</strong>
<span class="date">March 16–19</span>
<span class="divider">|</span>
<strong>San Jose, CA</strong>
</span>
</div>
</div>
Interactive States
Visual feedback for different interaction states.
Navigation Collapsed State
When scrolled past 50px, the navigation collapses: info bar hides, logo shrinks, and total height reduces.
Default
Collapsed
CSS
/* Collapsed State (Scroll Behavior) */
.navigation.collapsed .nav-divider {
opacity: 0;
top: 0;
}
.navigation.collapsed .nav-info-bar {
height: 0;
opacity: 0;
padding-top: 0;
padding-bottom: 0;
}
.navigation.collapsed .nav-logo {
height: var(--nav-main-height); /* 60px */
width: 101px;
margin-left: 0;
}
.navigation.collapsed .logo-img {
max-height: 30px;
}
.navigation.collapsed .nav-main {
padding-left: 24px;
}
Link States
Dropdown Icon Rotation
Closed
rotate(0)
Open
rotate(180deg)
Transitions
| Variable | Value | Usage |
|---|---|---|
--transition-fast |
0.2s ease | Hover states, icon rotations |
--transition-normal |
0.3s ease | Navigation collapse, mobile menu |
--transition-slow |
0.4s ease | Page transitions (reserved) |
CSS Variables
:root {
--transition-fast: 0.2s ease;
--transition-normal: 0.3s ease;
--transition-slow: 0.4s ease;
}
JavaScript API
Configuration, state management, and event handling.
Configuration
| Property | Value | Description |
|---|---|---|
scrollThreshold |
50 | Pixels scrolled before nav collapses |
debounceDelay |
10 | Milliseconds for scroll debounce |
animationDuration |
300 | Matches CSS transition duration (ms) |
Configuration Object
const CONFIG = {
scrollThreshold: 50, // Pixels to scroll before collapsing
debounceDelay: 10, // Debounce delay for scroll events (ms)
animationDuration: 300, // Match CSS transition duration (ms)
};
State Object
State Management
let state = {
isCollapsed: false, // Navigation collapsed state
isMobileMenuOpen: false, // Mobile menu visibility
lastScrollY: 0, // Previous scroll position
};
Z-Index Layers
1002
Mobile Menu
--z-mobile-menu
1001
Dropdown
--z-dropdown
1000
Navigation
--z-nav
Z-Index Variables
:root {
--z-nav: 1000;
--z-dropdown: 1001;
--z-mobile-menu: 1002;
}
Key Functions
| Function | Description |
|---|---|
handleScroll() |
Toggles collapsed state based on scroll position |
toggleMobileMenu() |
Opens/closes mobile menu overlay |
toggleDesktopDropdown(toggle) |
Toggles dropdown menu for desktop nav |
toggleMobileDropdown(toggle) |
Toggles accordion dropdown in mobile menu |
closeMobileMenu() |
Closes mobile menu and resets state |
trapFocus(event) |
Keeps focus within mobile menu when open |
Event Listeners
Event Setup
function setupEventListeners() {
// Scroll events (debounced)
window.addEventListener('scroll', debounce(handleScroll, CONFIG.debounceDelay), { passive: true });
// Hamburger button click
elements.hamburgerBtn.addEventListener('click', toggleMobileMenu);
// Desktop dropdown toggles
elements.dropdownToggles.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.stopPropagation();
toggleDesktopDropdown(toggle);
});
});
// Mobile dropdown toggles
elements.mobileDropdownToggles.forEach(toggle => {
toggle.addEventListener('click', () => {
toggleMobileDropdown(toggle);
});
});
// Close mobile menu when clicking a link
elements.mobileMenu.querySelectorAll('a').forEach(link => {
link.addEventListener('click', closeMobileMenu);
});
// Keyboard events (Escape to close)
document.addEventListener('keydown', handleKeydown);
// Click outside to close
document.addEventListener('click', handleClickOutside);
// Window resize (debounced)
window.addEventListener('resize', debounce(handleResize, 100));
}
Accessibility Features
- Skip Link - Hidden link to skip navigation for keyboard users
- ARIA Roles - menubar, menu, menuitem for proper screen reader support
- aria-expanded - Tracks dropdown and mobile menu state
- aria-hidden - Hides mobile menu from screen readers when closed
- Focus Trap - Tab key cycles within mobile menu when open
- Escape Key - Closes mobile menu and dropdowns
- Focus Management - Returns focus to hamburger when menu closes
ARIA Attributes Example
<!-- Skip Link -->
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Navigation with ARIA -->
<nav class="navigation" role="navigation" aria-label="Main navigation">
<ul class="nav-links" role="menubar">
<li class="nav-item has-dropdown" role="none">
<button class="nav-link dropdown-toggle"
aria-expanded="false"
aria-haspopup="true"
role="menuitem">
Agenda
</button>
<ul class="dropdown-menu" role="menu" aria-label="Agenda submenu">
<li role="none">
<a href="#sessions" class="dropdown-link" role="menuitem">Sessions</a>
</li>
</ul>
</li>
</ul>
</nav>
<!-- Mobile Menu with ARIA -->
<button class="hamburger-btn"
aria-expanded="false"
aria-controls="mobile-menu"
aria-label="Toggle navigation menu">
...
</button>
<div class="mobile-menu-overlay" id="mobile-menu" aria-hidden="true">
...
</div>