테마 관리는 웹사이트에서 흔히 볼 수 있습니다. 일반적인 아이디어는 테마와 관련된 CSS 스타일을 분리하고 사용자가 테마를 선택하면 해당 CSS 스타일 파일을 로드하는 것입니다. 이제 대부분의 브라우저는 CSS 변수와 잘 호환되며 테마 스타일을 관리하기가 더 쉽습니다. 최근에는 Vue 프로젝트에서 CSS 변수를 사용하여 테마 연습을 했는데요. 전체 과정을 살펴보겠습니다.
Github 프로젝트 주소 https://github.com/JofunLiang/vue-project-themable-demo
Demo 주소 https://jofunliang.github.io/vue-project-themable-demo/
타당성 테스트
타당성을 테스트하려면 메소드 속성 중 public 폴더 아래에 테마 폴더를 생성하고 themes 폴더에 새 default.css 파일을 생성합니다:
:root { --color: red; }
theme.css를 공용 폴더의 index.html 파일에 추가합니다. # 🎜🎜#<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>vue-skin-peeler-demo</title>
<!-- 引入themes文件夹下的default.css -->
<link rel="stylesheet" type="text/css" href="src/themes/default.css" rel="external nofollow">
</head>
<body>
<noscript>
<strong>We're sorry but vue-skin-peeler-demo doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template> <div> <div :class="$style.demo">变红色</div> </div> </template> <script> export default { name: 'home' } </script> <style module> .demo { color: var(--color); } </style>
그런 다음 프로젝트를 실행하고 브라우저에서 페이지를 열면 페이지가 정상적으로 표시됩니다.
참고: CSS 스타일을 도입하기 위해 링크 태그를 사용하는 @vue/cli는 "죄송하지만 vue-skin-peeler-demo는 JavaScript 없이는 제대로 작동하지 않습니다"라는 오류가 보고될 수 있습니다. 계속하려면 활성화하세요." 이는 @vue/cli가 webpack을 통해 src 디렉터리의 모든 파일을 패키징했기 때문에 발생합니다. 따라서 정적 파일 리소스는 public(@vue/cli 2.x 버전이 static에 있는 경우) 폴더에 배치되어야 합니다.테마 전환 달성
여기에서 테마 전환 아이디어는 href를 대체하는 것입니다. 링크 태그의 속성이므로 대체 함수를 작성하고 src 디렉터리에 새
파일을 만들어야 합니다. 코드는 다음과 같습니다. // themes.js
const createLink = (() => {
let $link = null
return () => {
if ($link) {
return $link
}
$link = document.createElement('link')
$link.rel = 'stylesheet'
$link.type = 'text/css'
document.querySelector('head').appendChild($link)
return $link
}
})()
/**
* 主题切换函数
* @param {string} theme - 主题名称, 默认default
* @return {string} 主题名称
*/
const toggleTheme = (theme = 'default') => {
const $link = createLink()
$link.href = `./themes/${theme}.css`
return theme
}
export default toggleTheme
dark.css 두 개의 테마 파일을 만듭니다. 테마를 구현하기 위해 CSS 변수를 만듭니다. CSS 변수로 테마 전환을 구현하려면 CSS 변수와의 첫 접촉Compatibility
IE 브라우저 및 일부 이전 브라우저를 참조하세요. CSS 변수를 지원하지 않으므로 이전 브라우저와 최신 브라우저 모두에서 CSS 사용자 정의 속성("CSS 변수"라고도 함)에 대한 클라이언트 측 지원을 제공하는 ponyfill인 css-vars-ponyfill을 사용해야 합니다. 감시 모니터링을 활성화해야 하므로 MutationObserver.js도 설치해야 합니다.
설치:
npm install css-vars-ponyfill mutationobserver-shim --save
// themes.js import 'mutationobserver-shim' import cssVars from 'css-vars-ponyfill' cssVars({ watch: true }) const createLink = (() => { let $link = null return () => { if ($link) { return $link } $link = document.createElement('link') $link.rel = 'stylesheet' $link.type = 'text/css' document.querySelector('head').appendChild($link) return $link } })() /** * 主题切换函数 * @param {string} theme - 主题名称, 默认default * @return {string} 主题名称 */ const toggleTheme = (theme = 'default') => { const $link = createLink() $link.href = `./themes/${theme}.css` return theme } export default toggleTheme
// themes.js import 'mutationobserver-shim' import cssVars from 'css-vars-ponyfill' const createLink = (() => { let $link = null return () => { if ($link) { return $link } $link = document.createElement('link') $link.rel = 'stylesheet' $link.type = 'text/css' document.querySelector('head').appendChild($link) return $link } })() /** * 主题切换函数 * @param {string} theme - 主题名称, 默认default * @return {string} 主题名称 */ const toggleTheme = (theme = 'default') => { const $link = createLink() $link.href = `./themes/${theme}.css` cssVars({ watch: false }) setTimeout(function () { cssVars({ watch: true }) }, 0) return theme } export default toggleTheme
테마 기억하기
테마를 기억하는 기능을 구현하려면 하나는 테마를 서버에 저장하는 것이고, 다른 하나는 로컬 저장소 테마를 사용하려면 여기서는 편의상 테마의 로컬 저장 방식을 주로 사용합니다. 즉, 테마를 저장하기 위해 localStorage를 사용합니다. 구체적인 구현을 위해서는 Github 프로젝트 주소를 방문하세요.
이 기사는 PHP 중국어 웹사이트,CSS 튜토리얼
칼럼에서 가져온 것입니다. 학습을 환영합니다위 내용은 Vue는 CSS 변수를 사용하여 테마 전환 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!