用 Cursor,得永生

原来有个页面需求,就是在 iOS 上打开后,自动适应亮或者暗主题模式。因为不是前端选手,所以当时就按下不表,直至这两天又想起来。然后想到正好可以问一下被人传的神乎其神的 Cursor。于是有了下面的记录。

Q:在一个 iOS app 中,要实现生成一个本地 HTML 页面,使用 WebView 显示出来。据我所知,手机目前都有明亮、暗黑两种模式,为了保证用户体验,HTML 页面应该能自动检测当前处于那种模式,并将适当的适应性 CSS 应用到页面元素上(如页面背景以及文字的颜色),可以帮助写一个简单的示例页面吗?

A:当然可以。以下是一个简单的示例 HTML 页面,它能够自动适应系统的明亮/暗黑模式:

这个示例页面的特点:

  1. 使用 color-scheme: light dark 告诉浏览器支持明暗两种模式。
  2. 使用 @media (prefers-color-scheme: dark) 媒体查询来检测系统的暗黑模式。
  3. 为明暗两种模式分别定义了不同的:
    1. 背景色
    2. 文字颜色
    3. 卡片背景色和边框颜色
    4. 链接颜色
  4.  使用了一些基本的样式来美化页面:
    1. 卡片式布局
    2. 圆角边框
    3. 适当的内外边距

当用户的系统在明暗模式之间切换时,页面会自动调整配色方案,无需刷新页面。

如果您需要在 iOS 中使用这个页面,可以将其保存为本地文件,然后使用 WKWebView 加载:

您可以根据需要调整颜色、字体大小等样式,使其更好地匹配您的应用设计。

Q:明白了。我之前一直以为是要用 JavaScript 自行动态调整,没想到是用响应式样式,谢谢你!

A:是的!使用 CSS 的 @media (prefers-color-scheme) 媒体查询是一个更优雅的解决方案。它不仅代码更简洁,而且响应更快,因为:

  1. 不需要运行 JavaScript 代码来检测和切换主题
  2. 系统切换主题时会自动响应,不需要监听事件
  3. 即使禁用了 JavaScript,主题切换依然可以工作
  4. 页面加载时就能直接应用正确的主题,不会出现闪烁

不过,如果您确实需要在 JavaScript 中检测当前主题(比如需要根据主题做一些其他处理),也可以使用:

但在大多数情况下,仅使用 CSS 媒体查询就足够了!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注