| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 개발일지
- 다시 홧팅
- js
- axios
- 차이점
- 힘들었던 한주
- git flow finish
- TS
- Mac
- 클라이언트 컴포넌트
- freecodecamp
- HTML
- javascript30
- Next.js
- Main
- api 라우트
- 끝까지 잘 마무리하기
- 공부할 거 넘많다~
- 서버 컴포넌트
- git
- 바닐라JS
- fetch pull 차이
- 백준
- 책으론 원리만
- CSS
- AJAX
- JavaScript
- jQuery
- git flow start
- 실무는 공식문서로
- Today
- Total
다다의 개발일지 6v6
[JS] Day 3 - CSS Variables ( JS로 CSS 변수 수정하기! ) 본문

spacing, blur, base Color를 변경하면 사진에 그대로 적용되도록 할 예정!
우선 css를 건드려 보았다

.hl {
color: #f66687;
}
img {
width: 50%;
max-height: 600px;
object-fit: cover;
padding: 10px;
background-color: #f66687;
}
이렇게 기본값으로 고정시키고 각각의 색, spacing을 JS로 변경하려고 했는데 그러면 전체 기본 색이 #F66687로 똑같은데
.hl의 color따로 img의 배경색 따로 변경해줘야 한다.
그래서!! 아예 기본 색을 변수로 선언하려고 함.
:root와 CSS 변수 (- -base, - -spacing, - -blur)
:root란?
:root는 HTML 문서의 최상위 요소(html)를 의미하는 가상 선택자이다.
즉, 문서 전체에서 사용할 수 있는 전역 CSS 변수를 선언할 때 사용함
💡 :root는 html과 같은 의미지만, CSS 변수를 선언할 때 주로 사용된다
html { /* 가능은 하지만 */
--color: red;
}
:root { /* 이게 더 일반적 */
--color: red;
}
CSS 변수 (--base, --spacing, --blur)
:root 안에서 --로 시작하는 변수를 정의
:root {
--color: #f66687;
--spacing: 10px;
--blur: 10px;
}
:root에서 선언한 변수들은 CSS 어디서든 사용 가능하다
CSS 변수
CSS에서 변수를 사용할 때는 var(--변수이름)을 사용한다.
img {
background-color: var(--color);
padding: var(--spacing);
filter: blur(var(--blur));
}
- background-color: var(--color); → 배경색을 핑크색으로 설정
- padding: var(--spacing); → 패딩을 10px로 설정
- filter: blur(var(--blur)); → 흐림 효과(블러)를 10px 적용
CSS 변수를 쓰면 좋은 점
- 유지보수가 편하다 : 변수 하나만 바꾸면 전체 스타일이 자동으로 변경되니깐
- JS와 연동할 때.
- 변수 사용 안하고 고정된 값 사용 → style.color로 직접 바꿔야 해서 비효율적!
- CSS 변수 사용 → setProperty()로 전체 스타일을 쉽게 변경 가능하다.
- 따라서 변경해야 하는 스타일이 많다면 CSS 변수가 훨씬 유리함
최종 CSS코드
:root {
--color: #f66687;
--spacing: 10px;
--blur: 10px;
}
.hl {
color: var(--color);
}
img {
width: 50%;
max-height: 600px;
object-fit: cover;
padding: var(--spacing);
background-color: var(--color);
filter: blur(var(--blur));
}
input[type="range"] { /* input bar 색도 바꾸기 */
accent-color: var(--color);
}
JS에서 변수 값을 수정해보자!
우선 변수 값이 각 spacing, blur, base-color input 값으로 수정되게 해야하는데
input UI를 변경했을 때 값이 어떻게 나오는지 부터 알아야 할거같다.

변수 값 수정하기
이벤트가 발생한 <input> 요소의 값(value)을 가져와서 CSS 변수(--변수명)를 업데이트해보자
document.documentElement.style.setProperty('--spacing', '20px');
이런식으로 js에서 변수를 수정할 수 있다.
function updateVar (value) {
document.documentElement.style.setProperty(`--${this.name}`, this.value + 단위추가)
}
input 요소의 값으로 수정하려면! 이렇게
this는 이벤트가 발생한 요소를 가리킨다.
이 함수는 input 요소에 addEventListener로 연결되어 있으니까
this.dataset.sizing || ''
const unit = this.dataset.sizing || ''; // 'px' 같은 단위 가져오기
여기서 dataset이란?
- dataset은 data-로 시작하는 HTML 속성들을 가져오는 객체이다.
- data-sizing 속성이 있다면 this.dataset.sizing으로 접근할 수 있다.
<input id="spacing" type="range" name="spacing" min="10" max="200" value="10" data-sizing="px"/>
이 input은 data-sizing 속성이 있으므로 "px"를 가져오고 만약 없으면 빈 문자열('')을 사용한다.
input 변경 이벤트 마다 변수를 수정해주자!
inputs.forEach(input => input.addEventListener('change', updateVar));
inputs.forEach(input => input.addEventListener('mousemove', updateVar));
change 이벤트란 ?
- change 이벤트는 <input> 값 변경 후 마우스를 떼면 실행
document.querySelector("input").addEventListener("change", () => {
console.log("값이 변경됨!");
});
🔹 마우스로 드래그하여 값이 변해도, 마우스를 떼기 전에는 실행되지 않음.
mousemove 이벤트란?
- mousemove 이벤트는 마우스를 움직일 때마다 발생.
- 특히 <input type="range">에서 마우스를 움직일 때마다 값이 변하는 경우 유용함!
document.querySelector("input").addEventListener("mousemove", () => {
console.log("마우스를 움직이는 중!");
});
🔹 마우스를 움직일 때마다 계속 실행됨!
➡ 즉, change 이벤트보다 더 자주 실행됨.
전체 JS 코드!
const inputs = document.querySelectorAll(".controls input");
function updateVar () {
const unit = this.dataset.sizing || ""; // 'px' 같은 단위 가져오기
document.documentElement.style.setProperty(`--${this.name}`, this.value + unit);
}
inputs.forEach(input => input.addEventListener('change', updateVar));
inputs.forEach(input => input.addEventListener('mousemove', updateVar));
'Frontend > JavaScript' 카테고리의 다른 글
| Ajax - JS에서 클라이언트와 서버의 '비동기적' API 통신 방식 + jQuery, fetch API, Axios, SSE, WebSockets (0) | 2025.02.24 |
|---|---|
| [JS] 함수 호이스팅에 대해서도 알아보자. + 함수 선언문, 함수 표현식, 화살표 함수, 함수에서의 this (2) | 2025.02.21 |
| [JS] var, let, const의 차이점 + 변수호이스팅 , 스코프 (0) | 2025.02.21 |
| [JS] day2 - JS and CSS Clock ( 돌아가는 시계 만들기 ) (0) | 2025.02.19 |
| [JS] Day 1 - Javascript Drum Kit ( 키보드로 드럼치기!! 바닐라 js 프로젝트 1 시작 ) (1) | 2025.02.19 |