CSS 탭 생성기
탭은 어디에나 있습니다, 설정 창, 문서 사이트, 제품 갤러리. 네이티브 HTML에는 전용 탭 요소가 없어 개발자들이 직접 만듭니다. 이 생성기는 활성 탭의 강조 색상, 버튼의 모서리 반지름, 호버 상태를 갖춘 간단한 탭 바를 HTML + CSS로 만들어 줍니다. 마크업을 프로젝트에 붙여 넣고 탭 전환은 직접 작성한 JavaScript로 연결하세요.
탭 만드는 방법
-
1
강조 색상 선택
활성 탭의 배경색과 글자색입니다. 브랜드에 어울리는 색을 고르세요.
-
2
모서리 반지름 설정
탭 버튼의 위쪽 모서리를 둥글게 만듭니다. 값이 클수록 부드러운 느낌이 납니다.
-
3
레이블 편집
결과에는 "Overview", "Details", "Settings" 버튼 세 개가 포함됩니다. 콘텐츠에 맞게 이름을 바꾸세요.
-
4
코드 복사
탭 마크업에는 자체 <style> 블록이 포함됩니다. 둘을 모두 페이지에 붙여 넣으세요.
-
5
탭 전환 추가
생성기는 시각적 부분만 만듭니다. 패널을 표시하고 숨기려면 버튼을 직접 작성한 JavaScript나 UI 라이브러리에 연결하세요.
올바른 접근성 마크업
<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는 roving tabindex 패턴을 씁니다: 활성 탭만0이고 나머지는-1입니다. 방향키가 그 사이로 포커스를 옮깁니다.- 각 패널에
role="tabpanel", 그 탭을 가리키는aria-labelledby. - 비활성 패널에
hidden(단독display: none이 아님, 이 속성을 AT가 사용합니다).
키보드 계약
| 키 | 동작 |
|---|---|
| Tab | tablist로 들어가기 / 나가기 |
| ArrowLeft | 이전 탭(마지막으로 순환) |
| ArrowRight | 다음 탭(처음으로 순환) |
| Home | 첫 탭 |
| End | 마지막 탭 |
| Enter / Space | 포커스된 탭 활성화(수동 활성화일 때) |
자동 활성화(포커스가 이동하면 탭이 전환) vs 수동(포커스가 이동하고 Enter로 탭 활성화), 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;
}
JavaScript
대략:
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();
}
총 30줄, 의존성 제로.
탭 vs 아코디언
좁은 화면에서는 탭 행이 비좁아집니다. 흔한 패턴: 데스크톱은 탭, 모바일은 아코디언. ARIA 역할을 바꾸지 않고 시각 처리를 전환하려면 컨테이너 쿼리나 미디어 쿼리를 사용하세요.
자주 묻는 질문
접근성 있는 탭이라면 네. role="tablist"와 role="tab"이 없으면 스크린 리더가 버튼을 일반 버튼으로 취급하고 사용자는 내비게이션 관례를 잃습니다. 대안은 내장 시맨틱이 있는 평범한 <details> / <summary> 아코디언입니다.
각 탭 콘텐츠 렌더링이 가벼우면 자동(포커스 이동 시 탭 활성화)이 괜찮습니다. 탭 전환이 페치나 큰 폼 렌더링 같은 무거운 작업을 유발하면 수동(포커스 이동, Enter로 활성화)이 더 낫습니다.
콘텐츠를 담은 탭(문서, 제품 탭)이라면 네, 해시(#specs)나 쿼리 파라미터를 써서 링크가 특정 탭으로 딥링크되고 새로고침에도 활성 탭이 유지되게 하세요. UI 탭(설정 창)은 URL이 선택 사항입니다.
방향키 내비게이션과 ARIA 상태가 없는 체크박스/라디오 핵으로만 가능합니다. 진정으로 접근성 있는 구현에는 작은 JS 스니펫이 그만한 값을 합니다. 서버 렌더 폴백이 필요하면 각 탭을 고유 URL로 연결하고 해당 패널을 서버 측에서 렌더링하세요.
관련 도구
ASCII 표 참조
NUL, LF, DEL 같은 제어 문자를 포함해 모든 문자에 대한 10진수, 16진수, 8진수, 2진수, HTML 숫자 문자 참조를 담은 0부터 127까지의 전체 ASCII 표.
HTML 문자 참조
HTML 엔티티의 검색 가능한 목록, 각 엔티티의 이름 및 숫자 코드, 그리고 특수 문자 및 기호에 대한 1클릭 복사 기능을 제공합니다.
키보드 단축키 참고표
macOS, Windows, Linux에서 VS Code, Chrome, GNU Readline을 쓰는 Bash의 문서화된 기본 단축키를 검색합니다.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
랜덤 영어 글자 생성기
A-Z 영어 글자를 무작위로 생성합니다. 개수와 대문자, 소문자, 혼합 대소문자를 선택해 게임, 과제, 수업 활동에 활용하세요.
랜덤 색상 팔레트 생성기
2~15개의 색상으로 랜덤 팔레트를 만들고, 비비드, 파스텔, muted, dark 스타일을 선택한 뒤 HEX 코드나 CSS 변수를 복사하세요.
이 도구는 다른 언어로도 제공됩니다
- ตัวสร้างแท็บส์ CSS [TH]
- CSSタブジェネレーター [JA]
- CSS Tabs Generator [NL]
- CSS Tab Generatörü [TR]
- CSS标签生成器 [ZH]
- Générateur d'onglets CSS [FR]
- Trình tạo tab CSS [VI]
- CSS Tabs Generator [EN]
- Generator Tab CSS [ID]
- CSS-flikgenerator [SV]
- Generador de Pestañas CSS [ES]
- CSS-Tabs-Generator [DE]
- مولد علامات التبويب CSS [AR]
- Generator kart (tabs) CSS [PL]
- Gerador de Abas CSS [PT]
- Generatore di schede CSS [IT]
- Генератор вкладок CSS [RU]