[CSS] CSS 가상요소 선택자(::before, ::after)

2025. 1. 15. 15:36·HTML,CSS,JS
목차
  1. 📌 가상요소 선택자(Pseudo Selectors)란?
  2. 📌 왜 사용하는건데?
  3. 📌 HTML 컨텐츠 변경(::before, ::after)
  4. ‼️ ::after와 ::before의 특징
  5. 📌 가상요소를 활용한 예시
  6. 1️⃣ 가상요소로 동적 컨텐츠 표시하기
  7. 2️⃣ 가상요소로 목록에 순서달기
  8. 3️⃣ 가상요소로 FNB에 구분선 추가하기
  9. 📌 나머지 가상요소 4가지(컨텐츠 특정 영역 선택하는데 사용)

📌 가상요소 선택자(Pseudo Selectors)란?

html에서 코드를 만들지 않고, css에서 스타일로만 요소를 추가하거나 제어할 때 사용하는 선택자이다.

즉, html 문서에는 실제로 존재하지 않지만 실제 동작화면에는 존재하게 되는 것이다.

 

가상요소는 콜론(:)을 2개 연달아 표기해서 가상요소임을 나타낸다.

콜론을 하나만 써도 적용이 되긴하지만, 가상요소임을 명확하게 구분하기 위해 콜론 2개를 붙이는 것을 권장한다.

선택자::가상요소 {
	속성: 속성 값;
}

위와 같은 형태로 작성한다.


📌 왜 사용하는건데?

실제 HTML을 조작하지 않기 때문에 HTML 구조에 영향을 미치지 않고 컨텐츠를 삽입할 수 있다.

또한 의미는 없지만 어떤 장식을 추가하고 싶을 때, 굳이 div 태그를 추가하지 않고 만들 수 있다.

어떤 의미있는 컨텐츠를 표현하기 보다는 디자인에 많이 사용된다.


📌 HTML 컨텐츠 변경(::before, ::after)

가상요소 선택자 중, ::before와 ::after는 가장 흔히 쓰인다.

속성으로는 content 값이 필수이다.

content의 값으로는 텍스트 뿐만 아니라 이미지, HTML 속성 등이 들어갈 수 있다.

귀여운 이모지도 가능하다(🐶🤍)

p::after {
    content: "🐶";
}

p::before {
	content: "😻";
}

p::after {
	content : url('이미지 url');	// 이미지
}

 

작성한 content의 값이 위와 같이 화면에 출력된다.

::before는 선택한 요소의 앞에 가상요소가 추가되고, ::after는 선택한 요소의 뒤에 가상요소가 추가된다.

 

‼️ ::after와 ::before의 특징

  • inline 요소이므로 width, height를 가지지 않는다.
    width와 height를 지정해주고 싶다면 inline-block이나 block으로 변경하면 된다.
  • content 속성을 필수로 가진다.
  • 실제 HTML 구조에는 포함되지 않기 때문에, 웹 접근성을 방해할 수 있다.
  • 가상요소이기 때문에, 실제 요소에 적용되는 포인터 이벤트가 적용되지 않는다.
    ex) 클릭, hover, active, focus, 드래그 ..
  • 빈태그에는 적용할 수 없다.(img, br, input)

📌 가상요소를 활용한 예시

1️⃣ 가상요소로 동적 컨텐츠 표시하기

attr() 함수를 이용해서 content 속성에 HTML 태그의 속성 값을 가져올 수 있다.

<style>
   p::before {
    content: attr(data-name) "의 블로그입니당🐶";
  }
</style>

<body>
	<p data-name="heedonguri"></p>
</body>

실제 data가 적용된 것을 확인할 수 있다!

 

2️⃣ 가상요소로 목록에 순서달기

counter-reset() 함수로 카운터를 초기화하고, content의 값으로 counter의 값을 넘겨줄 수 있다.

counter-increment 속성을 사용하면 항목이 증가하면서, 카운터 값도 증가한다.

 <style>
      ol {
        counter-reset: list-counter;	// 카운터 초기화
        list-style: none;
      }
      li::before {
        content: counter(list-counter) " : ";	// 컨텐츠 값에 카운터 넣기
      }
      ol li {
        counter-increment: list-counter;	// 카운터 값 자동 증가
      }
</style>
    
<body>
    <ol>
      <li>첫번째</li>
      <li>두번째</li>
      <li>세번째</li>
    </ol>
  </body>

적용된 것을 확인할 수 있다!

3️⃣ 가상요소로 FNB에 구분선 추가하기

카카오 로그인 페이지를 만들면서 위와 같은 FNB를 만들어야 했다.

span 태그를 각 사이에 넣고 width와 height를 지정해서 만들었다.

하지만 카카오에서 만든 페이지를 자세히 살펴보면 ::before을 사용한 것을 볼 수 있다.

 

span으로 만든 코드

 footer > span {
        width: 1px;
        height: 14px;
        padding: 0;
        background-color: rgba(0, 0, 0, 0.14);
  }

 

위의 코드를 ::before로 변경

  footer > div:not(:first-of-type)::before {
    content: "|";
    color: rgba(0, 0, 0, 0.14);
    padding-right: 12px;
  }

깔끔하게 잘 나오는 것을 확인할 수 있다!


📌 나머지 가상요소 4가지(컨텐츠 특정 영역 선택하는데 사용)

  • ::selection - 마우스 드래그로 선택한 텍스트 컨텐츠 영역 선택
  • ::marker - 목록 아이템 앞에 붙는 마커 선택
  • ::first-letter - 현재 화면에 보이는 상태를 기준으로 요소의 텍스트 컨텐츠 첫 글자 선택
  • ::first-line - 현재 화면에 보이는 상태를 기준으로 요소의 텍스트 컨텐츠 첫 줄 선택

'HTML,CSS,JS' 카테고리의 다른 글

[JS]JSON.stringify, JSON.parse  (0) 2025.01.23
[JS] let, var, const(+호이스팅, TDZ...)  (0) 2025.01.17
[JS] Map, Set(객체? 배열?)  (0) 2024.12.08
[CSS] RequestAnimationFrame  (0) 2024.10.08
[JS] Array와 Array 메소드  (0) 2024.08.26
  1. 📌 가상요소 선택자(Pseudo Selectors)란?
  2. 📌 왜 사용하는건데?
  3. 📌 HTML 컨텐츠 변경(::before, ::after)
  4. ‼️ ::after와 ::before의 특징
  5. 📌 가상요소를 활용한 예시
  6. 1️⃣ 가상요소로 동적 컨텐츠 표시하기
  7. 2️⃣ 가상요소로 목록에 순서달기
  8. 3️⃣ 가상요소로 FNB에 구분선 추가하기
  9. 📌 나머지 가상요소 4가지(컨텐츠 특정 영역 선택하는데 사용)
'HTML,CSS,JS' 카테고리의 다른 글
  • [JS]JSON.stringify, JSON.parse
  • [JS] let, var, const(+호이스팅, TDZ...)
  • [JS] Map, Set(객체? 배열?)
  • [CSS] RequestAnimationFrame
>동구리<
>동구리<
  • >동구리<
    데굴데굴 굴러가는 히동구리
    >동구리<
  • 전체
    오늘
    어제
    • 분류 전체보기
      • WEB
      • HTML,CSS,JS
      • React
      • 개발
      • Git
      • 이것저것
      • Algorithm
        • Programmers
        • Study
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리액트 #React #생명주기 #Lifecycle #훅 #Hook
    border vs outline
    이벤트 전파
    adaptive jitc
    ouline
    JITC
    http1
    js 동작원리
    배열 생성
    리액트 #React #아토믹디자인 #아토믹디자인패턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
>동구리<
[CSS] CSS 가상요소 선택자(::before, ::after)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.