مولد علامات التبويب CSS
علامات التبويب موجودة في كل مكان، أجزاء الإعدادات، ومواقع التوثيق، ومعارض المنتجات. لا يحتوي HTML الأصلي على عنصر علامة تبويب مخصص، لذلك يقوم المطورون بإنشاء عناصر خاصة بهم. يبني هذا المولد شريط تبويبات بسيطًا بتنسيق HTML + CSS: لونًا مميزًا للتبويب النشط، وانحناءً لزوايا الأزرار، وحالة تمرير. الصق البنية في مشروعك واربط التبديل بين التبويبات بكود JavaScript الخاص بك.
كيفية بناء علامات التبويب
-
1
اختر لونًا مميزًا
لون خلفية ونص التبويب النشط. اختر لونًا يطابق علامتك التجارية.
-
2
حدّد انحناء الزوايا
يقرّب الزوايا العلوية لأزرار التبويب. القيم الأعلى تعطي مظهرًا أنعم.
-
3
عدّل التسميات
يتضمّن الناتج ثلاثة أزرار: "Overview" و"Details" و"Settings". أعِد تسميتها بما يناسب محتواك.
-
4
انسخ الكود
تأتي بنية التبويبات مع كتلة <style> خاصة بها. الصق الاثنين معًا في صفحتك.
-
5
أضف التبديل بين التبويبات
يُنتج المولد الجزء المرئي فقط. اربط الأزرار بكود JavaScript الخاص بك أو بمكتبة واجهة المستخدم لإظهار اللوحات وإخفائها.
الترميز الصحيح القابل للوصول
<div class="tabs">
<div role="tablist" aria-label="Product info">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1" tabindex="0">Overview</button>
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
<button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
</div>
<section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
<section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
<section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>
السمات الحاسمة:
role="tablist"يغلف الأزرار.role="tab"على كل زر، معaria-selectedوaria-controls.- يستخدم
tabindexنمط tabindex المتجول: علامة التبويب النشطة فقط هي0، والبعض الآخر هو-1. تعمل مفاتيح الأسهم على نقل التركيز بينهما. role="tabpanel"على كل لوحة، مع إشارةaria-labelledbyإلى علامة التبويب الخاصة بها.hiddenعلى اللوحات غير النشطة (وليسdisplay: noneوحده، السمة هي ما تستخدمه AT).
عقد لوحة المفاتيح
| المفتاح | الإجراء |
|---|---|
| Tab | الدخول إلى قائمة علامات التبويب / الخروج منها |
| ArrowLeft | علامة التبويب السابقة (تلتف إلى الأخيرة) |
| ArrowRight | علامة التبويب التالية (تلتف إلى الأولى) |
| Home | علامة التبويب الأولى |
| End | علامة التبويب الأخيرة |
| Enter / Space | تفعيل علامة التبويب المركّز عليها (عند التفعيل اليدوي) |
التنشيط التلقائي (تبديل علامة التبويب أثناء تحرك التركيز) مقابل التنشيط اليدوي (تحركات التركيز، وتنشيط علامة التبويب عند الإدخال) - يسمح WAI-ARIA بكليهما. التلقائي أسهل للمستخدمين المبصرين؛ يكون الدليل أفضل عندما يكون محتوى علامة التبويب ثقيلًا في العرض.
النمط الذي تحته خط
[role="tablist"] {
display: flex;
border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
padding: 0.75rem 1rem;
background: transparent;
border: 0;
color: #6b7280;
position: relative;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
color: #111827;
}
[role="tab"][aria-selected="true"]::after {
content: "";
position: absolute;
left: 1rem; right: 1rem; bottom: -1px;
height: 2px;
background: #2563eb;
}
النمط الكبسولي
[role="tab"] {
padding: 0.5rem 0.9rem;
border-radius: 9999px;
border: 0;
background: transparent;
}
[role="tab"][aria-selected="true"] {
background: #2563eb;
color: #fff;
}
التركيز مرئي
ارسم دائمًا حلقة التركيز عندما يصل التركيز عبر لوحة المفاتيح:
[role="tab"]:focus-visible {
outline: 2px solid #60a5fa;
outline-offset: 2px;
}
جافا سكريبت
تقريبًا:
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
tab.addEventListener('click', () => activate(tab));
tab.addEventListener('keydown', e => {
const i = [...tabs].indexOf(tab);
if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
if (e.key === 'ArrowLeft') tabs[(i - 1 + tabs.length) % tabs.length].focus();
if (e.key === 'Home') tabs[0].focus();
if (e.key === 'End') tabs[tabs.length - 1].focus();
});
});
function activate(tab) {
tabs.forEach(t => {
const panel = document.getElementById(t.getAttribute('aria-controls'));
const active = t === tab;
t.setAttribute('aria-selected', active);
t.setAttribute('tabindex', active ? '0' : '-1');
panel.hidden = !active;
});
tab.focus();
}
إجمالي ثلاثين سطرًا، بدون تبعيات.
علامات التبويب مقابل الأكورديون
على الشاشات الضيقة، تصبح صفوف علامات التبويب ضيقة. النمط الشائع: علامات التبويب على سطح المكتب، والأكورديون على الهاتف المحمول. استخدم استعلام حاوية أو استعلام وسائط لتبديل المعالجة المرئية دون تغيير أدوار ARIA.
الأسئلة الشائعة
بالنسبة لعلامات التبويب التي يمكن الوصول إليها، نعم. بدون role="tablist" وrole="tab"، تتعامل برامج قراءة الشاشة مع الأزرار كأزرار عادية ويفقد المستخدمون اصطلاح التنقل. البديل هو الأكورديون العادي <details> / <summary>، والذي يحتوي على دلالات مدمجة.
يعد التشغيل التلقائي (يتم تنشيط علامة التبويب أثناء تحرك التركيز) أمرًا جيدًا عندما يكون عرض محتوى كل علامة تبويب رخيصًا. يعد النقل اليدوي (حركات التركيز، وتنشيط الإدخال) أفضل عندما يؤدي تبديل علامات التبويب إلى تشغيل عمل شاق مثل جلب نموذج كبير أو عرضه.
بالنسبة لعلامات التبويب التي تحمل المحتوى (الوثائق وعلامات تبويب المنتج)، نعم - استخدم علامة التجزئة (#specs) أو معلمة الاستعلام حتى تتمكن الروابط من الارتباط العميق بعلامة تبويب معينة وتستمر علامة التبويب النشطة عبر عمليات إعادة التحميل. بالنسبة لعلامات تبويب واجهة المستخدم (أجزاء الإعدادات)، يكون عنوان URL اختياريًا.
فقط مع اختراق مربع الاختيار/الراديو، الذي يفتقر إلى التنقل باستخدام مفتاح الأسهم وحالات ARIA. من أجل تنفيذ يمكن الوصول إليه بشكل حقيقي، فإن مقتطف JS الصغير يستحق كل هذا العناء. إذا كنت بحاجة إلى إجراءات احتياطية مقدمة من الخادم، فاربط كل علامة تبويب بعنوان URL فريد واعرض اللوحة المقابلة من جانب الخادم.
أدوات ذات صلة
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
مرجع أحرف HTML
قائمة قابلة للبحث بكيانات HTML، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
مرجع اختصارات لوحة المفاتيح
ابحث في الاختصارات الافتراضية الموثقة لـ VS Code وChrome وBash مع GNU Readline على macOS وWindows وLinux.
عدّاد FPS
قِس معدل الإطارات FPS في المتصفح عبر requestAnimationFrame: تنعيم، وأدنى وأقصى معدل إطارات، وحد تنبيه، ورسم بياني اختياري. يعمل محليًا بلا رفع ملفات وبلا API.
منسق JSON
الصق JSON لتنسيقه بمسافتين أو أربع مسافات، أو تصغيره إلى ناتج مضغوط، أو فحص بنيته بسرعة قبل نسخ النتيجة.
مولد لوحة الألوان
أنشئ لوحات ألوان أحادية أو متجاورة أو مكملة أو ثلاثية أو رباعية من لون HEX أساسي، ثم صدّر متغيرات CSS جاهزة للنسخ.
الأداة متاحة بلغات أخرى
- CSS 탭 생성기 [KO]
- Trình tạo tab CSS [VI]
- CSS Tabs Generator [NL]
- CSS标签生成器 [ZH]
- CSS-Tabs-Generator [DE]
- CSS Tabs Generator [EN]
- Generator Tab CSS [ID]
- CSS-flikgenerator [SV]
- Generator kart (tabs) CSS [PL]
- ตัวสร้างแท็บส์ CSS [TH]
- Generador de Pestañas CSS [ES]
- Générateur d'onglets CSS [FR]
- Gerador de Abas CSS [PT]
- CSSタブジェネレーター [JA]
- CSS Tab Generatörü [TR]
- Generatore di schede CSS [IT]
- Генератор вкладок CSS [RU]