Language/JavaScript (WEB)

🌐 html의 data-속성 μ‚¬μš©λ²• μ™„λ²½ κ°€μ΄λ“œ

인파_ 2023. 3. 3. 09:52

js-dataset

HTML 데이터셋 속성

HTML의 데이터셋 속성은 μ»€μŠ€ν…€ μ‚¬μš©μž 속성을 DOM μš”μ†Œμ— μ €μž₯ν•˜λŠ”λ° ν‘œμ€€ν™”λœ 방법을 μ œκ³΅ν•œλ‹€. ν•œλ§ˆλ””λ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ“―μ΄, μΌμ’…μ˜ html의 λ³€μˆ˜ 역할이라고 말할 수 μžˆλ‹€.

 

데이터셋 μ†μ„±μ˜ μž₯점

 

일반 속성 κ³Ό 데이터셋 속성

데이터셋도 μΌμ’…μ˜ 속성(attribute)이닀. 보톡 htmlμ—μ„œ 속성이라 ν•˜λŠ” 것은 μ—¬λŸ¬λΆ„λ„ 잘 μ•Œλ“―μ΄ id, class, src, title λ“±μ˜ νƒœκ·Έμ— λΆ™μ΄λŠ” μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό λ§ν•œλ‹€. 이듀 속성은 νŠΉμ • νƒœκ·Έμ˜ μ†ŒμŠ€ κ²½λ‘œλ‚˜ 이름, λ„ˆλΉ„, 아이디λ₯Ό κΈ°μž¬ν•˜λŠ”λ° μ •ν•΄μ Έ μžˆλ‹€.

js-dataset

그런데 html νƒœκ·Έμ— κ·Έ μ—˜λ¦¬λ¨ΌνŠΈλ§Œμ΄ μ§€λ‹ˆκ³  μžˆλŠ” κ³ μœ ν•œ μ»€μŠ€ν…€ 값을 지정해 μ‚¬μš©ν•˜κ³  싢을 λ•Œκ°€ μžˆλ‹€. 마치 μ•„λž˜ μ½”λ“œ 처럼 input νƒœκ·Έμ˜ value μ†μ„±μœΌλ‘œ 값을 κΈ°μž¬ν•΄μ£Όλ©΄, μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³„λ„λ‘œ λ³€μˆ˜λ₯Ό λ§Œλ“€μ–΄ 이 λ³€μˆ˜λŠ” μ–΄λŠ μ—˜λ¦¬λ¨ΌνŠΈμ˜ 값을 ν‘œν˜„ν•œλ‹€λŠ” 맀칭 μ‹œν‚€λŠ” μž‘μ—…μ„ 쀄일 수 μžˆμ–΄ 직관성과 생산성이 ν–₯상 되기 λ•Œλ¬Έμ΄λ‹€.

<input type="radio" name="gender" value="male">
<input type="radio" name="gender" value="female">

μ‹€μ œλ‘œ 데이터 속성이 λ‚˜μ˜€κΈ° μ΄μ „μ—λŠ”, 만일 html 상에 μ–΄λ– ν•œ κ³ μœ ν•œ 값을 μ €μž₯ν•  ν•„μš”κ°€ μžˆλ‹€λ©΄ λ‹€μŒκ³Ό 같이 hidden 으둜 νƒœκ·Έλ₯Ό λ¬Έμ„œλ‘œλΆ€ν„° 감좔고 value μ†μ„±μœΌλ‘œ 값을 μ €μž₯ν•˜λŠ” μš©λ„λ‘œμ¨ 쓰이기도 ν•˜μ˜€λ‹€.

js-dataset

<!-- hidden νƒ€μž…μœΌλ‘œ νƒœκ·Έλ₯Ό λ¬Έμ„œμ—μ„œ 가리고, 
CountryλΌλŠ” μ΄λ¦„μœΌλ‘œ Norway 값을 λ¬Έμ„œμ— μ €μž₯ν•˜κ³  κΊΌλ‚΄ μ“Έλ•Œ 자주 μ• μš©λ˜μ—ˆλ˜ 방식이닀 -->
<input type="hidden" name="Country" value="Norway"> <!-- let Contry = "Norway" -->

ν•˜μ§€λ§Œ value 속성은 아무 μ—˜λ¦¬λ¨ΌνŠΈμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 속성이 μ•„λ‹ˆλ‹€. (μ‚¬μš©μ€ κ°€λŠ₯ν•˜μ§€λ§Œ HTML ν‘œμ€€μ— μœ„λ°°λœλ‹€)

κ·Έλž˜μ„œ 만일 input νƒœκ·Έ 외에 μ‹œλ§¨ν‹± νƒœκ·Έλ‚˜ div νƒœκ·Έμ—λ„ λ³„λ„μ˜ νƒœκ·Έμ˜ 고유 값을 μ €μž₯ν•˜κ³  μ‹Άμ„λ•ŒλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³΅μž‘ν•˜κ²Œ μš°νšŒν•˜μ—¬μ•Ό ν–ˆλ‹€.

 

κ·ΈλŸ¬λ‚˜ 데이터셋은 νƒœκ·Έ 내에 data- 둜 μ‹œμž‘ν•˜λŠ” ν‚€μ›Œλ“œλ₯Ό κΈ°μž¬ν•˜κ³  κ·Έ 뒀에 ν•˜μ΄ν”ˆ(-)이 μ‘°ν•©λœ ν˜•νƒœλ‘œ κ°œλ°œμžκ°€ μ •μ˜ν•˜κ³  싢은 속성λͺ…을 κΈ°μž¬ν•΄μ£Όκ³  속성값을 써주면 μ‚¬μš©μž λ³€μˆ˜κ°€ μ™„μ„±λœλ‹€.

<input type="text" data-country="Norway" data-code="c03" name="Country">

데이터 속성을 μ“°λ©΄ 훨씬 μŠ€ν¬λ¦½νŠΈκ°€ 간결해지며 λ˜ν•œ ν•˜λ‚˜μ˜ μš”μ†Œμ—λŠ” μ—¬λŸ¬ 데이터 속성을 λ™μ‹œμ— μ‚¬μš©ν•  μˆ˜λ„ μžˆμ–΄ ν™•μž₯성이 λ†’λ‹€.

 

데이터셋 μ‚¬μš© 사둀

μ•žμ„œ λ§ν–ˆλ“― 데이터셋을 μ΄μš©ν•΄λ„ 되고 μ•ˆν•΄λ„ λœλ‹€. λ‹€λ§Œ μ•„λž˜μ™€ 같이 'μ’‹μ•„μš” 갯수 λ²„νŠΌ'을 ν‘œμ‹œν•˜λŠ” μš”μ†Œλ₯Ό λ§Œλ“€ 경우, 이 μ’‹μ•„μš” 갯수λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 가지고 μžˆλŠ” 것보닀 μ΄λ ‡κ²Œ 직접 λ²„νŠΌ μš”μ†Œμ— κ°―μˆ˜κ°’μ„ 인라인으둜 직접 ν‘œν˜„ν•¨μœΌλ‘œμ¨ 보닀 μ§κ΄€μ μ΄κ²Œ λœλ‹€.

<button data-id="341">μ’‹μ•„μš”β™‘</button>

 

데이터셋에 λ°°μ—΄, 객체 데이터 μ €μž₯

μ’€ 더 κΈ°λŠ₯을 μ‘μš©ν•˜μ—¬, 데이터 μ†μ„±μ—λŠ” λ‹¨μˆœ λ¬Έμžμ—΄μ„ λ„˜μ–΄ 객체와 배열도 μ €μž₯이 κ°€λŠ₯ν•˜λ‹€. μ •ν™•νžˆ λ§ν•˜μžλ©΄ μ›λž˜λŠ” λ¬Έμžμ—΄λ§Œ μ €μž₯이 κ°€λŠ₯ν•˜μ§€λ§Œ, 객체 ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄κ³Ό λ°°μ—΄ ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄μ„ λ…Έλ“œμ— μ§€μ •ν•˜κ³  이λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³„λ„μ˜ νŒŒμ‹± μž‘μ—…μ„ 톡해 μ‚¬μš©ν•¨μœΌλ‘œμ¨, 마치 html μ—˜λ¦¬λ¨ΌνŠΈμ— 인라인으둜 객체 데이터λ₯Ό κΈ°μž¬ν•  수 μžˆλ‹€λŠ” μ‘μš© 방법이 μžˆλ‹€κ³  보면 λœλ‹€. (μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ νŒŒμ‹±ν•˜λŠ” 방법은 λ°”λ‘œ λ’€μ—μ„œ 닀룬닀)

<!-- 객체 ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄ 데이터셋 -->
<div data-person='{"name": "Chris Coyier", "job": "Web Person"}'></div>

<!-- λ°°μ—΄ ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄ 데이터셋 -->
<div data-fruit='["apple", "banana", "melon"]'></div>

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 데이터셋 닀루기

 

JavaScript 데이터셋 μ‚¬μš©λ²•

 

데이터셋 μ ‘κ·Όν•˜κΈ°

html에 λ‹€μŒκ³Ό 같은 데이터셋 속성을 가진 div μ—˜λ¦¬λ¨ΌνŠΈκ°€ μžˆλ‹€κ³  ν•˜μž.

<div id="post" data-columns="3" data-title="javascript" data-index-number="123">
  ...
</div >

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 이 μš”μ†Œμ˜ 데이터 속성에 μ ‘κ·Όν•˜μ—¬ 값을 읽어듀일 수 있고 μž¬λ³€κ²½λ„ κ°€λŠ₯ν•˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 데이터 속성에 μ ‘κ·Όν•˜λŠ” λŒ€ν‘œμ μΈ 방법은 λ‹€μŒ 두가지가 μžˆλ‹€.

  1. dataset ν”„λ‘œνΌν‹°λ‘œ μ ‘κ·Ό
  2. 일반적인 속성 μ ‘κ·Ό λ©”μ„œλ“œ getAttribute() μ‚¬μš©
const $div = document.getElementById('post');
 
// 일반적인 객체 속성 μ ‘κ·Ό
$div.dataset.columns // "3"

// λ°°μ—΄ 인덱슀둜 μ ‘κ·Ό
$div.dataset['title'] // "javascript"

// data-index-numberμ—μ„œ dataset.indexNumber둜 λ³€ν™˜
$div.dataset.indexNumber // "12314"
const $div = document.getElementById('post');
 
$div.getAttribute('data-columns') // "3"

$div.getAttribute('data-title') // "javascript"

$div.getAttribute('data-index-number') // "12314"

λ‘˜μ€‘ μ–΄λŠ λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•˜λ“  νŽΈν•œ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. λ‹€λ§Œ 만일 IE 와 같은 데이터셋 미지원 λΈŒλΌμš°μ €μ—μ„œλŠ” getAttribute()λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

μ΄λ•Œ dataset ν”„λ‘œνΌν‹°λ‘œ μ ‘κ·Όν•  경우 속성 이름이 μžλ™μœΌλ‘œ 낙타 ν‘œκΈ°λ²•(Camel-Case) 으둜 λ³€ν™˜λœλ‹€λŠ” 점은 μœ μ˜ν•΄μ•Ό ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λͺ…μœΌλ‘œ - κΈ°ν˜Έκ°€ ν—ˆμš©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€. κ·Έλž˜μ„œ data-index-number μ—μ„œ dataset.indexNumber둜 λ³€ν™˜λ˜κ²Œ λœλ‹€.

 

데이터셋 μΆ”κ°€ / λ³€κ²½ ν•˜κΈ°

μ—­μ‹œλ‚˜ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 데이터 속성을 μΆ”κ°€ν•˜κ±°λ‚˜ 값을 λ³€κ²½ν•˜λŠ” λŒ€ν‘œμ μΈ 방법은 λ‹€μŒ 두가지가 μžˆλ‹€.

  1. dataset ν”„λ‘œνΌν‹°λ‘œ μ ‘κ·Όν•΄ μΆ”κ°€/λ³€κ²½
  2. 일반적인 속성 λ³€κ²½ λ©”μ„œλ“œ setAttribute() μ‚¬μš©
const $div = document.getElementById('post');
 
$div.dataset.comments = '10';

$div.dataset.countryLangInfo = 'ko';
// data-country-lang-info 둜 μ €μž₯
const $div = document.getElementById('post');
 
$div.setAttribute('data-comments', '10')

$div.setAttribute('data-country-lang-info', 'ko')
<div id="post" 
    data-columns="3" 
    data-title="javascript" 
    data-index-number="123" 
    
    data-comments="10"
    data-country-lang-info="ko"
>
  ...
</div>

 

데이터셋 μ‚­μ œ ν•˜κΈ°

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 데이터 속성을 μ œκ±°ν•˜λŠ” λŒ€ν‘œμ μΈ 방법은 λ‹€μŒ 두가지가 μžˆλ‹€.

  1. delete ν‚€μ›Œλ“œλ‘œ 객체 속성 μ‚­μ œ
  2. 일반적인 속성 제거 λ©”μ„œλ“œ removeAttribute() μ‚¬μš©
const $div = document.getElementById('post');

delete $div.dataset.title; // delete ν‚€μ›Œλ“œλ‘œ 객체 속성 μ‚­μ œ

$div.removeAttribute('data-comments');

 

데이터셋 리슀트 좜λ ₯

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” DOM 생성 μ‹œμ μ— data- λ‘œ μ‹œμž‘ν•˜λŠ” 속성듀을 ν•˜λ‚˜λ‘œ λͺ¨μ•„ dataset 맡(Map)을 λ§Œλ“€μ–΄ κ΄€λ¦¬ν•œλ‹€. μœ„μ²˜λŸΌ 데이터셋 속성을 ν•˜λ‚˜μ”© 좜λ ₯ν•΄ 확인할 μˆ˜λ„ μžˆμ§€λ§Œ, .dataset ν”„λ‘œνΌν‹° 자체λ₯Ό μ ‘κ·Όν•˜λ©΄ μ•„λž˜ 처럼 데이터셋 κ΄€λ ¨ λͺ¨λ“  속성 리슀트 좜λ ₯이 κ°€λŠ₯ν•˜λ‹€.

console.log($div.dataset)

dataset

 

νŠΉμ • 데이터셋을 κ°€μ§€λŠ” λ…Έλ“œ κ°€μ Έμ˜€κΈ°

querySelector둜 νŠΉμ •ν•œ 데이터셋을 가지고 μžˆλŠ” μš”μ†Œλ₯Ό κ°€μ Έμ˜€λ €λ©΄, 속성 μ„ νƒμž 문법과 ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

document.querySelector('div[data-title="javascript" ]');

document.querySelectorAll('div[data-comments="10"]');

JSON 데이터셋 닀루기

ν¬μŠ€νŒ… μ΄ˆλ°˜μ— 잠깐 μ†Œκ°œν•œ λ°μ΄ν„°μ…‹μœΌλ‘œ λ°°μ—΄, 객체 ν˜•νƒœμ˜ λ¬Έμžμ—΄μ„ μ €μž₯ν•˜μ—¬ 이λ₯Ό λ‚˜μ€‘μ— μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ νŒŒμ‹±ν•˜μ—¬ μ‚¬μš©ν•œλ‹€κ³  λ§ν•œ λ°” μžˆλ‹€. 방법은 μ „ν˜€ 어렡지 μ•Šμ€λ° μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ JSON 객체의 λ©”μ„œλ“œλ₯Ό 톡해 κ°„λ‹¨ν•˜κ²Œ λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„  λ°°μ—΄κ³Ό 객체 λͺ¨λ‘ Object둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έμ— μ΄λŸ°μ‹μœΌλ‘œ μ‘μš©μ΄ κ°€λŠ₯ν•œ 것이닀.

 

JSON 데이터셋 읽기

<!-- 객체 ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄ 데이터셋 -->
<div id='person' data-person='{"name": "Chris Coyier", "job": "Web Person"}'></div>

<!-- λ°°μ—΄ ν˜•νƒœλ‘œ 된 λ¬Έμžμ—΄ 데이터셋 -->
<div id='fruit' data-fruit='["apple", "banana", "melon"]'></div>
/* 데이터셋 λ¬Έμžμ—΄ 객체λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈ 객체둜 λ³€ν™˜ */
const $div1 = document.querySelector('#person');
const obj = $div1.dataset.person; // 데이터셋 κ°€μ Έμ˜€κΈ°
const people = JSON.parse(obj); // μžλ°”μŠ€ν¬λ¦½νŠΈ object둜 λ³€ν™˜

console.log(people.name); // Chris Coyier
console.log(people.job); // Web Person
/* 데이터셋 λ¬Έμžμ—΄ 배열을 μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄λ‘œ λ³€ν™˜ */
const $div2 = document.querySelector('#fruit');
const arr = $div2.dataset.fruit; // 데이터셋 κ°€μ Έμ˜€κΈ°
const fruits = JSON.parse(arr);

console.log(fruits); // ['apple', 'banana', 'melon']

 

JSON 데이터셋 μ“°κΈ°

// html λ…Έλ“œμ— μΆ”κ°€ν•˜κ³  싢은 객체 데이터 (배열도 κ°€λŠ₯)
const info = {
  id: "slider", 
  min: 3,
  max: 50
};

// μžλ°”μŠ€ν¬λ¦½νŠΈ 객체λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜
const str = JSON.stringify(info);

// 데이터셋에 μ“°κΈ°
$div1.dataset.info = str;

// or
$div1.setAttribute('data-info', str);
<div id='person' 
    data-person='{"name": "Chris Coyier", "job": "Web Person"}'
    data-info='{"id":"slider","min":3,"max":50}'
>
</div>

JQuery 데이터셋 μ‚¬μš©λ²•

μ œμ΄μΏΌλ¦¬μ—μ„œλŠ” μ’€ 더 νŽΈν•œ 데이터셋 μ „μš© λ©”μ†Œλ“œ data() λ₯Ό μ œκ³΅ν•œλ‹€.

 

데이터셋 μ €μž₯

$('div').data(key) // 데이터 읽기
<span data-member-name='인파'>이름</span>

<script>
    $("#span").data("memberName");

    $("#span").attr("data-member-name"); // 일반 속성 λ©”μ„œλ“œλ‘œλ„ κ°€μ Έμ˜¬ 수 μžˆλ‹€
</script>

만일 keyλ₯Ό μƒλž΅ν•˜κ³  .data()으둜 ν˜ΈμΆœν•  κ²½μš°μ—λŠ” ν•΄λ‹Ή μ—˜λ¦¬λ¨ΌνŠΈμ— μ €μž₯된 λͺ¨λ“  data듀이 JSONν˜•μ‹μœΌλ‘œ λ¦¬ν„΄λœλ‹€.

 

데이터셋 μΆ”κ°€ / λ³€κ²½ ν•˜κΈ°

$('div').data(key, value) // 데이터 μ €μž₯

 

데이터셋 μ‚­μ œ ν•˜κΈ°

$('div').removeData(key)

데이터셋을 μ‚¬μš©ν•˜λŠ” 라이브러리

μ΄λŸ¬ν•œ 데이터셋은 μ‚¬μš©μžκ°€ νŠΉμ • λ…Έλ“œμ— 라이브러리의 효과λ₯Ό μ μš©ν•˜λŠ”λ° μžˆμ–΄ 정말 κ°„νŽΈν•˜κ²Œ μ„€μ •ν•˜λ„λ‘ 도와쀀닀. λŒ€ν‘œμ μΈ 라이브러리둜 슀크둀 μ›€μ§μž„μ— 따라 κ°œμ²΄μ— μ›€μ§μž„μ„ μ£ΌλŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ μ£ΌλŠ” AOS 라이브러리λ₯Ό λ“€ 수 μžˆλŠ”λ°, μ‚¬μš©λ²•μ„ 보면, μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μ£Όκ³  싢은 νƒœκ·Έμ— data-aos κ΄€λ ¨ 데이터 속성을 κΈ°μž¬ν•˜κΈ°λ§Œ ν•˜κ³  μ†ŒμŠ€λ₯Ό 뢈러였면 μ•Œμ•„μ„œ 적용이 되게 λœλ‹€.

<html>
<head>
    <!-- AOS 라이브러리 뢈러였기-->
    <link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css"> 
    <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> 
</head>

<body>
    <!-- data-aos-* 속성을 νƒœκ·Έμ—λ‹€κ°€ 써주면 μ•Œμ•„μ„œ λ™μž‘λ˜κ²Œ λœλ‹€ -->
    <div data-aos="fade-up" 
         data-aos-offset="200" 
         data-aos-easing="ease-out-cubic"
         data-aos-duration="2000" 
     >
    </div>

    <!-- AOS 슀크립트 μ‹œμž‘ -->
    <script> 
        AOS.init(); // μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ init()을 ν•΄μ•Ό λ™μž‘ν•œλ‹€.
    </script>
</body>
</html>
 

[AOS] πŸ“š 슀크둀 μ• λ‹ˆλ©”μ΄μ…˜ μ‚¬μš©λ²• - Animate On Scroll

AOS.js (Animate On Scroll) 기본적으둜 슀크둀 μ›€μ§μž„μ— 따라 κ°œμ²΄μ— μ›€μ§μž„μ„ μ£ΌλŠ” μ• λ‹ˆλ©”μ΄μ…˜μ˜ 경우, AOS 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ 쀄 수 μžˆλ‹€. AOS λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 깊

inpa.tistory.com


CSS둜 데이터셋 닀루기

데이터셋 μ—­μ‹œ html 속성 쀑 ν•˜λ‚˜μ΄κΈ° λ•Œλ¬Έμ— 속성 μ„ νƒμžλ₯Ό 톡해 CSSμ—μ„œλ„ μ ‘κ·Όν•˜μ—¬ μŠ€νƒ€μΌλ§μ„ 지정할 수 μžˆλ‹€.

<div class="card" data-foo="bar">content</div>
div.card[data-foo="bar"] { 
	color: red;
}

css-dataset

 

CSS 데이터셋 ν™œμš© 사둀

 

데이터셋 μ„ νƒμžλ‘œ 클래슀 μ§€μ •μžλ₯Ό μ ˆμ•½

μ΄λŸ°μ‹μœΌλ‘œ 데이터셋 μ†μ„±μœΌλ‘œ CSS μ ‘κ·Όμžλ‘œ μ΄μš©ν•˜λ©΄ 슀크립트λ₯Ό ν•Έλ“€λ§ν•˜κΈ° μœ„ν•΄μ„œ 의미 μ—†λŠ” classλ‚˜ id μ‚¬μš©μ„ μžκ²Œν•˜κ²Œ 되고, 클래슀 μ§€μ •μžκ°€ 많이 μ‚¬μš©λœ 경우 데이터셋 속성을 μ€€ μš”μ†Œλ§Œ λ³„λ„λ‘œ μŠ€νƒ€μΌ μš”μ†Œλ₯Ό μ μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

예λ₯Όλ“€μ–΄ λ‹€μŒκ³Ό 같이 λ˜‘κ°™μ€ div μ—˜λ¦¬λ¨ΌνŠΈμ— λŒ€ν•΄μ„œ λ‹€λ₯Έ 배경색을 μ§€μ •ν•˜κ³  μ‹Άλ‹€λ©΄ 각 divλ§ˆλ‹€ λ‹€λ₯Έ 클래슀 μ§€μ •μžλ₯Ό μ€„μˆ˜λ„ μžˆμ§€λ§Œ, μ•„λž˜μ²˜λŸΌ 데이터 μ†μ„±μœΌλ‘œ μ§κ΄€μ μœΌλ‘œ μ‹¬ν”Œν•˜κ²Œ ꡬ성이 κ°€λŠ₯ν•œ 것이닀.

<div data-columns="1"></div>
<div data-columns="2"></div>
<div data-columns="3"></div>
/* 곡톡 지정 */
div[data-columns] {
    height: 100px;
    padding: 1rem;
    margin: 0 0 1rem 0;
}

/* κ°œλ³„ 지정 */
div[data-columns="1"] {
	background: #64B5F6;
}

div[data-columns="2"] {
	background: #9CCC65;
}

div[data-columns="3"] {
	background: #FFB74D;
}

 

데이터셋 μ‹œκ°μ μΈ μ‚¬μš©

css의 attr() ν•¨μˆ˜λ₯Ό 톡해 ν•΄λ‹Ή μš”μ†Œμ˜ 속성을 κ°€μ Έμ˜¬ 수 있느데 데이터셋 속성도 μ˜ˆμ™Έκ°€ μ•„λ‹ˆλ‹€.

μ•„λž˜ μ˜ˆμ œλŠ” μ˜μ‚¬ μš”μ†Œ μ„ νƒμžμ˜ content μ†μ„±μ˜ κ°’μœΌλ‘œ μ—˜λ¦¬λ¨ΌνŠΈμ˜ 데이터셋 속성값을 맡핑해 μ§€μ •ν•΄μ£ΌλŠ” μ˜ˆμ‹œμ΄λ‹€. μ΄λŸ°μ‹μœΌλ‘œ 맡핑을 ν•˜κ²Œλ˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ 데이터셋 μ†μ„±κ°’λ§Œ λ³€κ²½μ‹œν‚€λ©΄ 컨텐츠 λ‚΄μš©λ„ λ™μ μœΌλ‘œ λ³€κ²½ν•˜λŠ” 효과λ₯Ό λˆ„λ¦΄ 수 μžˆλ‹€.

<div class="contents" data-start-date="2022-12-26" data-end-date="2023-02-28"></div>
.contents:before {
    /* div.contents μ—˜λ¦¬λ¨ΌνŠΈμ˜ data-content 속성을 가져와 ν‘œμ‹œ */
    content: "이벀트 기간은 " attr(data-start-date) "일뢀터 " attr(data-end-date) "κΉŒμ§€μž…λ‹ˆλ‹€.";
}

See the Pen css dataset attr by barzz12 (@inpaSkyrim) on CodePen.

 

데이터셋 λŒ€μ†Œλ¬Έμž κ΅¬λΆ„ν•˜μ§€ μ•ŠκΈ°

만일 λ‹€μŒκ³Ό 같이 같은 λ‹¨μ–΄μ΄μ§€λ§Œ λŒ€μ†Œλ¬Έμžκ°€ λ‹€λ₯Έ 값인 λ…Έλ“œλ“€μ„ λͺ¨λ‘ μ„ νƒν•˜κ³  μ‹Άλ‹€λ©΄ λŒ€κ΄„ν˜Έ 끝에 i 기호λ₯Ό 써주면 λœλ‹€.

<div data-state="open"></div>
<div data-state="Open"></div>
<div data-state="OPEN"></div>
<div data-state="oPeN"></div>
[data-state="open" i] { 
}

데이터셋 μ‚¬μš© μ£Όμ˜μ‚¬ν•­

 

μ μ ˆν•œ κΈ°μ‘΄ νŠΉμ„±μ΄λ‚˜ μš”μ†Œλ₯Ό λŒ€μ²΄ν•˜λŠ” 데 μ‚¬μš© X

데이터셋은 자유둜운 html 속성이라 μ œμ•½μ€ 거의 μ—†λ‹€ μ‹Άμ§€λ§Œ, 만일 이미 μ„€μ •λ˜μ—ˆκ±°λ‚˜ 더 μ μ ˆν•œ 속성이 μžˆλŠ” 경우 데이터 속성을 μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°λ₯Ό ꢌμž₯ν•˜λŠ” λ°”λ‹€.

예λ₯Ό λ“€μ–΄ λ‹€μŒκ³Ό 같이 μ‹œκ°„ μš”μ†Œλ₯Ό λ¬Έμ„œμ— ν‘œν˜„ν•˜κ³  μ‹Άμ„λ•Œ, μŠ€νŽ™μ—” <time> μ΄λΌλŠ” νƒœκ·Έμ™€ μ μ ˆν•œ datatime μ΄λΌλŠ” 속성이 μžˆμ§€λ§Œ, 이걸 λ¬΄μ‹œν•˜κ³  μΌλΆ€λŸ¬ <span> 에 데이터셋 속성을 μ‚¬μš©ν•˜λŠ” 것은 λΆ€μ μ ˆν•˜λ‹€κ³  λ³Ό 수 μžˆλ‹€.

<!-- ok -->
<time datetime="20:00">μ˜€ν›„ 8μ‹œ</time>
<!-- wrong! -->
<span data-time="20:00">μ˜€ν›„ 8μ‹œ<span>

 

검색 엔진 μˆ˜μ§‘ μœ μ˜μ‚¬ν•­

기본적으둜 html의 데이터셋 속성은 κ²€μƒ‰μ—”μ§„μ—μ„œ 인덱싱을 ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ 검색 엔진에 λ…ΈμΆœν•  λ‚΄μš©μ΄λ‚˜, νƒœκ·Έμ— λ„£μ–΄μ•Όν•  컨텐츠λ₯Ό 데이터셋 μ†μ„±μœΌλ‘œ ν‘œμ‹œν•˜λ©΄ μˆ˜μ§‘μ΄ μ•ˆλ˜λ‹ˆ μ‘°μ‹¬ν•˜μ—¬μ•Ό ν•œλ‹€.

 

λΈŒλΌμš°μ € ν˜Έν™˜μ„±

IE 10 μ΄ν•˜ 에선 .dataset ν”„λ‘œνΌν‹°λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν˜Έν™˜μ„± μœ μ§€κ°€ ν•„μš”ν•œ 경우  getAttribute()λ₯Ό 톡해 데이터 속성을 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ μ ‘κ·Ό λ°©λ²•μ˜ μ œμ•½μœΌλ‘œ 인해 IE 10 μ΄ν•˜μ—μ„œλŠ” 데이터셋 속성 μ‚¬μš©μ€ κ°€λŠ₯ν•˜λ©΄ ν”Όν•˜λŠ” 것이 μ’‹λ‹€.

인터넷 μ΅μŠ€ν”Œλ‘œλŸ¬11+ 및 여타 λΈŒλΌμš°μ €λ“€μ€ λͺ¨λ‘ ν‘œμ€€μ„ μ§€μ›ν•œλ‹€.

dataset -browswer


# 참고자료

https://coding-restaurant.tistory.com/231

https://dololak.tistory.com/364

https://css-tricks.com/a-complete-guide-to-data-attributes/