CSS 메뉴 · 리스트 · animation
이 폴더는 CSS 선택자, 스타일 속성, 리스트 메뉴와 애니메이션을 나누어 연습합니다. 선택자가 어떤 요소를 가리키는지, 속성이 어떤 시각 효과를 만드는지, 상태 선택자와 구조 태그가 어떻게 연결되는지 확인합니다.
수직 메뉴 예제는 nav 안에 ul/li/a를 넣고, ul의 기본 여백과 li 마커를 제거해 메뉴처럼 만듭니다.
| 요소 | 역할 | 스타일 |
|---|---|---|
| nav#menubar | 메뉴 컨테이너 | inline-block, olive 배경 |
| ul | 메뉴 목록 | margin/padding 0 |
| li | 메뉴 항목 | 마커 제거, 좌우 padding |
| a | 클릭 링크 | white, underline 제거 |
메뉴 링크에 마우스를 올리면 violet 색으로 바뀝니다. hover는 메뉴가 클릭 가능한 요소라는 피드백을 줍니다.
카푸치노 예제는 ol의 기본 마커를 제거하고, span으로 숫자 마커를 직접 표현합니다. li 안의 p는 왼쪽 padding으로 숫자와 겹치지 않게 밀어냅니다.
| 선택자 | 역할 | 효과 |
|---|---|---|
| ol | 목록 기본 설정 | 마커 제거, padding |
| ol li | 항목 디자인 | 굵은 이탤릭 큰 글자 |
| ol li span | 숫자 마커 | absolute, olivedrab |
| ol li p | 설명 텍스트 | padding-left 50px |
span 숫자를 absolute로 배치하면 텍스트 흐름과 독립적으로 숫자 위치를 조절할 수 있습니다. 대신 p에 padding-left를 주어 내용이 숫자와 겹치지 않게 합니다.
animation 응용 예제는 p가 오른쪽 밖에서 왼쪽으로 들어오도록 margin-left를 100%에서 0%로 바꿉니다.
| 지점 | margin-left | 의미 |
|---|---|---|
| 0% | 100% | 오른쪽 밖에서 시작 |
| 100% | 0% | 원래 위치에 도착 |
| duration | 3s | 3초 동안 진행 |
| name | slideLeft | keyframes 연결 |
메뉴와 리스트는 구조를 다듬는 CSS이고, animation은 시간에 따른 변화를 만드는 CSS입니다. 둘 다 선택자와 속성 연결이 핵심입니다.
| 실수 | 증상 | 해결 |
|---|---|---|
| ul 기본 padding 제거 안 함 | 메뉴가 밀려 보입니다. | margin과 padding을 0으로 둡니다. |
| list-style 제거 안 함 | 마커가 남습니다. | list-style-type:none |
| a 밑줄 제거 누락 | 메뉴가 링크처럼 보입니다. | text-decoration:none |
| absolute 겹침 | 숫자와 문장이 겹칩니다. | p에 padding-left를 줍니다. |
| animation-name 불일치 | 애니메이션이 안 됩니다. | keyframes 이름과 맞춥니다. |
| 체크 | 통과 기준 |
|---|---|
| nav | 메뉴 컨테이너 역할을 설명합니다. |
| ul reset | 기본 여백과 마커를 제거합니다. |
| a hover | 링크 hover 피드백을 만듭니다. |
| custom marker | span으로 숫자 마커를 표현합니다. |
| keyframes | margin-left 변화로 슬라이드를 만듭니다. |
| duration | 애니메이션 시간을 조절합니다. |
| 테스트 | 확인 내용 |
|---|---|
| 메뉴 항목 추가 | 새 li에도 같은 스타일이 적용되는지 봅니다. |
| 배경색 변경 | nav 배경과 링크 색 대비를 확인합니다. |
| 마커 색 변경 | span 숫자 색이 바뀌는지 확인합니다. |
| slide 시간 변경 | 3s를 1s로 바꿔 속도 차이를 봅니다. |
| 시작 위치 변경 | margin-left 50%와 100% 차이를 확인합니다. |
수직 메뉴는 구조가 단순해서 가로 메뉴, 드롭다운, 현재 메뉴 강조 같은 형태로 확장하기 쉽습니다. 먼저 ul/li/a의 기본 여백과 링크 스타일을 안정적으로 잡는 것이 중요합니다.
| 개선 | 효과 | 힌트 |
|---|---|---|
| display:block | 링크 클릭 영역 확대 | #menubar a |
| active class | 현재 메뉴 표시 | .active |
| border-bottom | 메뉴 구분선 | li 스타일 |
| transition | hover 변화 부드럽게 | color .2s |
| focus 스타일 | 키보드 접근성 | a:focus |
slideLeft는 margin-left만 바꾸는 간단한 예제입니다. 같은 원리로 opacity나 transform을 함께 조절하면 더 자연스러운 등장 효과를 만들 수 있습니다.
| 속성 | 시작 | 끝 | 효과 |
|---|---|---|---|
| margin-left | 100% | 0% | 오른쪽에서 이동 |
| opacity | 0 | 1 | 서서히 나타남 |
| transform | translateX(100%) | translateX(0) | 위치 이동 |
| animation-duration | 1s | 3s | 속도 조절 |
| animation-fill-mode | none | forwards | 끝 상태 유지 |
| 점검 | 통과 기준 |
|---|---|
| 메뉴 구조 | nav 안에 ul, li, a가 계층적으로 들어 있습니다. |
| 기본 여백 제거 | ul의 margin과 padding이 0입니다. |
| 마커 제거 | li의 list-style-type이 none입니다. |
| 숫자 마커 | 카푸치노 순서의 span 숫자가 보입니다. |
| 슬라이드 | p가 오른쪽에서 왼쪽으로 들어옵니다. |
메뉴, 순서 리스트, 애니메이션 문장은 모두 HTML 구조가 먼저 있고 CSS가 그 구조의 표시 방식을 바꿉니다.
| 구조 | 주요 선택자 | CSS 역할 |
|---|---|---|
| 수직 메뉴 | #menubar ul li a | 링크를 메뉴 항목처럼 표시합니다. |
| 카푸치노 순서 | ol li span | 숫자 마커를 직접 배치합니다. |
| 카푸치노 설명 | ol li p | 설명 텍스트를 숫자 오른쪽으로 밀어냅니다. |
| 슬라이드 문장 | p | animation을 적용해 이동시킵니다. |
| keyframes | @keyframes slideLeft | 시작과 끝 위치를 정의합니다. |
| 테스트 | 통과 기준 |
|---|---|
| 메뉴 링크 | 밑줄 없이 흰색으로 보입니다. |
| 메뉴 hover | 마우스를 올리면 violet으로 바뀝니다. |
| 목록 숫자 | 커스텀 숫자 마커가 왼쪽에 보입니다. |
| 설명 들여쓰기 | p 텍스트가 숫자와 겹치지 않습니다. |
| 슬라이드 시작 | 문장이 오른쪽에서 시작합니다. |
| 슬라이드 종료 | 3초 후 원래 위치에 도착합니다. |
| 메뉴 컨테이너 | inline-block으로 메뉴 너비가 콘텐츠에 맞게 잡힙니다. |
| 링크 영역 | a에 padding을 주면 클릭 가능한 범위가 넓어집니다. |
| 마커 제거 | 기본 목록 점이 보이지 않습니다. |
| 커스텀 마커 | span 숫자가 순서 표시 역할을 합니다. |
| 애니메이션 이름 | animation-name과 @keyframes 이름이 같습니다. |
| 애니메이션 시간 | duration 변경에 따라 이동 속도가 달라집니다. |
| 끝 상태 | 필요하면 animation-fill-mode로 도착 상태를 유지합니다. |
| 접근성 | 메뉴 링크에는 hover뿐 아니라 focus 스타일도 고려합니다. |
| 성능 | 실무에서는 margin-left 대신 transform 이동도 검토합니다. |
| 구조 | nav, ul, li, a 계층이 깨지지 않았는지 확인합니다. |
| 확장 | active class로 현재 메뉴를 표시할 수 있습니다. |
| 반응형 | 작은 화면에서는 메뉴 항목 간격과 줄바꿈을 확인합니다. |
| 테스트 | 새 메뉴 항목을 추가해도 같은 스타일이 적용됩니다. |
| 문장 흐름 | 슬라이드되는 p 안의 이미지와 텍스트가 함께 이동합니다. |
| 재사용 | 메뉴 색상과 animation 값은 class로 분리할 수 있습니다. |
| 마무리 | 구조 CSS와 움직임 CSS를 구분해서 관리합니다. |
| 슬라이드 방향 | margin-left 값을 바꾸면 시작 위치가 달라집니다. |
| 메뉴 대비 | 배경색과 링크 글자색의 대비를 확인합니다. |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| CSS 스타일링 완전 정리 (0) | 2026.07.07 |
|---|---|
| CSS 셀렉터 완전 정리 (1) | 2026.07.07 |
| CSS 기초 레이아웃 완전 정리 (0) | 2026.07.07 |
| CSS animation · transition 완전 정리 (0) | 2026.07.07 |
| JavaScript 기초 문법 실습 완전 정리 (0) | 2026.07.07 |
왕진 블로그

댓글