CSS의 색상 테마에 대한 건조한 접근
최근 Florens Verschelde는 CSS 사용자 정의 속성의 반복 선언을 피하면서 클래스 및 미디어 쿼리에서 Dark Mode Styles를 정의하는 방법을 물었습니다. 나는 또한 과거 에이 문제를 발견했지만 적절한 솔루션을 찾지 못했습니다.
우리의 목표는 빛과 어두운 모드를 전환 할 때 재정의 및 반복적 인 특성을 피하는 것입니다. 이것은 건식 (스스로 반복하지 말)의 목표이지만 전환 주제의 일반적인 패턴은 일반적으로 다음과 같습니다.
<code>:root { --background: #fff; --text-color: #0f1031; /* etc. */ } @media (prefers-color-scheme: dark) { :root { --background: #0f1031; --text-color: #fff; /* etc. */ } }</code>
내가 무슨 뜻인지 이해합니까? 물론이 짧은 예에서는 중요하지는 않지만 한 번에 수십 개의 사용자 정의 속성을 다루는 것을 상상해보십시오. 많은 반복입니다!
그런 다음 --var: ;
, 처음에는 생각하지 않았지만, var(--light-value, var(--dark-value))
또는 이와 유사한 중첩 된 조합을 사용하는 대신 나란히 사용하는 방법을 찾았습니다!
물론, 이것을 내 앞에 발견 한 사람이 있어야하지만, 나는 이것을 달성하기 위해 CSS 사용자 정의 속성을 사용하는 (또는 오히려 학대)에 대해 들어 본 적이 없습니다. 더 이상 고민하지 않으면 이것이 아이디어입니다.
<code>--color: var(--light, orchid) var(--dark, rebeccapurple);</code>
--light
값이 initial
로 설정되면 --dark
값 (난초)이 사용됩니다.
<code>--color: orchid ; /* 注意额外的空格*/</code>
대신 --light
공간으로 설정되고 --dark
initial
로 설정되면 다음과 같이 계산 된 값으로 끝납니다.
<code>--color: rebeccapurple; /* 同样,注意空格*/</code>
이제는 괜찮지 만 컨텍스트에 따라 --light
및 --dark
사용자 정의 속성을 정의해야합니다. 사용자는 시스템 환경 설정 (빛 또는 어두운)을 설정하거나 특정 UI 요소를 사용하여 웹 사이트 테마를 전환 할 수 있습니다. Florens 예제와 마찬가지로, 우리는이 세 가지 사례를 정의하고 Lea의 제안 된 "On"및 "Off"상수를 사용하여 일부 작은 가독성 향상을 위해 다음을 분명히 할 것입니다.
<code>:root { /* 感谢Lea Verou!*/ --ON: initial; --OFF: ; } /* 默认情况下,浅色主题处于启用状态*/ .theme-default, .theme-light { --light: var(--ON); --dark: var(--OFF); } /* 默认情况下,暗色主题处于禁用状态*/ .theme-dark { --light: var(--OFF); --dark: var(--ON); } /* 如果用户偏好暗色,那么他们将获得暗色主题*/ @media (prefers-color-scheme: dark) { .theme-default { --light: var(--OFF); --dark: var(--ON); } }</code>
그런 다음 모든 주제 변수를 중복없이 한 선언에서 설정할 수 있습니다. 이 예에서 theme-*
클래스는 html
요소로 설정되어 있으므로 우리는 다음을 사용할 수 있습니다 :root
선택할 수 있지만 사용자 정의 속성의 계단식 속성이 더 적합하다면 body
로 설정할 수도 있습니다.
<code>:root { --text: var(--light, black) var(--dark, white); --bg: var(--light, orchid) var(--dark, rebeccapurple); }</code>
그것들을 사용하기 위해, 우리는 조심하기를 좋아하기 때문에 var()
와 내장 폴백을 사용합니다.
<code>body { color: var(--text, navy); background-color: var(--bg, lightgray); }</code>
바라건대 여기에서 혜택을보기 시작했습니다. 많은 수의 사용자 정의 속성을 정의하고 전환하는 대신 두 가지 속성을 처리하고 다른 모든 속성을 한 번만 설정합니다 :root
. 이것은 우리가 시작한 곳에서 큰 개선입니다.
사전 처리기를 사용하여 더 건조한 코드를 구현합니다
컨텍스트에서 다음과 같은 코드 줄을 보려면 색상이 단일 값이 아니라 단일 값이기 때문에 분명히 혼란 스러울 것입니다!
<code>--text: var(--light, black) var(--dark, white);</code>
그래서 나는 조금 추상적 인 것을 선호합니다. 좋아하는 전처리 업체 (내 경우 Sass)를 사용하여 기능을 설정할 수 있습니다. 다른 컨텍스트에서 위에서 정의 된 --light
및 --dark
값으로 코드를 보관하면 실제 사용자 정의 속성 선언 만 변경하면됩니다. CSS 구문을 반환하는 light-dark
함수를 만들어 봅시다.
@function Light-Dark ($ light, $ dark) { @return var (-light, #{$ light}) var (-Dark, #{$ dark}); }
우리는 다음과 같이 사용할 것입니다.
: 루트 { --text : #{Light-Dark (검은 색, 흰색)}; ---bg : #{Light-Dark (난초, Rebeccapurple)}; -accent : #{light-dark ( #6d386b, #b399cc)}; }
함수 호출 주변에 보간 분리기 #{ … }
가 있음을 알 수 있습니다. 이것들이 없으면 Sass는 코드를 그대로 출력합니다 (일반 CSS 함수와 마찬가지로). 다양한 구현을 시도 할 수 있지만 구문 복잡성은 선호도에 따라 다릅니다.
이것은보다 건조한 코드 기반을 어떻게 찾습니까?
둘 이상의 주제? 괜찮아요!
두 개 이상의 모드 로이 작업을 수행 할 수 있습니다. 더 많은 주제를 추가할수록 관리하는 것이 더 복잡하지만 핵심은 이것이 가능하다는 것입니다! ON 또는 OFF 변수 그룹의 다른 그룹을 추가하고 값 목록에 추가 변수를 설정합니다.
<code>.theme-pride { --light: var(--OFF); --dark: var(--OFF); --pride: var(--ON); } :root { --text: var(--light, black) var(--dark, white) var(--pride, #ff8c00) ; /* 换行符是完全有效的*/ /* 其他要声明的变量… */ }</code>
이것이 기술입니까? 예, 물론. 이것은 존재하지 않는 CSS 부울의 잠재적 인 사용 사례입니까? 좋아, 이것은 꿈이다.
당신은요? 이 문제를 다른 방식으로 해결 했습니까? 의견을 공유하십시오!
위 내용은 CSS의 색상 테마에 대한 건조한 접근의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

새로운 프로젝트가 시작될 때, Sass 컴파일은 눈을 깜박이게합니다. 특히 BrowserSync와 짝을 이루는 경우 기분이 좋습니다.

이번 주에 플랫폼 뉴스 라운드 업 RONDUP, Chrome은로드에 대한 새로운 속성, 웹 개발자를위한 접근성 사양 및 BBC Move를 소개합니다.

이것은 처음으로 HTML 요소를보고 있습니다. 나는 그것을 잠시 동안 알고 있었지만 아직 스핀을 위해 그것을 가져 갔다. 그것은 꽤 시원하고 있습니다

구매 또는 빌드는 기술 분야의 고전적인 논쟁입니다. 신용 카드 청구서에 라인 항목이 없기 때문에 물건을 구축하는 것이 저렴할 수 있지만

한동안 iTunes는 팟 캐스팅에서 큰 개 였으므로 "Podcast 구독"을 링크 한 경우 다음과 같습니다.

이번 주에 타이포그래피를 검사하기위한 편리한 북마크 인 Roundup, JavaScript 모듈과 Facebook의 Facebook 등을 어떻게 가져 오는지 땜질하기 위해 대기하는 편리한 북마크 인 Roundup과 Facebook의

사이트에서 방문자 및 사용 데이터를 추적하는 데 도움이되는 분석 플랫폼이 많이 있습니다. 아마도 널리 사용되는 Google 웹 로그 분석
