display: inline-block,padding,hover효과까지 — 실무에서 자주 쓰이는 네비게이션 메뉴를 단계별로 만들어봅니다.

회색 배경의 가로 메뉴 바 안에 4개의 메뉴 아이템이 나란히 배치되고, 마우스를 올리면 해당 아이템이 검정 배경 + 흰 글씨로 바뀝니다.
<!-- nav > section > div*4 > a[href="#"]{메뉴 아이템 $} -->
<!-- 메뉴 박스 (메뉴를 감싸는 부모) -->
<nav>
<!-- 메뉴 -->
<section>
<!-- 메뉴 아이템 -->
<div>
<a href="#">메뉴 아이템 1</a>
</div>
<div>
<a href="#">메뉴 아이템 2</a>
</div>
<div>
<a href="#">메뉴 아이템 3</a>
</div>
<div>
<a href="#">메뉴 아이템 4</a>
</div>
</section>
</nav>
nav ← 메뉴 전체를 감싸는 박스 (가운데 정렬 담당)
└── section ← 메뉴 영역 (배경색, 둥근 모서리 담당)
├── div ← 메뉴 아이템 (가로 배치 담당)
│ └── a ← 클릭 가능한 텍스트 (padding, hover 담당)
├── div
│ └── a
├── div
│ └── a
└── div
└── a
💡 왜 이렇게 나눌까요?
각 태그에 역할을 분리하면 나중에 스타일 수정이 훨씬 쉬워집니다.
nav는 정렬만,section은 배경만,div는 배치만,a는 클릭 영역만 담당합니다!
a 태그 기본값 제거/* 브라우저 기본 스타일 초기화 */
a {
color: inherit; /* 파란색 제거 → 부모 색상 상속 */
text-decoration: none; /* 밑줄 제거 */
}
⚠️ 이 작업을 빠뜨리면?
a태그가 파란색 + 밑줄로 나타나 디자인이 깨집니다.
CSS 작업 시 가장 먼저 노멀라이즈를 적용하세요!
nav: 메뉴 전체 가운데 정렬nav {
text-align: center;
}
💡
text-align: center는inline-block자식 요소도 가운데로 정렬합니다.
section을inline-block으로 설정했기 때문에 이 한 줄로 메뉴 전체가 가운데로 옵니다.
section: 메뉴 배경 + 크기 줄이기nav > section {
background-color: #dfdfdf; /* 회색 배경 */
display: inline-block; /* 너비를 내용물에 맞게 축소 */
border-radius: 5px; /* 모서리 살짝 둥글게 */
padding: 0 10px; /* 좌우 여백 */
}
🤔
display: inline-block을 쓰는 이유?
기본값인display: block은 너비가 화면 전체를 차지합니다.
inline-block으로 바꾸면 내용물 크기에 맞게 너비가 줄어듭니다.
div: 메뉴 아이템 가로 배치nav > section > div {
display: inline-block; /* 아이템들을 한 줄에 나란히 배치 */
}
💡
div는 기본적으로block요소라 세로로 쌓입니다.
inline-block으로 바꿔야 가로로 나란히 배치됩니다.
a: 클릭 영역 확장nav > section > div > a {
padding: 10px; /* 클릭 가능한 영역 확장 */
display: block; /* padding이 제대로 적용되게 */
}
⚠️
display: block이 없으면?
a태그는 기본적으로inline요소라padding의 상하 값이 제대로 적용되지 않습니다.
반드시display: block을 함께 써야 합니다!
:hover: 마우스 올렸을 때 효과nav > section > div:hover > a {
background-color: black;
color: white;
}
💡 선택자 읽는 법
div:hover > a= "마우스가 올려진div의 직계 자식인a"
div에 hover를 걸고, 실제 스타일은a에 적용하는 패턴입니다.
이렇게 하면 텍스트뿐 아니라 padding 영역 전체에 배경색이 채워집니다!
a 태그에는 padding + display: block버튼처럼 동작하는 링크를 만들 때 가장 중요한 규칙입니다.
a {
padding: 10px; /* 클릭 영역 확장 */
display: block; /* padding 상하 적용을 위해 필수 */
}
| 상황 | padding 적용 여부 |
|---|---|
display: inline (기본) | 상하 padding ❌ 제대로 안 먹힘 |
display: block | 상하 padding ✅ 정상 적용 |
display: inline-block | 상하 padding ✅ 정상 적용 |
inline-block 정리| 속성 | 특징 |
|---|---|
display: block | 너비 100%, 세로로 쌓임 |
display: inline | 내용물 크기, 가로 배치, padding 상하 ❌ |
display: inline-block | 내용물 크기, 가로 배치, padding 상하 ✅ |
<nav>
<section>
<div><a href="#">메뉴 아이템 1</a></div>
<div><a href="#">메뉴 아이템 2</a></div>
<div><a href="#">메뉴 아이템 3</a></div>
<div><a href="#">메뉴 아이템 4</a></div>
</section>
</nav>
/* 노멀라이즈 */
a {
color: inherit;
text-decoration: none;
}
/* 메뉴 박스 — 가운데 정렬 */
nav {
text-align: center;
}
/* 메뉴 — 배경, 크기 축소 */
nav > section {
background-color: #dfdfdf;
display: inline-block;
border-radius: 5px;
padding: 0 10px;
}
/* 메뉴 아이템 — 가로 배치 */
nav > section > div {
display: inline-block;
}
/* 메뉴 아이템 텍스트 — 클릭 영역 확장 */
nav > section > div > a {
padding: 10px;
display: block;
}
/* hover 효과 */
nav > section > div:hover > a {
background-color: black;
color: white;
}