[JavaScript] CSS 변수 사용과 JS

2021. 8. 22. 23:50front-end/JavaScript

★ :root 의 개념

★ console 창 활용 

 

css 에서  :root{ } 쓰는 경우 
- root 가상 클래스 
웹 문서 구조에서 특정 위치에 있는 요소를 선택하는 가상 클래스이다.
:root 선택자는 웹 문서 구조에서 가장 상위 요소를 선택할 때 사용한다.
즉, html 에서 root 는 항상 html 을 가리킨다.
그러나, html 보다 :root 가상 클래스의 스타일 적용 우선순위가 더 높다.
문서 전반적으로 재사용할 임의가 있는 값을 작성한다.
:root 을 이용해 최상위 요소에 변수를 선언하면 모든 요소에서 이 변수를 사용할 수 있다.
이렇게 :root 을 사용하여 변수를 사용하게 되면 한 번에 수정이 용이하다.

:root 의사 클래스는 문서 트리의 루트 요소를 선택한다. HTML 의 루트 요소는 <html> 요소
이므로, :root 의 명시도가 더 낮다는 점을 제외하면 html 선택자와 똑같다.
*의사 클래스
CSS 의사 클래스(가상 클래스)는 선택자에 추가하는 키워드로, 선택한 요소가 
특별한 상태여야 만족할 수 있다. 예를 들어 :hover를 사용하면
 포인터를 올렸을 때에만 글씨 색을 바꾸고 싶을 때 사용할 수 있다.
ex)
전역 CSS 변수 선언하기
:root 는 전역 css 변수 선언에 유용하게 사용할 수 있다.
:root{
--main-color: hotpink;
--pane-padding: 5px 42px;
}

CSS: root 변수 사용
var로 변수를 선언하고, 소괄호 안에 속성 값을 입력한다.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Scoped CSS Variables and JS</title>
</head>
<body>
  <h2>Update CSS Variables with <span class='hl'>JS</span></h2>

  <div class="controls">
    <label for="spacing">Spacing:</label>
    <input id="spacing" type="range" name="spacing" min="10" max="200" value="10" data-sizing="px" data-name="beshyun" data-cool="👼">

    <label for="blur">Blur:</label>
    <input id="blur" type="range" name="blur" min="0" max="25" value="10" data-sizing="px">

    <label for="base">Base Color</label>
    <input id="base" type="color" name="base" value="#ffc600">
  </div>

  <img src="https://source.unsplash.com/7bwQXzbF6KE/800x500">

  <style>
    :root{
      --base: #ffc600;
      --spacing: 10px;
      --blur:10px;
    }
    img{
      padding: var(--spacing);
      background:var(--base);
      filter:blur(var(--blur));
    }
    .hl {
      color: var(--base);
    }



    body {
      text-align: center;
      background: #193549;
      color: white;
      font-family: 'helvetica neue', sans-serif;
      font-weight: 100;
      font-size: 50px;
    }

    .controls {
      margin-bottom: 50px;
    }
    a{
      color:var(--base);
      text-decoration: none;
    }

    input {
      width: 100px;
    }
  </style>

  <script>
    const inputs = document.querySelectorAll('.controls input');

    function handleUpdate(){
      // console.log(this.value);
       const suffix = this.dataset.sizing || '';
      // console.log(suffix);
      document.documentElement.style.setProperty(`--${this.name}`,this.value + suffix);
    }

    inputs.forEach(input => input.addEventListener('change',handleUpdate))
    inputs.forEach(input => input.addEventListener('mousemove',handleUpdate))
  </script>

</body>
</html>

console창에다 document.querySelectAll('.controls input') 을 쳐서 사용할 수 있는 spacing, blur, color 등 다양한 input들을 선택하고 자바스크립트에서 

document.documentElement.style.setProperty(`--${this.name}`,this.value + suffix);  

html 의 input 태그의 name 에서 지정된 네임들의 속성값들을과 value의 숫자값을 html에 나타나게 해준다.

 

console.log(this.dataset) 하면 html 태그들의 data- 표시된 값들이 콘솔로그에 찍힌다.

 

forEach() 메서드는 배열에 활용이 가능한 메서드로, 파라미터로 주어진 함수를 배열 요소 각각에 대해 실행하는 메서드이다.

inputs.forEach(input => input.addEventListener('mousemove',handleUpdate))

이 자바스크립트 코드를 이해하자면, input태그들의 각각의 input 태그들의 이벤트 값들에 mousemove 마우스가 움직일때, handleUpdate라는 함수의 dataset 값에 대해 표시가 된다.

 

*** 결론적으로, css 의 :root 차상위? 선택자 (html 태그 중 최상위)  기본 설정이 정해지는 css 값이다.

input 태그와 그 요소의 성격에 맞게 css 를 조정해서

img{

      padding: var(--spacing);

      background:var(--base);

      filter:blur(var(--blur));

    }

이렇게 Bar 에 따라 사이즈(숫자값이) 조정이 되게끔 해준것..

 

구현된 모습