Categories: CSS

CSS 가상 클래스와 가상 요소 알아보기

CSS 가상 클래스와 가상 요소란?

CSS 가상 클래스와 가상 요소는 웹 페이지의 스타일링을 더 다양하고 동적으로 만들 수 있는 기능입니다. 마우스 호버, 클릭 등의 상태에 반응하거나, 특정 부분에 스타일을 적용하는 데 사용됩니다.

CSS 가상 클래스와 가상 요소의 속성

가상 클래스 (Pseudo-classes)

가상 클래스는 요소의 특정 상태나 위치를 선택하여 스타일을 적용하는 데 사용됩니다.

  • :hover: 마우스가 요소 위로 이동했을 때 스타일을 적용합니다.
  • :active: 마우스 클릭하고 있는 동안의 상태를 나타냅니다.
  • :focus: 요소가 포커스를 받았을 때의 상태를 나타냅니다.
  • :first-child: 부모 요소의 첫 번째 자식을 선택합니다.
  • :last-child: 부모 요소의 마지막 자식을 선택합니다.
  • :nth-child(n): n번째 자식을 선택합니다.
  • :nth-last-child(n): 뒤에서부터 n번째 자식을 선택합니다.
  • :nth-of-type(n): 특정 유형의 요소 중에서 n번째 요소를 선택합니다.
  • :nth-last-of-type(n): 뒤에서부터 특정 유형의 요소 중에서 n번째 요소를 선택합니다.
  • :only-child: 부모 요소의 유일한 자식을 선택합니다.
  • :only-of-type: 부모 요소 내에서 유일한 특정 유형의 요소를 선택합니다.

가상 요소 (Pseudo-elements)

가상 요소는 요소의 특정 부분에 스타일을 적용하는 데 사용됩니다.

  • ::before: 선택한 요소의 내부 앞에 콘텐츠를 생성합니다.
  • ::after: 선택한 요소의 내부 뒤에 콘텐츠를 생성합니다.
  • ::first-line: 선택한 요소의 첫 번째 줄에 스타일을 적용합니다.
  • ::first-letter: 선택한 요소의 첫 번째 글자에 스타일을 적용합니다.

CSS 가상 클래스와 가상 요소의 예제

가상 클래스와 가상 요소의 예제입니다.

:hover

마우스가 요소 위로 이동했을 때 스타일을 적용합니다.

HTML
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    /* 기본 스타일 */
    .box {
      width: 200px;
      height: 100px;
      background-color: purple;
      color: white;
      text-align: center;
      line-height: 100px;
    }
    /* :hover 상태에서의 스타일 변경 */
    .box:hover {
      background-color: red;
    }
  </style>
  <title>:hover 예제</title>
</head>
<body>
  <div class="box">
    Hover
  </div>
</body>
</html>
HTML

:hover 예제
Hover

마우스를 박스 위에 올리면 스타일이 변경됩니다.

:active

마우스 클릭하고 있는 동안의 상태를 나타냅니다.

HTML
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    /* 기본 스타일 */
    .click-button {
      padding: 10px 20px;
      font-size: 16px;
      background-color: purple;
      color: white;
      border: none;
      cursor: pointer;
    }
    /* :active 상태에서의 스타일 변경 */
    .click-button:active {
      background-color: red;
    }
  </style>
  <title>:active 예제</title>
</head>
<body>
  <button class="click-button">클릭해보세요!</button>
</body>
</html>
HTML

:active 예제

마우스를 클릭하고 있는 동안 스타일이 변경됩니다

:focus

요소가 포커스를 받았을 때의 상태를 나타냅니다.

HTML
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    /* 기본 스타일 */
    .focus-input {
      padding: 10px;
      font-size: 16px;
      border: 2px solid black;
    }
    /* :focus 상태에서의 스타일 변경 */
    .focus-input:focus {
      background-color: violet;
    }
  </style>
  <title>:focus 예제</title>
</head>
<body>
  <label for="username">사용자 이름:</label>
  <input type="text" id="username" class="focus-input" placeholder="사용자 이름을 입력하세요">
</body>
</html>
HTML

input 요소가 포커스를 받았을 때 스타일이 변경됩니다.

::before 와 ::after

::before 는 선택한 요소의 내부 앞에 콘텐츠를 생성합니다.
::after 는 선택한 요소의 내부 뒤에 콘텐츠를 생성합니다.

HTML
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    /* 기본 스타일 */
    .card {
      position: relative;
      width: 300px;
      height: 200px;
      background-color: #f2f2f2;
      border-radius: 10px;
      padding: 20px;
      margin: 20px;
      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
      overflow: hidden;
    }
    /* ::before로 생성 */
    .card::before {
      content: "\2019"; /* 생성할 콘텐츠 설정 - 유니코드로 표현 */
      font-size: 3em;
      color: purple;
      position: absolute;
      top: 10px;
      left: 10px;
    }
    /* ::after로 생성 */
    .card::after {
      content: "INFO"; /* 생성할 콘텐츠 설정 */
      font-size: 1.5em;
      color: purple;
      position: absolute;
      bottom: 10px;
      right: 10px;
    }
  </style>
  <title>::before, ::after 예제</title>
</head>
<body>
  <div class="card">
    이 카드는 ::before와 ::after를 사용하여 시작 부분에 작은 아이콘, 
    끝 부분에 INFO 텍스트를 만드는 예제입니다.
  </div>
</body>
</html>
HTML

::before, ::after 예제
이 카드는 ::before와 ::after를 사용하여 시작 부분에 작은 아이콘, 끝 부분에 INFO 텍스트를 만드는 예제입니다.

::before 와 ::after 를 사용하여 요소의 앞과 뒤에 콘텐츠를 생성했습니다.

결론

가상 클래스와 가상 요소는 웹 디자인에서 상호작용과 스타일링을 풍부하게 만드는 핵심 기능입니다. 마우스의 상태나 특정 위치에 따라 스타일을 적용하거나, 특정 부분에 콘텐츠를 추가하는 데에 사용됩니다.

suover

Recent Posts

그림으로 쉽게 배우는 자료구조와 알고리즘: 미션3 | 문서 압축 (허프만 코딩)

들어가며 소프트웨어가 처리해야 하는 데이터 양이 늘어날수록, 단순히 기능 구현만으로는 성능과 효율을 보장하기 어렵습니다. 특히…

3일 ago

만들면서 쉽게 배우는 컴퓨터 구조: 미션3 | STOREB 명령어와 A·B 비교 구현

들어가며 소프트웨어를 구현할 때 성능 최적화나 안정성을 높이려면, 단순히 고수준 코드만 신경 쓰는 것을 넘어…

4일 ago

그림으로 쉽게 배우는 자료구조와 알고리즘: 미션2 | CPU 스케줄링

들어가며 소프트웨어가 복잡해질수록, 단순히 알고리즘의 시간복잡도만으로는 모든 문제를 해결할 수 없습니다. 특히 운영체제 수준에서는 다중…

2주 ago

만들면서 쉽게 배우는 컴퓨터 구조: 미션2 | 터널 연결부터 32바이트 RAM까지

들어가며 복잡한 소프트웨어가 원활히 동작하려면 단순히 코드만 잘 짜는 것으로는 부족합니다. 트랜잭션 처리나 대규모 데이터…

2주 ago

그림으로 쉽게 배우는 자료구조와 알고리즘: 미션1 | 메모리 검색

들어가며 소프트웨어를 개발할 때 메모리 관리 방식은 프로그램의 안정성과 성능을 좌우하는 핵심 요소입니다. 특히 자바스크립트,…

2주 ago

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

들어가며 소프트웨어 개발자는 코드가 어떻게 실행되는지 정확히 이해해야 할 필요가 있습니다. 우리가 작성한 프로그램은 결국…

3주 ago