티스토리 뷰
프로젝트 진행 중에 단순 마크업 작업으로 해결할 수 없는 디자인 이슈가 생겼다.
API로 부터 받은 데이터를 기반으로 컴포넌트별로 동적으로 다른 css를 적용해야 했다.
물론 template 내에서 inline style 을 적용할 수도 있었지만<style>
영역에서 동적인 값을 사용하는 법을 알아보게 되었다.
그러다가 알게 된 css variables
이라는 놈... 역시 근본이 없어서 이런거 하나 몰랐다
기존에는 SASS
및 LESS
등을 사용하면서 css 변수를 사용해왔는데,
순수 css 에서도 css variable 이라는 기술을 통해 재활용 가능한 변수를 사용할 수 있었다. (물론 IE는 안됨ㅋ)
CSS Variables
이녀석에 대한 정보라면 사실 CSS Variables 라고 검색하면
공식문서부터 별의별 블로그 결과가 나올테니 자세한 설명은 생략하겠다.
간단하게 설명하자면, --변수명: 값;
의 포맷으로 변수를 선언하고,속성: var(--변수명)
과 같은 방법으로 변수를 사용할 수 있다.
div {
--test-color: #000000;
color: var(--test-color);
}
추가적으로 해당 css variable 이 상위 element 에서 선언되었다면, 하위 element 에서도 접근하여 사용이 가능하다.
Use CSS Variables in Vue
이제 본론으로 돌아와서 CSS Variables
를 Vue 에서 적용해보자.
최종적으로 원하는것은 --변수명
의 값을 script 단에서 동적으로 정하고 싶은 것이다!
먼저 computed
에 아래 예시처럼 변수화를 원하는 스타일 정보를 입력한다.
computed: {
customStyle () {
return {
'--test-color': this.testColor // testColor 는 예시 변수명
}
}
}
그 다음 template 내에서 해당 스타일 정보가 필요한 element에 style
속성을 바인딩 해준다.
<div :style="customStyle" style></div>
이게 끝이다. 이제 대망의 <style>
내에서 변수를 사용해보자!
div {
color: var(--test-color);
height: calc(var(--test-height) * 10); /* calc를 이용하여 값을 계산할 수도 있다 */
background: var(--test-color, blue); /* css variables 를 지원하지 않는 브라우저에는 두번째 값이 적용된다. */
}
아마 잘 될것이다..!! (IDE 혹은 에디터상에서 해당 변수 정보를 알 수 없다고 경고가 나올 순 있다..)
'개발 > Javascript' 카테고리의 다른 글
CSR, SPA / SSR, MPA 그리고 Nuxt Universal (4) | 2022.01.11 |
---|---|
Nuxt 의 레이아웃 layouts (0) | 2021.08.22 |
javascript 에서의 this (0) | 2020.11.08 |
Vue 의 화면 갱신은 비동기였다.. (0) | 2020.08.15 |
Vue Test Utils 에서 mount 와 shallowMount 의 차이 (0) | 2020.06.15 |
- Total
- Today
- Yesterday
- 자바스크립트 엔진
- 모듈시스템
- 인텔리제이
- vue.js
- KCD
- 야누자이
- vue
- 이벤트루프
- javascript
- 근본설
- await
- Builder
- 테스트코드
- springboot
- nuxtjs
- 프로미스
- 자바스크립트
- KCD2019
- nuxt
- es6
- CommonJs
- vuejs
- 근본
- jest
- 스프링부트
- javascript engine
- event loop
- intellij
- 빌더패턴
- promise
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |