CSS에서 가상 클래스(Pseudo-classes)와 가상 요소(Pseudo-elements)는 비슷해 보일 수 있지만, 그 목적과 동작 방식에서 중요한 차이가 있습니다. 두 개념은 모두 HTML 문서에서 존재하지 않는 부분에 스타일을 적용할 수 있게 해 주지만, 각각 다르게 작동합니다.
1. 가상 클래스 (Pseudo-classes)
가상 클래스는 특정 상태나 조건을 만족하는 HTML 요소를 선택할 때 사용됩니다. 즉, 요소의 상태(예: 마우스 오버 상태, 포커스 상태 등)에 따라 스타일을 다르게 적용할 수 있습니다.
주요 가상 클래스 예시
- :hover: 마우스가 요소 위에 올라갔을 때 스타일을 적용
- :focus: 요소가 포커스를 가질 때 스타일을 적용 (예: 입력 필드)
- :active: 사용자가 클릭할 때 스타일을 적용
- :nth-child(): 특정 순서에 있는 자식 요소를 선택
- :first-child: 부모 요소의 첫 번째 자식 요소를 선택
- :last-child: 부모 요소의 마지막 자식 요소를 선택
예시:
a:hover {
color: red; /* 마우스를 링크 위에 올리면 빨간색으로 변경 */
}
input:focus {
background-color: yellow; /* 포커스를 받을 때 배경색을 노란색으로 변경 */
}
li:nth-child(odd) {
background-color: lightgray; /* 홀수 번째 자식 요소에 배경색 적용 */
}
2. 가상 요소 (Pseudo-elements)
가상 요소는 HTML 요소의 특정 부분이나 그 부분을 가상으로 만들어 스타일을 적용할 수 있게 해주는 선택자입니다. 실제 DOM 요소는 없지만, CSS만으로 특정 부분을 가상적으로 삽입하여 스타일을 적용할 수 있습니다. 대표적인 가상 요소는 ::before, ::after와 같은 선택자입니다.
주요 가상 요소 예시
- ::before: 선택한 요소의 내용이 렌더링되기 전에 콘텐츠를 삽입
- ::after: 선택한 요소의 내용이 렌더링된 후 콘텐츠를 삽입
- ::first-letter: 요소의 첫 번째 글자에 스타일을 적용
- ::first-line: 요소의 첫 번째 줄에 스타일을 적용
- ::selection: 사용자가 텍스트를 선택했을 때 스타일을 적용
예시:
p::before {
content: "✨"; /* p 요소의 앞에 "✨" 아이콘을 삽입 */
}
p::after {
content: "✨"; /* p 요소의 뒤에 "✨" 아이콘을 삽입 */
}
h1::first-letter {
font-size: 2em; /* h1의 첫 번째 글자 크기를 두 배로 확대 */
color: red; /* 첫 번째 글자 색상을 빨간색으로 변경 */
}
::selection {
background-color: yellow; /* 텍스트 선택 시 배경색을 노란색으로 변경 */
}
가상 클래스와 가상 요소의 차이점
특성 가상 클래스 (Pseudo-classes) 가상 요소 (Pseudo-elements)
목적 | 요소의 상태에 따라 스타일을 적용 | 요소의 부분에 스타일을 적용 (실제 요소 없이) |
상태 | 마우스 오버, 클릭, 포커스 등 상태에 반응 | 요소의 특정 부분을 가상으로 스타일링 (예: 첫 글자, 첫 줄 등) |
형태 | : (콜론)으로 시작 | :: (두 개의 콜론)으로 시작 |
예시 | :hover, :focus, :nth-child() 등 | ::before, ::after, ::first-letter 등 |
적용 대상 | HTML 요소의 상태(사용자 상호작용에 따른 변화 등) | 요소의 특정 부분 또는 가상 콘텐츠 |
예시로 이해하기
가상 클래스 예시:
/* 링크에 마우스를 올리면 색상이 빨간색으로 바뀜 */
a:hover {
color: red;
}
/* 첫 번째 자식 요소에만 스타일을 적용 */
ul > li:first-child {
font-weight: bold;
}
가상 요소 예시:
/* p 요소의 앞에 "✨" 아이콘을 삽입 */
p::before {
content: "✨";
}
/* p 요소의 끝에 "✨" 아이콘을 삽입 */
p::after {
content: "✨";
}
/* h1의 첫 번째 글자 크기를 두 배로 키우고 빨간색으로 변경 */
h1::first-letter {
font-size: 2em;
color: red;
}
결론
- 가상 클래스는 요소의 상태나 조건을 기반으로 스타일을 적용하는 데 사용됩니다. 예를 들어, 사용자가 요소와 상호작용할 때 발생하는 상태에 반응합니다.
- 가상 요소는 HTML의 구조적인 부분을 수정하거나, 가상적인 콘텐츠를 삽입하는 데 사용됩니다. 실제 HTML 요소를 추가하지 않고도 다양한 스타일 효과를 추가할 수 있습니다.
두 개념은 서로 보완적이며, 각각의 목적에 맞게 사용하면 HTML 문서를 더 깔끔하고 효율적으로 스타일링할 수 있습니다.
'CSS' 카테고리의 다른 글
pseudo-element selector - ::before,::after,::first-letter,::first-line,::selection (0) | 2025.04.07 |
---|---|
display:none, visibility:hidden 비교 (0) | 2025.04.07 |
display 속성 (0) | 2025.04.07 |
grid-template-areas (0) | 2023.12.13 |
grid-template-rows 행 정보 (0) | 2023.12.13 |