{"id":2785,"date":"2026-02-06T07:10:14","date_gmt":"2026-02-06T07:10:14","guid":{"rendered":"https:\/\/demo.materiamedica.net\/demo6\/?p=2785"},"modified":"2026-02-06T07:10:14","modified_gmt":"2026-02-06T07:10:14","slug":"chapter-11-top-navigation","status":"publish","type":"post","link":"https:\/\/demo.materiamedica.net\/demo6\/chapter-11-top-navigation\/","title":{"rendered":"Chapter 11: Top Navigation"},"content":{"rendered":"<p dir=\"auto\"><strong>How to create a good Top Navigation bar<\/strong> (also called <strong>navbar<\/strong>, <strong>header navigation<\/strong>, <strong>top bar<\/strong>, <strong>main menu<\/strong>).<\/p>\n<p dir=\"auto\">We\u2019ll go through different common styles and real-world patterns that are actually used in 2025\u20132026 websites and web applications.<\/p>\n<h3 dir=\"auto\">What makes a good top navigation bar?<\/h3>\n<p dir=\"auto\">Before we write any code, let\u2019s agree on the most important goals:<\/p>\n<ol dir=\"auto\">\n<li><strong>Clear hierarchy<\/strong> \u2014 logo \u2192 main links \u2192 secondary actions (search, login, cart, profile)<\/li>\n<li><strong>Easy to scan<\/strong> \u2014 users should understand where they are and where they can go in 1\u20132 seconds<\/li>\n<li><strong>Good spacing &amp; touch targets<\/strong> \u2014 especially on mobile<\/li>\n<li><strong>Responsive behavior<\/strong> \u2014 collapses gracefully on small screens<\/li>\n<li><strong>Visual feedback<\/strong> \u2014 hover, active page, mobile menu open\/close<\/li>\n<li><strong>Accessibility<\/strong> \u2014 keyboard navigation, screen reader support<\/li>\n<li><strong>Performance<\/strong> \u2014 doesn\u2019t slow down the page<\/li>\n<\/ol>\n<h3 dir=\"auto\">Most common patterns in 2025\u20132026<\/h3>\n<div>\n<div dir=\"auto\">\n<table dir=\"auto\">\n<thead>\n<tr>\n<th data-col-size=\"lg\">Pattern<\/th>\n<th data-col-size=\"lg\">Best for<\/th>\n<th data-col-size=\"lg\">Mobile behavior<\/th>\n<th data-col-size=\"md\">Examples you know<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-col-size=\"lg\">Classic centered logo + links<\/td>\n<td data-col-size=\"lg\">Corporate, blogs, marketing sites<\/td>\n<td data-col-size=\"lg\">Hamburger menu<\/td>\n<td data-col-size=\"md\">Most company websites<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"lg\">Logo left + links center + CTA right<\/td>\n<td data-col-size=\"lg\">SaaS products, tools, dashboards<\/td>\n<td data-col-size=\"lg\">Hamburger or bottom tab bar<\/td>\n<td data-col-size=\"md\">Notion, Linear, Figma, Stripe<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"lg\">Logo left + minimal links + right icons<\/td>\n<td data-col-size=\"lg\">E-commerce, apps<\/td>\n<td data-col-size=\"lg\">Hamburger + bottom bar sometimes<\/td>\n<td data-col-size=\"md\">Amazon, Flipkart, Medium<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"lg\">Full-width with mega menu<\/td>\n<td data-col-size=\"lg\">Large sites with many categories<\/td>\n<td data-col-size=\"lg\">Accordion or full-screen overlay<\/td>\n<td data-col-size=\"md\">Nike, Apple, Samsung<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"lg\">Sticky + shrinking on scroll<\/td>\n<td data-col-size=\"lg\">Long content pages<\/td>\n<td data-col-size=\"lg\">Stays visible<\/td>\n<td data-col-size=\"md\">Many modern marketing sites<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Let\u2019s build the <strong>most common and versatile version<\/strong> first \u2014 then we\u2019ll look at variations.<\/p>\n<h3 dir=\"auto\">Pattern 1 \u2013 Modern Classic Top Navigation (very widely used)<\/h3>\n<h4 dir=\"auto\">HTML Structure<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>HTML<\/div>\n<div>\n<pre tabindex=\"0\"><code>&lt;header class=\"site-header\"&gt;\r\n  &lt;nav class=\"navbar container\"&gt;\r\n    \r\n    &lt;!-- Logo \/ brand --&gt;\r\n    &lt;a href=\"\/\" class=\"logo\"&gt;\r\n      &lt;img src=\"\/logo.svg\" alt=\"Company Name\" width=\"140\" height=\"36\"&gt;\r\n      &lt;!-- or just text: &lt;strong&gt;Company&lt;\/strong&gt; --&gt;\r\n    &lt;\/a&gt;\r\n\r\n    &lt;!-- Main navigation links (desktop) --&gt;\r\n    &lt;ul class=\"nav-links\"&gt;\r\n      &lt;li&gt;&lt;a href=\"\/features\" class=\"active\"&gt;Features&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/pricing\"&gt;Pricing&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/customers\"&gt;Customers&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/resources\"&gt;Resources&lt;\/a&gt;&lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n\r\n    &lt;!-- Right side actions --&gt;\r\n    &lt;div class=\"nav-actions\"&gt;\r\n      &lt;button class=\"search-btn\" aria-label=\"Search\"&gt;\r\n        &lt;svg width=\"20\" height=\"20\"&gt;\u2026&lt;\/svg&gt;\r\n      &lt;\/button&gt;\r\n      \r\n      &lt;a href=\"\/login\" class=\"btn-login\"&gt;Log in&lt;\/a&gt;\r\n      &lt;a href=\"\/signup\" class=\"btn-primary\"&gt;Get Started&lt;\/a&gt;\r\n    &lt;\/div&gt;\r\n\r\n    &lt;!-- Mobile menu button --&gt;\r\n    &lt;button class=\"menu-toggle\" aria-label=\"Toggle menu\" aria-expanded=\"false\"&gt;\r\n      &lt;span class=\"bar\"&gt;&lt;\/span&gt;\r\n      &lt;span class=\"bar\"&gt;&lt;\/span&gt;\r\n      &lt;span class=\"bar\"&gt;&lt;\/span&gt;\r\n    &lt;\/button&gt;\r\n\r\n  &lt;\/nav&gt;\r\n\r\n  &lt;!-- Mobile menu (hidden by default) --&gt;\r\n  &lt;div class=\"mobile-menu\" hidden&gt;\r\n    &lt;ul&gt;\r\n      &lt;li&gt;&lt;a href=\"\/features\"&gt;Features&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/pricing\"&gt;Pricing&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/customers\"&gt;Customers&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/resources\"&gt;Resources&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li class=\"divider\"&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/login\"&gt;Log in&lt;\/a&gt;&lt;\/li&gt;\r\n      &lt;li&gt;&lt;a href=\"\/signup\" class=\"btn-primary\"&gt;Get Started&lt;\/a&gt;&lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n  &lt;\/div&gt;\r\n&lt;\/header&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">CSS \u2013 Desktop + Mobile<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>CSS<\/div>\n<div>\n<pre tabindex=\"0\"><code>.site-header {\r\n  position: sticky;\r\n  top: 0;\r\n  z-index: 1000;\r\n  background: white;\r\n  border-bottom: 1px solid #e5e7eb;\r\n  box-shadow: 0 1px 3px rgba(0,0,0,0.04);\r\n}\r\n\r\n.navbar {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 1rem 1.5rem;\r\n  max-width: 1400px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.logo {\r\n  font-size: 1.5rem;\r\n  font-weight: 700;\r\n  color: #111;\r\n  text-decoration: none;\r\n}\r\n\r\n.nav-links {\r\n  display: flex;\r\n  gap: 2.5rem;\r\n  list-style: none;\r\n  margin: 0;\r\n  padding: 0;\r\n}\r\n\r\n.nav-links a {\r\n  color: #374151;\r\n  text-decoration: none;\r\n  font-weight: 500;\r\n  padding: 0.5rem 0;\r\n  transition: color 0.15s;\r\n}\r\n\r\n.nav-links a:hover,\r\n.nav-links a.active {\r\n  color: #2563eb;\r\n}\r\n\r\n.nav-actions {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 1.25rem;\r\n}\r\n\r\n.btn-login {\r\n  color: #374151;\r\n  font-weight: 500;\r\n  text-decoration: none;\r\n}\r\n\r\n.btn-primary {\r\n  background: #2563eb;\r\n  color: white;\r\n  padding: 0.65rem 1.4rem;\r\n  border-radius: 6px;\r\n  text-decoration: none;\r\n  font-weight: 500;\r\n}\r\n\r\n\/* Mobile menu button *\/\r\n.menu-toggle {\r\n  display: none;\r\n  background: none;\r\n  border: none;\r\n  cursor: pointer;\r\n  padding: 0.5rem;\r\n}\r\n\r\n.bar {\r\n  display: block;\r\n  width: 26px;\r\n  height: 3px;\r\n  background: #111;\r\n  margin: 5px auto;\r\n  transition: all 0.3s;\r\n}\r\n\r\n\/* Mobile styles *\/\r\n@media (max-width: 1024px) {\r\n  .nav-links,\r\n  .nav-actions &gt; *:not(.menu-toggle) {\r\n    display: none;\r\n  }\r\n\r\n  .menu-toggle {\r\n    display: block;\r\n  }\r\n\r\n  .mobile-menu {\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 0;\r\n    right: 0;\r\n    background: white;\r\n    border-top: 1px solid #e5e7eb;\r\n    padding: 1.5rem;\r\n    box-shadow: 0 10px 20px rgba(0,0,0,0.1);\r\n  }\r\n\r\n  .mobile-menu ul {\r\n    list-style: none;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .mobile-menu a {\r\n    display: block;\r\n    padding: 1rem 0;\r\n    font-size: 1.1rem;\r\n    color: #111;\r\n    text-decoration: none;\r\n  }\r\n\r\n  .mobile-menu .btn-primary {\r\n    display: block;\r\n    text-align: center;\r\n    margin-top: 1rem;\r\n  }\r\n}\r\n\r\n\/* When mobile menu is open *\/\r\n.mobile-menu[aria-hidden=\"false\"] {\r\n  display: block;\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h4 dir=\"auto\">JavaScript \u2013 Mobile menu toggle<\/h4>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>JavaScript<\/div>\n<div>\n<pre tabindex=\"0\"><code>document.addEventListener('DOMContentLoaded', () =&gt; {\r\n  const toggle = document.querySelector('.menu-toggle');\r\n  const menu = document.querySelector('.mobile-menu');\r\n\r\n  toggle.addEventListener('click', () =&gt; {\r\n    const isExpanded = toggle.getAttribute('aria-expanded') === 'true';\r\n    \r\n    toggle.setAttribute('aria-expanded', !isExpanded);\r\n    menu.hidden = isExpanded;\r\n    \r\n    \/\/ Optional: animate hamburger to X\r\n    toggle.classList.toggle('active');\r\n  });\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Add this CSS for nice X animation:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>CSS<\/div>\n<div>\n<pre tabindex=\"0\"><code>.menu-toggle.active .bar:nth-child(1) {\r\n  transform: translateY(8px) rotate(45deg);\r\n}\r\n.menu-toggle.active .bar:nth-child(2) {\r\n  opacity: 0;\r\n}\r\n.menu-toggle.active .bar:nth-child(3) {\r\n  transform: translateY(-8px) rotate(-45deg);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 dir=\"auto\">Quick variations you should know<\/h3>\n<p dir=\"auto\"><strong>1. Shrinking header on scroll<\/strong> (very modern look)<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>CSS<\/div>\n<div>\n<pre tabindex=\"0\"><code>.site-header.scrolled {\r\n  padding: 0.6rem 1.5rem;\r\n  box-shadow: 0 4px 12px rgba(0,0,0,0.08);\r\n}\r\n\r\n.site-header.scrolled .logo img {\r\n  width: 110px;\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">JavaScript:<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<pre tabindex=\"0\"><code>window.addEventListener('scroll', () =&gt; {\r\n  document.querySelector('.site-header').classList.toggle('scrolled', window.scrollY &gt; 50);\r\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>2. With search in center<\/strong> (common in SaaS)<\/p>\n<div dir=\"auto\">\n<div data-testid=\"code-block\">\n<div>\n<div>HTML<\/div>\n<div>\n<pre tabindex=\"0\"><code>&lt;div class=\"nav-center\"&gt;\r\n  &lt;input type=\"search\" placeholder=\"Search docs, components...\" class=\"search-input\"&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\"><strong>3. Mega menu on hover<\/strong> (for categories)<\/p>\n<p dir=\"auto\">We usually show a big dropdown panel when hovering \u201cProducts\u201d or \u201cSolutions\u201d.<\/p>\n<h3 dir=\"auto\">Summary \u2013 What to decide when building a top nav<\/h3>\n<div>\n<div dir=\"auto\">\n<table dir=\"auto\">\n<thead>\n<tr>\n<th data-col-size=\"md\">Question<\/th>\n<th data-col-size=\"lg\">Common choice 2025\u20132026<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-col-size=\"md\">Logo left or center?<\/td>\n<td data-col-size=\"lg\">Left (almost always)<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">How many main links?<\/td>\n<td data-col-size=\"lg\">3\u20136 (more \u2192 dropdown)<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">Sticky or not?<\/td>\n<td data-col-size=\"lg\">Sticky in most cases<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">Hamburger on mobile?<\/td>\n<td data-col-size=\"lg\">Yes (from ~1024px)<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">CTA button?<\/td>\n<td data-col-size=\"lg\">Yes \u2014 bright color<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">Search?<\/td>\n<td data-col-size=\"lg\">Icon or full field<\/td>\n<\/tr>\n<tr>\n<td data-col-size=\"md\">Icons on right?<\/td>\n<td data-col-size=\"lg\">Cart, profile, notifications, search<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<\/div>\n<\/div>\n<p dir=\"auto\">Would you like to go much deeper into any of these variations?<\/p>\n<p dir=\"auto\">Examples:<\/p>\n<ul dir=\"auto\">\n<li>Mega menu (dropdown with columns and images)<\/li>\n<li>Centered logo style<\/li>\n<li>Transparent header over hero section<\/li>\n<li>Bottom navigation bar for mobile-first apps<\/li>\n<li>Dashboard-style sidebar + top bar combo<\/li>\n<li>Animated underline on active link<\/li>\n<li>Dark mode navbar<\/li>\n<\/ul>\n<p dir=\"auto\">Just tell me which direction you want \u2014 I\u2019ll explain it with complete code, slowly and clearly. \ud83d\ude0a<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to create a good Top Navigation bar (also called navbar, header navigation, top bar, main menu). We\u2019ll go through different common styles and real-world patterns that are actually used in 2025\u20132026 websites and&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[],"class_list":["post-2785","post","type-post","status-publish","format-standard","hentry","category-how-to"],"_links":{"self":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/comments?post=2785"}],"version-history":[{"count":1,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2785\/revisions"}],"predecessor-version":[{"id":2786,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/posts\/2785\/revisions\/2786"}],"wp:attachment":[{"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/media?parent=2785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/categories?post=2785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.materiamedica.net\/demo6\/wp-json\/wp\/v2\/tags?post=2785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}