Frontend/CSS

CSS 가상 요소 ::before와 ::after로 디자인 디테일 살리기

미니임 2026. 2. 28. 22:52

 

웹 디자인에서 '디테일'은 아주 작은 부분에서 결정됩니다. 단순히 텍스트와 이미지를 나열하는 것을 넘어, 아이콘을 덧붙이거나 세련된 장식 요소를 추가하고 싶을 때 HTML 소스를 직접 수정하는 것은 비효율적일 수 있습니다. 이때 가장 유용하게 사용할 수 있는 도구가 바로 CSS의 가상 요소(Pseudo-elements)인 ::before와 ::after입니다.

1. 가상 요소란 무엇인가?

가상 요소는 HTML 문서 상에는 존재하지 않지만, CSS를 통해 특정 요소의 앞(::before)이나 뒤(::after)에 가상의 콘텐츠를 생성하여 스타일을 입힐 수 있는 기능입니다.

핵심 규칙: content 속성

가상 요소를 사용할 때 가장 중요한 점은 content 속성이 반드시 포함되어야 한다는 것입니다. 내용이 없더라도 content: "";와 같이 빈 값을 설정해야 화면에 나타납니다.

2. 실전 활용 예제

예제 1: 불렛 포인트 디자인 커스텀

기본적인 리스트(<ul>, <li>)의 점 모양이 지겨울 때, 가상 요소를 사용해 독특한 아이콘이나 도형으로 대체할 수 있습니다.

/* 리스트 기본 불렛 제거 */
ul {
  list-style: none;
  padding: 0;
}

li {
  position: relative;
  padding-left: 25px;
  margin-bottom: 10px;
}

/* ::before를 사용한 커스텀 불렛 */
li::before {
  content: "✓"; /* 체크 모양 추가 */
  position: absolute;
  left: 0;
  color: #3498db;
  font-weight: bold;
}

예제 2: 인용구 장식 (Quotation Marks)

블로그의 인용문(blockquote) 전후에 큰 따옴표를 넣어 시각적으로 강조할 수 있습니다.

blockquote {
  position: relative;
  padding: 20px 40px;
  background: #f9f9f9;
  border-left: 5px solid #ccc;
  font-style: italic;
}

/* 시작 따옴표 */
blockquote::before {
  content: "\201C"; /* 유니코드 시작 따옴표 */
  position: absolute;
  top: -10px;
  left: 10px;
  font-size: 60px;
  color: #ddd;
}

/* 끝 따옴표 */
blockquote::after {
  content: "\201D"; /* 유니코드 끝 따옴표 */
  position: absolute;
  bottom: -40px;
  right: 10px;
  font-size: 60px;
  color: #ddd;
}

예제 3: 세련된 링크 호버 효과 (Underline Animation)

단순한 밑줄 대신, 왼쪽에서 오른쪽으로 채워지는 애니메이션 효과를 줄 수 있습니다.

.nav-link {
  text-decoration: none;
  color: #333;
  position: relative;
  padding-bottom: 5px;
}

/* 가상의 밑줄 생성 */
.nav-link::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  width: 0; /* 처음엔 너비 0 */
  height: 2px;
  background-color: #ff4757;
  transition: width 0.3s ease; /* 애니메이션 효과 */
}

/* 마우스 호버 시 너비 확장 */
.nav-link:hover::after {
  width: 100%;
}

3. 배경 오버레이 및 장식 요소 활용

이미지 위 텍스트 가독성 높이기

배경 이미지 위에 어두운 막을 씌워 글자를 더 잘 보이게 할 때 활용합니다.

.hero-section {
  position: relative;
  background: url('example.jpg') no-repeat center/cover;
  height: 400px;
}

/* 어두운 반투명 레이어 추가 */
.hero-section::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.5); /* 50% 투명도 검정색 */
  z-index: 1;
}

.hero-text {
  position: relative;
  z-index: 2; /* 레이어보다 위로 올림 */
  color: white;
}

4. 주의해야 할 점

  1. 웹 접근성: 가상 요소로 추가된 텍스트는 스크린 리더가 읽지 못하는 경우가 많습니다. 정보 전달을 위한 중요한 내용은 반드시 HTML 본문에 작성하세요.
  2. 빈 content: 디자인적인 용도(도형, 선 등)로만 사용한다면 반드시 content: "";를 명시해야 합니다.
  3. 위치 지정: 대부분 가상 요소를 자유롭게 배치하기 위해 부모 요소에 position: relative;를, 가상 요소에 position: absolute;를 사용합니다.

가상 요소는 HTML 마크업을 깔끔하게 유지하면서도 풍성한 시각 효과를 줄 수 있는 강력한 도구입니다. 위의 예제들을 프로젝트에 맞게 변형하여 더욱 감각적인 UI를 완성해 보세요.

반응형