Navbar حرفهای و ساخت Header در Bootstrap
بهنام نوبخت · ۱۴۰۵/۷/۱۲
Header یکی از مهمترین بخشهای هر وبسایت است، زیرا معمولاً اولین قسمت صفحهای است که کاربر با آن مواجه میشود و وظیفه آن میتواند شامل نمایش لوگو، منوی اصلی، جستجو، ورود و ثبتنام، اعلانها، سبد خرید و سایر امکانات مهم سایت باشد. Bootstrap با ارائه کامپوننت Navbar و مجموعه بزرگی از Utilityها این امکان را فراهم میکند که بدون نوشتن مقدار زیادی CSS، Headerهایی حرفهای و Responsive طراحی کنیم. در مقالات قبلی با Navbar، Dropdown، Collapse و Responsive Design آشنا شدیم؛ در این مقاله این مفاهیم را در کنار یکدیگر قرار میدهیم و یک Header واقعی میسازیم. ابتدا ساختار استاندارد Navbar را بررسی میکنیم، سپس Logo، منوی اصلی، Dropdown، Search، دکمههای ورود و ثبتنام، منوی موبایل، حالت Sticky، Headerهای چندبخشی و طراحی RTL را یاد میگیریم. در پایان نیز چند نمونه عملی از Header برای سایت شرکتی، فروشگاهی و پنل مدیریتی ایجاد خواهیم کرد تا بتوانیم از این ساختارها در پروژههای واقعی استفاده کنیم.
Header چیست؟
Header معمولاً بخش بالایی یک صفحه وب است.
یک Header میتواند شامل بخشهای مختلفی باشد:
Header
├── Logo
├── Main Navigation
├── Search
├── Notifications
├── User Menu
└── Actionsدر یک سایت ساده ممکن است Header فقط شامل Logo و منوی اصلی باشد.
اما در یک فروشگاه اینترنتی ممکن است موارد زیر را نیز داشته باشد:
جستجو
حساب کاربری
سبد خرید
علاقهمندیها
دستهبندی محصولات
Navbar در Bootstrap
Bootstrap کامپوننت Navbar را با کلاس اصلی زیر ارائه میکند:
<nav class="navbar">معمولاً Navbar همراه با کلاسهای دیگری مانند:
navbar-expand-lg
navbar-light
navbar-dark
bg-light
bg-darkاستفاده میشود.
سادهترین Navbar
یک Navbar ساده:
<nav class="navbar navbar-expand-lg bg-light">
<div class="container">
<a class="navbar-brand" href="#">
سایت من
</a>
<div class="navbar-nav">
<a class="nav-link active" href="#">
خانه
</a>
<a class="nav-link" href="#">
محصولات
</a>
<a class="nav-link" href="#">
درباره ما
</a>
</div>
</div>
</nav>Navbar Brand
برای نمایش Logo یا نام برند از navbar-brand استفاده میکنیم.
مثلاً:
<a class="navbar-brand" href="#">
BenoService
</a>یا میتوانیم تصویر Logo قرار دهیم:
<a class="navbar-brand" href="#">
<img
src="logo.png"
alt="لوگوی سایت"
width="40"
height="40">
</a>همچنین ترکیب تصویر و متن امکانپذیر است:
<a
class="navbar-brand d-flex align-items-center gap-2"
href="#">
<img
src="logo.png"
alt="لوگو"
width="40"
height="40">
<span>
سایت من
</span>
</a>منوی اصلی
برای منوی اصلی معمولاً از navbar-nav استفاده میکنیم:
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" href="#">
خانه
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
خدمات
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
درباره ما
</a>
</li>
</ul>Active Link
برای مشخص کردن صفحه فعلی:
<a
class="nav-link active"
aria-current="page"
href="#">
خانه
</a>ویژگی:
aria-current="page"به فناوریهای کمکی اطلاع میدهد که این لینک مربوط به صفحه فعلی است.
Responsive Navbar
یکی از مهمترین ویژگیهای Navbar در Bootstrap Responsive بودن آن است.
مثلاً:
<nav class="navbar navbar-expand-lg">عبارت:
navbar-expand-lgیعنی Navbar از اندازه lg به بالا به شکل کامل نمایش داده شود و در اندازههای کوچکتر به حالت جمعشده درآید.
دکمه منوی موبایل
برای باز و بسته کردن منوی موبایل از Navbar Toggler استفاده میکنیم:
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#mainNavbar"
aria-controls="mainNavbar"
aria-expanded="false"
aria-label="باز کردن منو">
<span class="navbar-toggler-icon"></span>
</button>سپس منوی اصلی:
<div
class="collapse navbar-collapse"
id="mainNavbar">
...
</div>یک Navbar Responsive کامل
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container">
<a
class="navbar-brand"
href="#">
سایت من
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#mainNavbar"
aria-controls="mainNavbar"
aria-expanded="false"
aria-label="باز کردن منو">
<span class="navbar-toggler-icon"></span>
</button>
<div
class="collapse navbar-collapse"
id="mainNavbar">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a
class="nav-link active"
aria-current="page"
href="#">
خانه
</a>
</li>
<li class="nav-item">
<a
class="nav-link"
href="#">
محصولات
</a>
</li>
<li class="nav-item">
<a
class="nav-link"
href="#">
خدمات
</a>
</li>
<li class="nav-item">
<a
class="nav-link"
href="#">
تماس با ما
</a>
</li>
</ul>
</div>
</div>
</nav>Dropdown در Navbar
میتوان Dropdown را در Navbar قرار داد.
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown">
محصولات
</a>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item" href="#">
محصول اول
</a>
</li>
<li>
<a class="dropdown-item" href="#">
محصول دوم
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a class="dropdown-item" href="#">
مشاهده همه
</a>
</li>
</ul>
</li>این ساختار برای فروشگاهها و سایتهای خدماتی بسیار کاربردی است.
Search در Header
یکی از عناصر رایج Header، جستجو است.
<form class="d-flex" role="search">
<input
class="form-control me-2"
type="search"
placeholder="جستجو..."
aria-label="جستجو">
<button
class="btn btn-outline-primary"
type="submit">
جستجو
</button>
</form>در طراحی RTL بهتر است از Utilityهای منطقی استفاده کنیم و به جای وابستگی مستقیم به left و right از start و end استفاده کنیم.
Header با Search و منوی اصلی
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container">
<a class="navbar-brand" href="#">
فروشگاه
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#shopNavbar"
aria-controls="shopNavbar"
aria-expanded="false"
aria-label="باز کردن منو">
<span class="navbar-toggler-icon"></span>
</button>
<div
class="collapse navbar-collapse"
id="shopNavbar">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" href="#">
خانه
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
فروشگاه
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
تخفیفها
</a>
</li>
</ul>
<form class="d-flex" role="search">
<input
class="form-control"
type="search"
placeholder="جستجو..."
aria-label="جستجو">
<button
class="btn btn-primary ms-2"
type="submit">
جستجو
</button>
</form>
</div>
</div>
</nav>دکمه ورود و ثبتنام
میتوانیم دکمههای کاربری را به Header اضافه کنیم:
<div class="d-flex gap-2">
<a
href="#"
class="btn btn-outline-primary">
ورود
</a>
<a
href="#"
class="btn btn-primary">
ثبتنام
</a>
</div>Header با منوی کاربر
پس از ورود کاربر، معمولاً به جای دکمه Login، منوی حساب کاربری نمایش داده میشود.
<div class="dropdown">
<button
class="btn btn-outline-secondary dropdown-toggle"
type="button"
data-bs-toggle="dropdown">
حساب کاربری
</button>
<ul class="dropdown-menu">
<li>
<a
class="dropdown-item"
href="#">
پروفایل
</a>
</li>
<li>
<a
class="dropdown-item"
href="#">
سفارشها
</a>
</li>
<li>
<a
class="dropdown-item"
href="#">
تنظیمات
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a
class="dropdown-item text-danger"
href="#">
خروج
</a>
</li>
</ul>
</div>Header با سبد خرید
برای فروشگاه اینترنتی میتوان یک دکمه سبد خرید اضافه کرد:
<a
href="#"
class="btn btn-outline-primary">
سبد خرید
<span class="badge text-bg-danger">
3
</span>
</a>در پروژه واقعی تعداد کالا معمولاً از Backend دریافت میشود.
Navbar در حالت Dark
Bootstrap امکان استفاده از Navbar تیره را نیز فراهم میکند:
<nav class="navbar navbar-expand-lg bg-dark navbar-dark">نمونه:
<nav class="navbar navbar-expand-lg bg-dark navbar-dark">
<div class="container">
<a
class="navbar-brand"
href="#">
سایت من
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#darkNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div
class="collapse navbar-collapse"
id="darkNavbar">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" href="#">
خانه
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
محصولات
</a>
</li>
</ul>
</div>
</div>
</nav>استفاده از رنگ سفارشی
اگر رنگ برند شما متفاوت است، میتوانید با CSS سفارشی آن را تغییر دهید.
مثلاً:
.main-navbar {
background-color: #171717;
}و:
<nav class="navbar navbar-expand-lg main-navbar">این روش بهتر از تغییر مستقیم فایلهای Bootstrap است.
Navbar چسبان
برای اینکه Header هنگام Scroll در بالای صفحه باقی بماند:
<nav class="navbar navbar-expand-lg sticky-top bg-body">کلاس:
sticky-topباعث میشود عنصر در زمان Scroll در موقعیت مناسب باقی بماند.
این روش برای Headerهای سایت بسیار کاربردی است.
Fixed Header
روش دیگر fixed-top است:
<nav class="navbar navbar-expand-lg fixed-top bg-body">در این حالت Navbar در بالای صفحه ثابت میشود.
اما باید توجه کنیم که Header ثابت میتواند بخشی از محتوای صفحه را بپوشاند. بنابراین معمولاً باید برای محتوای اصلی فضای مناسب ایجاد کنیم.
مثلاً:
main {
padding-top: 80px;
}Header چندبخشی
در بعضی سایتها Header فقط یک Navbar نیست.
مثلاً:
Top Bar
↓
Main Header
↓
Navigation
↓
Page ContentTop Bar میتواند شامل شماره تماس یا اعلان باشد:
<div class="bg-dark text-white py-2">
<div class="container">
<div class="d-flex
justify-content-between
align-items-center">
<span>
پشتیبانی: 02100000000
</span>
<span>
ارسال رایگان برای سفارشهای ویژه
</span>
</div>
</div>
</div>سپس Navbar اصلی:
<nav class="navbar navbar-expand-lg bg-body">
<div class="container">
<a
class="navbar-brand"
href="#">
فروشگاه
</a>
...
</div>
</nav>Header حرفهای برای فروشگاه
اکنون یک نمونه کاملتر ایجاد کنیم.
<header>
<div class="bg-dark text-white py-2">
<div class="container">
<div class="d-flex
justify-content-between
align-items-center">
<small>
پشتیبانی آنلاین
</small>
<small>
ارسال رایگان سفارشهای ویژه
</small>
</div>
</div>
</div>
<nav
class="navbar navbar-expand-lg bg-body sticky-top">
<div class="container">
<a
class="navbar-brand fw-bold"
href="#">
فروشگاه من
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#shopMenu"
aria-controls="shopMenu"
aria-expanded="false"
aria-label="باز کردن منو">
<span class="navbar-toggler-icon"></span>
</button>
<div
class="collapse navbar-collapse"
id="shopMenu">
<ul
class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a
class="nav-link active"
aria-current="page"
href="#">
خانه
</a>
</li>
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown">
محصولات
</a>
<ul class="dropdown-menu">
<li>
<a
class="dropdown-item"
href="#">
لپتاپ
</a>
</li>
<li>
<a
class="dropdown-item"
href="#">
موبایل
</a>
</li>
<li>
<a
class="dropdown-item"
href="#">
لوازم جانبی
</a>
</li>
</ul>
</li>
<li class="nav-item">
<a
class="nav-link"
href="#">
تخفیفها
</a>
</li>
<li class="nav-item">
<a
class="nav-link"
href="#">
تماس با ما
</a>
</li>
</ul>
<form
class="d-flex mb-3 mb-lg-0 me-lg-3"
role="search">
<input
class="form-control"
type="search"
placeholder="جستجو..."
aria-label="جستجو">
<button
class="btn btn-primary ms-2"
type="submit">
جستجو
</button>
</form>
<div class="d-flex gap-2">
<a
href="#"
class="btn btn-outline-primary">
ورود
</a>
<a
href="#"
class="btn btn-primary">
ثبتنام
</a>
</div>
</div>
</div>
</nav>
</header>RTL در Navbar
برای صفحات فارسی باید جهت صفحه را مشخص کنیم:
<html lang="fa" dir="rtl">و برای Bootstrap از فایل RTL استفاده کنیم:
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.rtl.min.css"
rel="stylesheet">در صفحات RTL بهتر است از کلاسهای منطقی Bootstrap مانند:
ms-*
me-*
ps-*
pe-*
text-start
text-endاستفاده کنیم.
Navbar و منوی موبایل
در موبایل معمولاً نمیخواهیم تمام لینکها بهصورت همزمان نمایش داده شوند.
ساختار مناسب:
Desktop
Logo | Navigation | Actions
Mobile
Logo | Menu Button
↓
Navigation
ActionsBootstrap با navbar-toggler و collapse این رفتار را بسیار ساده میکند.
Navbar برای سایت شرکتی
برای یک سایت شرکتی معمولاً Header سادهتر است:
<nav class="navbar navbar-expand-lg bg-body">
<div class="container">
<a
class="navbar-brand fw-bold"
href="#">
شرکت ما
</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#companyNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div
class="collapse navbar-collapse"
id="companyNavbar">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link active" href="#">
خانه
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
خدمات
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
نمونه کارها
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
درباره ما
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
تماس
</a>
</li>
</ul>
</div>
</div>
</nav>Navbar برای پنل مدیریت
Header پنل مدیریت معمولاً ساختار متفاوتی دارد.
مثلاً:
Admin Header
├── Brand
├── Search
├── Notifications
└── User Menuنمونه:
<nav class="navbar bg-dark navbar-dark">
<div class="container-fluid">
<a
class="navbar-brand"
href="#">
پنل مدیریت
</a>
<form
class="d-flex"
role="search">
<input
class="form-control"
type="search"
placeholder="جستجو">
</form>
<div class="dropdown">
<button
class="btn btn-dark dropdown-toggle"
data-bs-toggle="dropdown">
مدیر سیستم
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<a
class="dropdown-item"
href="#">
پروفایل
</a>
</li>
<li>
<a
class="dropdown-item"
href="#">
تنظیمات
</a>
</li>
<li>
<hr class="dropdown-divider">
</li>
<li>
<a
class="dropdown-item text-danger"
href="#">
خروج
</a>
</li>
</ul>
</div>
</div>
</nav>نکات مهم در طراحی Header
1. Header را بیش از حد شلوغ نکنید
قرار دادن تعداد زیادی لینک، دکمه و آیکون در Header میتواند رابط کاربری را پیچیده کند.
2. مهمترین Navigation را مشخص کنید
کاربر باید بتواند به مهمترین صفحات سایت بهسادگی دسترسی پیدا کند.
3. در موبایل اولویتبندی کنید
در صفحه کوچک همه عناصر Desktop را نمیتوان با همان شکل نمایش داد.
4. از Utilityها استفاده کنید
Bootstrap Utilityها میتوانند مقدار زیادی CSS سفارشی را حذف کنند.
5. به Accessibility توجه کنید
برای دکمه منوی موبایل حتماً aria-label و وضعیت aria-expanded را در نظر بگیرید.
Bootstrap Bundle
از آنجا که Navbar Responsive از Collapse و Dropdown استفاده میکند، JavaScript Bootstrap باید در صفحه وجود داشته باشد:
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js">
</script>تمرین عملی
یک Header برای یک سایت شرکتی ایجاد کنید.
Header باید شامل موارد زیر باشد:
Logo
خانه
خدمات
محصولات
درباره ما
تماس با ما
Dropdown محصولات
دکمه ورود
دکمه ثبتنام
منوی موبایل
طراحی RTL
Responsive Design
تمرین فروشگاهی
یک Header کامل فروشگاه طراحی کنید که شامل:
Top Bar
Logo
منوی دستهبندی
Search
سبد خرید
تعداد کالاها
حساب کاربری
Dropdown حساب کاربری
منوی موبایل
Sticky Navbar
باشد.
تمرین پیشرفته
یک Header برای پنل مدیریت طراحی کنید.
ساختار پیشنهادی:
Admin Panel
├── Logo
├── Search
├── Notifications
├── User Dropdown
└── Responsive Menuدر این تمرین:
Header را RTL کنید.
Navbar را Responsive کنید.
Dropdown حساب کاربری ایجاد کنید.
تعداد Notification را با Badge نمایش دهید.
Search را اضافه کنید.
Header را Sticky کنید.
در موبایل عناصر غیرضروری را جمع کنید.
از Utilityهای Bootstrap به جای CSS اضافی تا حد امکان استفاده کنید.
جمعبندی
در این مقاله یاد گرفتیم چگونه با استفاده از Navbar در Bootstrap Headerهای حرفهای و Responsive ایجاد کنیم. با ساختار Navbar، Logo، Navigation، Active Link، Dropdown، Search، دکمههای ورود و ثبتنام، حساب کاربری، سبد خرید، حالت Dark، Sticky Header، Fixed Header و Headerهای چندبخشی آشنا شدیم. همچنین نحوه طراحی Navbar برای سایتهای شرکتی، فروشگاهی و پنلهای مدیریت را بررسی کردیم و یاد گرفتیم چگونه یک Header فارسی و RTL را با استفاده از Bootstrap RTL ایجاد کنیم. در طراحی Header باید همیشه به سادگی، اولویتبندی محتوا، Responsive بودن و Accessibility توجه داشته باشیم.
نظرات
هنوز نظری ثبت نشده است.