【问题标题】:Can I implement a dark-mode option if I only have access to the stylesheet?如果我只能访问样式表,是否可以实现暗模式选项?
【发布时间】:2021-05-30 06:12:38
【问题描述】:

我网站的子域使用 cname 记录指向第 3 方资源。支持有限。我对该资源的唯一控制是样式。在页面加载时,它会从主域的根目录中提取样式表。在该样式表中,我可以从我的站点@import 更多样式表,但是从我的站点引用图像、字体等违反了跨域策略,并且它们不会加载。

我想为整个站点实现一个暗模式选项,并将这个子域包含在更改中。实现这一目标的最佳方法是什么?

我可以设置一个 cookie 或一些可以被 CSS 读取的东西吗?

当用户切换暗模式时,我是否要替换整个样式表文件?如果是,我该如何克服服务器和浏览器缓存?

我什至想过拥有两个不同的子域,但我知道这行不通,因为两者的样式表必须命名相同并且位于相同的位置。

更新:感谢@Ryuno-Ki 的建议。

@media (prefers-color-scheme: dark) 是一个好的开始。它将允许我确定用户自己系统的暗模式设置并根据它自动应用 CSS。但我也想为用户提供一种在网站上切换它的方法(because)。我可以以某种方式从我的主站点操作此属性吗?

【问题讨论】:

    标签: css darkmode


    【解决方案1】:

    是的,应该可以。暗模式通常适用于 prefers-color-scheme: dark 媒体查询。样式表应该允许这样做。

    关于图片:它会使网站膨胀,但使用 data-URIs 可能会通过跨域策略。

    【讨论】:

    • 感谢 data-URI 提示,这实际上解决了我的另一个问题。看起来喜欢颜色方案是一个好的开始,我更新了我的 OP。
    • 据我所知,CSS 无法读取 Cookie。话虽如此,曾经有链接到备用样式表的选项:developer.mozilla.org/en-US/docs/Web/CSS/… 如果您也可以运行 JavaScript,那可能会有所帮助。
    • 唯一的其他方法是使用一组<input type="radio" />(或type="checkbox")和一个共享的name属性(因为这些HTML元素可以保持状态)。它们不会在多页转换中保留(但可能适用于 SPA 站点)。然后,您可以通过 CSS 中的属性选择器来定位它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多