티스토리 뷰

HTML5

[HTML5] DATA 속성 사용법

nc2u 2019. 1. 26. 09:26

HTML5 특정 요소와 연관되어 있지만 확정된 의미는 갖지 않는 데이터에 대한 확장 가능성을 염두에 두고 디자인 되었다. data-* 속성은 표준이 아닌 속성이나 추가적인 DOM 속성, Node.setUserData()과 같은  다른 조작을 하지 않고도, 의미론적 표준 HTML 요소에 추가 정보를 저장할 수 있도록 해준다.

HTML 문법섹션

문법은 간단하다. 어느 엘리멘트에나 data-로 시작하는 속성은 무엇이든 사용할 수 있다. 화면에 안 보이게  글이나 추가 정보를 엘리멘트에 담아 놓을 수 있다. 아래 data 사용법이 있다:

<article
    id="electriccars" 
    data-columns="3" 
    data-index-number="12314" 
    data-parent="cars">	
...
</article>	

JavaScript 에서 접근하기섹션

JavaScript 에서 이 속성 값들을 읽는 방법은 너무 간단하다. 값을 읽기 위한 완전한 HTML 이름과 함께 getAttribute() 를 사용하면 된다. 그러나 표준은 더 간단한 방법을 정의한다.  DOMStringMap 는 dataset 속성을 통해 읽어낼 수 있다.

dataset 객체를 통해 data 속성을 가져오기 위해서는 속성 이름의 data- 뒷 부분을 사용한다.(대시들은 camelCase로 변환되는 것에 주의한다.)

var article = document.getElementById('electriccars'); 
article.dataset.columns
// "3"
article.dataset.indexNumber
// "12314"
article.dataset.parent
// "cars"

각 속성은 문자열이며 읽거나 쓸 수 있다. 위의 경우에서 article.dataset.columns = 5와 같이 설정하면 해당 속성을 "5"로 변경할 것이다.

CSS 에서 접근하기섹션

데이터 속성은 순 HTML 속성이기 때문에 CSS에서도 접근할 수 있다는 것에 주목하자. 예를 들어, 부모 데이터를 article에서 보여주려면 attr 함수의 생성된 content 를 사용하면 된다.:

article::before {
    content: attr(data-parent); 
}

CSS의 속성 선택자도 데이터에 따라 스타일을 바꾸는데 사용할 수 있다.:

article[data-columns='3'] { 
    width: 400px; 
}
article[data-columns='4'] { 
    width: 600px; 
}

이 JSBin 예시에서 이들이 함께 작동하는 것을 볼 수 있다. 

데이터 속성들은 게임 점수와 같이 계속 변하는 정보도 저장할 수 있다. CSS선택자와 자바스크립트 접근을 이용해서 display 규칙을 사용하지 않고도 훌륭한 효과를 만들 수도 있다. 생성된 content와 CSS transition의 예시를 보려면 이 screencast 를 확인한다. (JSBin 예시).

데이터 값은 문자열입니다. 스타일을 적용하려면 숫자 값은 선택자에 따옴표 안에 써주어야 한다.

참고사항섹션

보여야 하고 접근 가능해야하는 내용은 데이터 속성에 저장하는 것은 좋지 않다. 접근 보조 기술이 접근할 수 없기 때문이다. 또한 검색 크롤러가 데이터 속성의 값을 찾지 못할 것이다.

고려해야할 주요한 문제는 인터넷 익스플로러의 지원과 성능이다. 인터넷 익스플로러11+ 은 표준을 지원하지만, 이전 버전들은 dataset 을 지원하지 않는다. IE 10 이하를 지원하기 위해서는 대신 getAttribute() 를 통해 데이터 속성을 접근해야 한다. 또한, JS 데이터 저장소에 저장하는 것과 비교해서 데이터 속성 읽기의 성능은 저조하다.

하지만 이 때문에, 커스텀 요소와 관련된 메타 데이터를 위해서는 훌륭한 해결책이다.

Firefox 49.0.2(아마도 이전/이후의 버전)에서는,1022 데이터를 초과하는 데이터 속성은 자바스크립트(EcmaScript 4)가 읽지 못할 것이다.

'HTML5' 카테고리의 다른 글

그룹 컨텐츠 요소  (0) 2018.10.27
HTML5의 섹션요소  (0) 2018.10.27
HTML5의 구조  (0) 2018.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크