스마트한 웹 디자인. 파트 I: 라이트/다크 모드 파비콘.
7072 단어 webhtmlcssjavascript
CSS 및 HTML을 사용하여 페이지 시각화를 변경할 수 있지만 아직 그러한 기능이 없는 요소가 하나 있습니다. 그리고 당신은 이미 내가 말하는 것을 알고 있습니다. 네, 파비콘입니다.
다크 모드에서 Dev.to나 Github의 파비콘을 보면 거의 보이지 않게 된 것을 볼 수 있습니다. 우리는 그것을 변경하고 파비콘이 테마 전환에 반응하도록 만들어야 합니다. 이렇게 하는 가장 논리적인 방법은 favicon이 속성 값으로 전달된 CSS 미디어 쿼리에 반응할 수 있도록 하는 링크 요소의 속성
media
입니다. 그러나 안타깝게도 링크의 미디어 속성에서 지원하는 미디어 쿼리 목록에는 prefers-color-scheme
가 포함되어 있지 않습니다.다행히도 JavaScript를 사용하여 작동하도록 만들 수 있습니다. 그럼 해보자.
이것이 어떻게 작동할 수 있는지live preview입니다.
TL;DR For those who want ready solution, use the library:
럼킨 / 파비콘 스위처
파비콘이 미디어 쿼리에 반응하도록 만들기
테마 전환 듣기
페이지 헤드에서 모든 링크 요소를 수집하고
media
속성을 가져와 window.matchMedia()
메서드를 사용하여 일치시켜야 합니다. 이 메소드는 MediaQueryList 을 반환하며 이는 청취 변경을 허용하며 이를 사용할 것입니다.window.matchMedia('(prefers-color-scheme:light)').addListener((e) => {
e.matches // Determine wether query matched or unmatched
})
아이콘 추가
이제 다양한 테마의 아이콘을 페이지 본문에 삽입해야 합니다.
<link rel="icon" media="(prefers-color-scheme:dark)" href="favicon-dark.png" type="image/png" />
<link rel="icon" media="(prefers-color-scheme:light)" href="favicon-light.png" type="image/png" />
아이콘 전환
브라우저가 탭의 아이콘을 전환하도록 하려면
<link>
요소를 <link>
내부의 마지막 <head>
요소로 만드는 것으로 충분합니다. 이것은 잘 작동하지만 Chrome에는 현재 일부 조건에서 이러한 아이콘 전환을 중단시키는 버그가 있습니다. 이 버그를 방지하려면 새 항목<link>
을 만들고 다른 링크 다음에 헤드 하위 목록에 추가해야 합니다.const favicon = document.createElement('link')
link.setAttribute('rel', 'favicon icon')
head.appendChild(link)
// Listen media change
window.matchMedia('(prefers-color-scheme:light)')
.addListener((e) => {
if (! e.matches) {
return
}
// Apply new favicon source
const source = document.querySelector('link[rel*="icon",media="(prefers-color-scheme:light)"]')
if (source === null) {
return
}
link.setAttribute('type', source.type)
link.setAttribute('href', source.href)
})
마지막 표현식을 복제하고
light
를 dark
로 바꾸면 어두운 테마 아이콘이 활성화됩니다.Note! We check wether source is
null
due to possible DOM mutations.
결론
이제 테마 전환에 반응하는 페이지 파비콘을 만드는 방법을 알았습니다.
읽어 주셔서 감사합니다. 더 많은 사용 사례를 다루고
max-width
, min-width
등과 같은 다른 미디어 쿼리를 지원하는 favicon-switcher 을 사용하십시오.학점
사진 제공: Linda Xu on Unsplash
Reference
이 문제에 관하여(스마트한 웹 디자인. 파트 I: 라이트/다크 모드 파비콘.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rumkin/smart-web-design-part-i-light-dark-mode-favicon-31f0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)