Computer >> 컴퓨터 >  >> 프로그래밍 >> CSS

CSS에서 데이터 속성(data-*) 활용하는 방법

HTML의 data-* 속성을 사용하면 표준 속성 외에 요소에 추가적인 사용자 정의 정보를 저장할 수 있습니다. 이렇게 저장한 데이터는 CSS와 JavaScript에서 자유롭게 활용할 수 있어 실무에서 매우 유용하게 쓰입니다. 아래 예제들을 통해 CSS에서 data-* 속성을 사용하는 다양한 방법을 살펴보겠습니다.

예제 1: JavaScript와 함께 data-* 속성 활용하기

다음 예제에서는 음식 항목에 마우스를 올리면(hover), 해당 요소의 data-food-type 속성 값을 JavaScript로 읽어와 하단의 설명 문구를 동적으로 변경합니다.

<!DOCTYPE html>
<html>
<head>
<style>
dl {
   margin: 2%;
}
p {
   width: 60%;
   background-color: lightgreen;
   padding: 2%;
   color: white;
   text-align: center;
}
dt {
   font-weight: bold;
}
dt:hover {
   cursor: pointer;
}
dd {
   font-style: italic;
}
</style>
</head>
<body>
<dl>
<dt onmouseover="showDescription(this)" data-food-type="beverages">Tea</dt>
<dd>Hot Spicy Tea or Ice Lemon Tea </dd>
<dt onmouseover="showDescription(this)" data-food-type="snacks">Toast</dt>
<dd>Hot Garlic Butter Toast</dd>
</dl>
<p>(hover over food item)</p>
</body>
<script>
function showDescription(food) {
   let foodType = food.getAttribute("data-food-type");
   document.querySelector('p').textContent = ("We have " + food.innerHTML + " in " + foodType + ".");
}
</script>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

CSS에서 데이터 속성(data-*) 활용하는 방법

예제 2: CSS 선택자와 attr() 함수로 data-* 속성 활용하기

이번 예제에서는 CSS 속성 선택자인 [data-number='77']를 사용해 특정 데이터 값을 가진 요소에만 별도의 스타일을 적용합니다. 또한 ::before::after 가상 요소에 attr() 함수를 사용하여 data-userdata-number 속성의 값을 화면에 직접 표시하는 방법을 보여줍니다.

<!DOCTYPE html>
<html>
<head>
<style>
section {
   margin: 8%;
   box-shadow: inset 0 0 20px red;
   width: 300px;
   padding: 2%;
}
section[data-number='77'] {
   height: 120px;
   border-radius: 15px;
}
section::before {
   content: attr(data-user);
   font-size: 1.2em;
}
section::after {
   content: attr(data-number);
}
</style>
</head>
<body>
<section data-number="77" data-user="Client">
<p>Demo Text</p>
</section>
</body>
</html>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

CSS에서 데이터 속성(data-*) 활용하는 방법

정리

data-* 속성은 HTML 요소에 의미 있는 사용자 정의 데이터를 부여할 수 있는 강력한 기능입니다. JavaScript에서는 getAttribute()dataset 객체로 값을 읽을 수 있고, CSS에서는 속성 선택자로 조건부 스타일링을 하거나 attr() 함수를 통해 가상 요소의 content로 값을 출력할 수 있습니다. 두 가지 접근 방식을 적절히 조합하면 마크업을 깔끔하게 유지하면서도 동적이고 유연한 웹 페이지를 구현할 수 있습니다.