CSS 변수를 사용한 다크 모드 – Vue JS
12818 단어 vuecsswebdevjavascript
먼저 CSS에서 custom variables을 설정합니다.
변수는 약간 다른 형식으로 SASS 및 LESS 에서도 사용할 수 있습니다.
기본 테마에 대한 변수는 :root 아래에 배치해야 하며, 다크 모드에 대한 변수는 data-theme 속성 아래에 배치할 수 있습니다. 아래와 같이 data-theme이 "darkMode"로 설정되어 있는지 확인하십시오.
/* main.css */
:root {
/* Variables for default theme (light-mode) */
--background-color: white;
--text-color: black;
}
[data-theme="darkMode"] {
/* Variables for dark mode */
--background-color: black;
--text-color: white;
}
var() function을 사용하여 CSS에서 방금 생성한 변수의 값을 삽입할 수 있습니다. 아래의 예를 살펴보십시오.
/* main.css */
.example {
background-color: var(--background-color);
color: var(--text-color);
}
이러한 변수를 사용하면 스타일 간에 쉽게 전환할 수 있습니다.
💡 사용자가 사이트 내 어디에서나 테마를 전환할 수 있기를 원하므로 헤더에 테마 토글 요소를 추가하는 것이 좋습니다.
두 테마 사이를 전환하려면 버튼에 의해 트리거되는 Toggle theme이라는 기능을 추가해 보겠습니다.
//in header.vue
<button @click="toggleTheme" aria-label="Toggle themes">
<span>Toggle Theme</span>
</button>
data() {
return {
theme: '' //When this property is empty, the theme is set to the default theme i.e. light mode.
};
},
toggleTheme() {
this.theme = this.theme == 'darkMode' ? '' : 'darkMode'; //toggles theme value
document.documentElement.setAttribute('data-theme', this.theme); // sets the data-theme attribute
localStorage.setItem('theme', this.theme); // stores theme value on local storage
}
이제 토글 테마 버튼을 클릭하여 다크 모드를 토글할 수 있습니다.
또한 페이지가 로드될 때 테마를 설정해야 합니다. Mounted Life-Cycle hook 내의 Vue JS에서 이 작업을 수행합니다.
//in header.vue
mounted() {
let localTheme = localStorage.getItem('theme'); //gets stored theme value if any
document.documentElement.setAttribute('data-theme', localTheme); // updates the data-theme attribute
},
이제 아래와 같이 Vue's Conditional Rendering을 사용하여 활성 테마를 기반으로 버튼 요소의 내용을 전환할 수 있습니다.
//in header.vue
<button @click="toggleTheme" aria-label="Toggle themes">
<span v-if="this.theme == 'darkMode'"> Light</span>
<span v-else> Dark</span>
</button>
다음은 함께 작동하는 이전 코드 조각의 전체적인 보기입니다.
//in header.vue
<button @click="toggleTheme" aria-label="Toggle themes">
<span v-if="this.theme == 'darkMode'"> Light</span>
<span v-else> Dark</span>
</button>
<script>
export default {
data() {
return {
theme: '' //When this property is empty, the theme is set to the default theme i.e. light mode.
};
},
mounted() {
let localTheme = localStorage.getItem('theme'); //gets stored theme value if any
document.documentElement.setAttribute('data-theme', localTheme); // updates the data-theme attribute
},
toggleTheme() {
this.theme = this.theme == 'darkMode' ? '' : 'darkMode'; //toggles theme value
document.documentElement.setAttribute('data-theme', this.theme); // updates the data-theme attribute
localStorage.setItem('theme', this.theme); // stores theme value in local storage
}
}
<script>
이제 우리는 밝은 모드와 어두운 모드 사이를 전환할 수 있으며 사용자가 선호하는 모드는 로컬에 저장됩니다. 꽤 깔끔합니다!
Reference
이 문제에 관하여(CSS 변수를 사용한 다크 모드 – Vue JS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lindaojo/dark-mode-using-css-variables-vue-js-37il텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)