iBooks 是否添加了诸如 CSS 类之类的东西或其他任何东西,以便在夜间模式处于活动状态时能够以不同的方式(以较浅的颜色)对书的某些部分进行样式设置?
3 回答
iBooks 为元素添加了一个__ibooks_internal_theme
属性,该属性:root (html)
的值随所选主题而变化。
继续这个:
:root[__ibooks_internal_theme*="Sepia"]
:root[__ibooks_internal_theme*="Night"]
您可以在 GitHub 上找到更多详细信息:theme-detect.css
我最终将添加有关这三个主题的 CSS 限制的详细信息。
计算样式
你可以尝试做一个window.getComputedStyle(document.body).backgroundColor
. 这未经测试。
编辑:关于 getComputedStyle,我的错误 - 背景颜色(假设这是 iBooks 使用的)不是继承的,所以 getComputedStyle 不会给你买任何东西。由于 HTML 元素上的样式具有不同级别的支持(HTML4 在技术上甚至不允许 HTML 元素 AFAIK 上的样式属性),理论上您的继承技巧可能不起作用。我会坚持一个
alert(document.documentElement.style.backgroundColor);
看看会出现什么。另一种蛮力方法是做一个
alert(document.documentElement.outerHTML);
您将在警报框中获得大量内容,但它应该会为您滚动,您可能会在其中看到有用的内容。
FWIW,Readium 显然在 html 元素上使用背景颜色为 rgb(20,20,20) 的夜间模式。
媒体查询
据悉,苹果引入了专有的媒体查询“分页”和“非分页”来检测用户是否在使用 iBooks 3.0 中的新滚动模式。它可能已经为黑暗主题(实际上称为“夜晚”)引入了媒体查询,但我只是猜测。无论如何,据我所知,没有办法枚举媒体查询,因此试图找到它将是一个纯粹的试错过程。
没有 iBooks 的帮助,您可以为夜间模式添加另一个 css。只需在
<link rel="stylesheet" href="nightmode.css" class="night" />
另一种解决方案是将自定义媒体查询添加到您的 css 文件中:
/* Sepia */
@media sepia {
* { color: #000000; }
body { background-color: #eae4d3; }
}
/* Black */
@media black {
* { color: #ffffff; }
body { background-color: #000000; color: #ffffff; }
}
/* White */
@media white {
* { color: #000000; }
body { background-color: #ffffff; }
}