Windows和macOS现在有黑暗模式。
对于CSS,我可以使用:
@media (prefers-dark-interface) {
color: white; background: black
}
但我使用的是StripeElementsAPI,它将颜色放入JavaScript中
例如:
const stripeElementStyles = {
base: {
color: COLORS.darkGrey,
fontFamily: `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`,
fontSize: '18px',
fontSmoothing: 'antialiased',
'::placeholder': {
color: COLORS.midgrey
},
':-webkit-autofill': {
color: COLORS.icyWhite
}
}
}
- 如何在JavaScript中检测操作系统的首选配色方案?**
8条答案
按热度按时间at0kjp5o1#
要监视更改:
7bsow1i62#
您可以直接使用JavaScript检查CSS Media-Queries
window.matchMedia()方法返回一个MediaQueryList对象,表示指定CSS媒体查询字符串的结果。matchMedia()方法的值可以是CSS @media规则的任何媒体特性,如最小高度、最小宽度、方向等。
要检查Media-Query是否为true,可以使用
matches
属性要根据用户的首选项动态更新
color-scheme
,可以使用以下代码:ljo96ir53#
根据MediaQueryList - Web API|MDN,
addListener
是倾听变化的正确方式,addEventListener
在iOS 13. 4上对我不起作用。z9zf31ra4#
选中
matchMedia
选项:klsxnrf15#
下面是一个基于SanBen's answer的一行程序:
nwnhqdif6#
键入JavaScript之前:
你可以使用CSS来做一个
@media
查询,要求在body
元素上有一个::after
伪类,根据用户的配色方案有不同的文本。为了确保body
元素上的::after
不会让用户混淆,在after元素上添加一个display: none;
。CSS代码:
现在来看看您的JavaScript:
因为我们在文档中有一个对象要选择,我们可以得到
body
元素的::after
伪类,我们需要得到它的内容,只要确保CSS在JavaScript之前加载!'d'
用于dark模式,'l'
用于llight模式。JavaScript代码:
为什么这会有用
你可以用CSS和HTML来做这件事,但是为什么要用JavaScript呢?
使用JavaScript是因为可能需要添加一个
img
元素,但图像中包含文本,因此有两个图像,一个用于浅色模式,另一个用于深色模式。因此,可以使用JavaScript将img
元素的src
属性值更改为基于配色方案的正确URL。可能还有更多的用途,但那是我能想到的用途。
来源:
我从这篇stackoverflow文章中学习了
getComputedStyle
函数。我学习了
@media (prefers-color-scheme:
* 配色方案,以便从MDN Web Docs中检测 *)
。当我键入
getComputedStyle(document.body,':after')
时,我将其视为VSCode上的代码建议,从而学习了如何获得计算样式的.content
,它的工作方式与我预期的一致(如果我在一篇文章中看到它,我找不到我访问过的文章)3b6akqbq7#
对于使用React的人,请参见X1 E0 F1 X钩子。它监听更改,也允许您切换/更改黑暗模式。
soat7uwm8#
如果您使用nuxt开发应用,则需要color-mode。