در حال بارگذاری...

منوهای کشویی با CSS

نوار ناوبری پیوندها را در یک ردیف چید. dropdown یک پنل تو در تو اضافه می‌کند که زیر محرک باز می‌شود — معمولاً با hover، و بهتر است وقتی فوکوس صفحه‌کلید داخلش است هم باز بماند. قبل از اختراع mega-menu غول‌آسا، یک الگوی آرام CSS را مسلط شوید.

جعبهٔ ابزار dropdown

📊 dropdown یک‌نگاهه

قطعه کار روزمره
محرک relative li پدر (یا پوشش) لنگر جای‌گذاری می‌شود
پنل absolute منوی تو در تو زیر محرک می‌نشیند (top: 100%)
پنهان پیش‌فرض تا باز شدن display: none یا بیرون صفحه
باز شدن :hover نشانگر پنل را باز می‌کند
:focus-within کاربر صفحه‌کلید هنگام tab می‌تواند پنل را باز/باز نگه دارد
z-index پنل باز را بالای محتوای بعدی صفحه نگه می‌دارد

dropdown فقط‌CSS یک کلاسیک آموزشی است. محصول واقعی اغلب برای کلیک لمسی، Escape و دسترسی‌پذیری غنی‌تر JS اضافه می‌کند — اول اسکلت CSS را اینجا یاد بگیرید.

محرک relative، لیست تو در تو

پیوند محرک را در نوار بالا نگه دارید و برای زیرمنو یک لیست دوم تو در تو بسازید. آیتم پدر باید position داشته باشد تا فرزند absolute خانه‌اش را بداند.

آیتم dropdown با relative

css
.nav > li {
position: relative;
}

.nav > li > a {
display: inline-block;
padding: 0.5rem 0.75rem;
}

پنل absolute زیر محرک

زیرمنو را با position: absolute بگذارید، به پایین محرک بچسبانید، و پس‌زمینهٔ توپر بدهید تا متن صفحه از زیر نزند.

پنل زیرمنو absolute

css
.nav .submenu {
position: absolute;
top: 100%;
left: 0;
min-width: 12rem;
margin: 0;
padding: 0.35rem 0;
list-style: none;
background: #fff;
border: 1px solid #e5e5e5;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
}

تا باز شدن پنهان بماند

پنل را پیش‌فرض بسته بگذارید. باز بودن همه‌چیز از اول، dropdown را بی‌معنا می‌کند.

پنهان کردن زیرمنو پیش‌فرض

css
.nav .submenu {
display: none;
}

با hover باز شود

وقتی نشانگر روی آیتم پدر است، پنل را نشان دهید. padding روی محرک کمک می‌کند لبه‌ها تصادفی بسته نشوند.

hover زیرمنو را باز می‌کند

css
.nav > li:hover > .submenu {
display: block;
}

focus-within را هم ترجیح دهید

فقط hover برای صفحه‌کلید کافی نیست. :focus-within وقتی فوکوس داخل آیتم است پنل را باز نگه می‌دارد — ارتقای آرام CSS.

focus-within زیرمنو را باز می‌کند

css
.nav > li:hover > .submenu,
.nav > li:focus-within > .submenu {
display: block;
}

عادت آرام dropdown

پدر relative، پنل absolute، پنهان پیش‌فرض، hover + focus-within، z-index معقول. toggle کلیکی mega-menu و ARIA پیچیده را برای الگوهای غنی‌تر بعد بگذارید — با درس نوار ناوبری تخت قاطی نکنید.

لایهٔ منوی باز

css
.nav .submenu {
z-index: 20;
}

.nav .submenu a {
display: block;
padding: 0.45rem 0.9rem;
text-decoration: none;
color: inherit;
}

خودتان امتحان کنید

  1. هر li سطح بالا را position: relative کنید.
  2. لیست .submenu تو در تو بسازید و absolute; top: 100%; left: 0 بدهید.
  3. با display: none پنهان کنید، بعد با li:hover نشان دهید.
  4. :focus-within اضافه کنید تا فوکوس صفحه‌کلید هم پنل را باز کند.
  5. z-index را بالا ببرید و بنویسید کی برای کلیک لمسی JS می‌آورید.

اشتباه‌های رایج

  • زیرمنو absolute بدون پدر relative (پنل دور می‌پرد)
  • رها کردن زیرمنو پیش‌فرض نمایان
  • حذف استایل فوکوس تا کاربر صفحه‌کلید گم شود
  • ساختن mega-menu کامل JS قبل از یادگیری این اسکلت CSS
  • دیدن dropdown مثل درس کل چیدمان صفحه

جمع‌بندی

  • dropdown پنلی تو در تو زیر محرک relative است
  • absolute به‌علاوهٔ top: 100% منو را زیر پیوند می‌چسباند
  • پیش‌فرض پنهان؛ با hover و focus-within باز کنید
  • با z-index پنل را روی محتوای صفحه نگه دارید
  • نوار تخت اول آمد؛ منوی تو در تو این درس است

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
7
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود