웹 퍼블리싱을 하다 보면 자주 마주치는 ::before, ::after.
이 글에서는 가상 요소의 개념, 사용법, 필수 속성 content, 그리고 실무 예제를 통해 정리해본다.
HTML 요소의 앞(before)이나 뒤(after)에 생성되는 "가짜 요소"
selector::before {
content: "";
/* 스타일 속성 */
}
selector::after {
content: "";
/* 스타일 속성 */
}
selector: 적용할 대상 선택자::before: 시작 태그 바로 뒤에 생성::after: 종료 태그 바로 앞에 생성content: 가상 요소가 렌더링되기 위한 필수 속성content가 꼭 필요할까?가상 요소는 content 속성이 있어야 생성됨.
/* 생성되지 않음 */
.selector::after {
width: 100px;
height: 2px;
}
/* 생성됨 */
.selector::after {
content: "";
display: block;
width: 100px;
height: 2px;
}
content: ""처럼 빈 문자열이라도 반드시 선언해야 가상 요소가 나타난다.
.nav-link {
position: relative;
}
.nav-link::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
height: 2px;
width: 100%;
background: black;
transform: scaleX(0);
transition: transform 0.3s ease;
transform-origin: left;
}
.nav-link:hover::after {
transform: scaleX(1);
}
::after로 밑줄을 만들고, hover 시에 애니메이션position: absolute를 쓰기 때문에 .nav-link에는 position: relative 필요| 구분 | 위치 | 사용 예시 |
|---|---|---|
::before | 태그 시작 위치에 삽입 | 작은 아이콘, 장식, 인용 부호 등 |
::after | 태그 끝 위치에 삽입 | 밑줄, 강조선, 라벨 등 |
display: block이나 inline-block으로 가상 요소의 크기 설정position: absolute와 함께 많이 쓰임::before, ::after는 시각적인 장식용 가상 요소content는 필수