[CSS] 가상 요소 vs 가상 클래스

2023. 2. 17. 14:12·Web
반응형

CSS를 사용하다보면 가상 클래스 또는 가상 요소 선택자를 사용한다. 

사용하면서 우리는 두 개가 같은 거라고 생각하며 사용하고 있지만 실제로는 둘은 다른 녀석들이다. 

 

가상 요소 

실제로 존재하지 않는 가상의 요소를 만들어서 스타일을 주는 것을 말한다. 

 

사용할 때 콜론( : )을 사용할 수 있지만 가상 클래스와 구분하기 위해서 이중 클론( :: )을 권장한다. 

 

대표적인 가상 요소들을 나열하자면, 

▶ ::before : 지정된 요소의 앞에 가상의 요소 생성

▶ ::after : 지정된 요소의 뒤에 가상의 요소 생성

▶ ::placeholder : Input 필드의 힌트 텍스트에 스타일을 적용한다. 

▶ ::selection : 사용자에 의해서 선택(드래그)된 텍스트 영역의 속성을 변경한다. 

▶ ::first-letter : 지정된 요소의 첫 번째 글자에 스타일 적용

▶ ::first-line : 지정된 요소의 첫 번째 줄에 스타일 적용 

 

가상 클래스 

실제로 존재하는 요소에 특정 이벤트나 가상으로 클래스를 줘서 CSS를 제어하는 것을 말한다. 

 

만약 가상 클래스가 없는 경우, hover 시 CSS 변경이 필요하다면

자바스크립트를 사용해서 mouseover, mouseout 시 클래스를 주어서 변경해야하는데,

그렇게되면 불필요한 스크립트나 클래스가 들어가게 된다. 

 

하지만 이런 상황에 가상 클래스를 사용한다면 깔끔하게 css 제어가 가능하다. 

 

가상 클래스를 나열하자면, 

▶ :active : 해당 요소를 활성화(클릭) 했을 경우 스타일 부여

▶ :checked : input 태그의 type이 checkbox나 radio일 경우 체크가 되어있다면 스타일 부여

▶ :disabled : 선택, 클릭, 입력 등을 할 수 있는 요소에 비활성화 시 스타일 부여 

▶ :enabled : disabled와 반대로 활성화 시 스타일 부여 

▶ :empty : 자식 요소가 없는 태그에 스타일 부여

▶ :focus : input 태그에 focus를 한 상태일 때 스타일 부여

▶ :hover : 마우스를 올렸을 때 스타일 부여 

▶ :link : 미방문 링크에 스타일 부여

▶ :visited : 이미 방문한 링크에 스타일 부여 

▶ :not : (select)를 제외한 나머지 요소들에게 스타일 부여 

              ex) .main div:not(.header) { font-size: 10px; } 
              main 클래스의 div 태그 중 .header 태그를 제외한 요소에 스타일 부여 

▶ :read-only : input 태그에 readonly 속성을 지정한 요소에 스타일 부여

▶ :required : input 태그에 required 속성을 지정한 요소에 스타일 부여

▶ :fitst-child : 형제 요소 중 첫 번째 자식 요소에 스타일 부여

▶ :first-of-type : 형제 요소 중 해당하는 첫 번째 태그에게 스타일 부여

▶ :last-child : 형제 요소 중 마지막 자식 요소에 스타일 부여

▶ :last-of-type : 형제 요소 중 해당하는 태그의 가장 마지막 요소에 스타일 부여

▶ :nth-child : n 번째 요소에 스타일 적용 

▶ :nth-last-child : 뒤에서 n 번째 요소에 스타일 적용

▶ :only-child : 형제 요소 중 유일하게 있는 요소에 스타일 부여 ( 다른 형제 요소가 있다면 스타일 적용 X

▶ :only-of-type : 형제 요소 중 유일하게 있는 타입에 스타일 부여 

 

여기서 

first-child와 first-of-type와 같은 child와 of-type의 차이점은 

<div className="main">
  <p>test</p>
  <div>test</div>
</div>

.main div:first-child { font-size: 10px } => 적용 X 
.main div:first-of-type { font-size: 10px } => 적용 O

 다음과 같이 child는 요소를 기준으로 나타내고, of-type은 타입( 태그 )를 기준으로 나타낸다. 

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Web' 카테고리의 다른 글

[CSS] 사파리 환경 input 스타일 초기화  (0) 2023.03.13
[HTML] 크롬 & 사파리 Video  (1) 2023.03.12
[CSS] Toggle 버튼  (0) 2023.02.18
[CSS] user-select  (0) 2023.02.15
[CSS] Block VS Inline  (0) 2023.02.14
'Web' 카테고리의 다른 글
  • [HTML] 크롬 & 사파리 Video
  • [CSS] Toggle 버튼
  • [CSS] user-select
  • [CSS] Block VS Inline
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    Babel
    webpack
    redux
    바질
    CCNA
    리액트
    자바스크립트
    네트워크
    바질 키우기
    next.js
    영어회화
    javascript
    ChatGPT
    react
    타입스크립트
    덤프
    CSS
    Docker
    타일러영어
    typescript
    프로그래머스
    네이버 부스트캠프
    다이소
    알고리즘
    리얼클래스
    Node.js
    ReactNative
    리얼학습일기
    영어독학
    식물
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[CSS] 가상 요소 vs 가상 클래스
상단으로

티스토리툴바