如何防止@media破坏某些 Kobo EPUB 阅读器上对 CSS 文件的解析?

How to prevent @media from breaking the parsing of the CSS file on some Kobo EPUB readers?

提问人:NemuLumeN 提问时间:11/6/2023 最后编辑:NemuLumeN 更新时间:11/8/2023 访问量:27

问:

我正在研究 EPUB 3 文件的样式。

我有一个包含查询的CSS。@media

@media (min-width: 460pt) {
    aside {
        float: right;
        max-width: 40%;
        margin: 10pt 0 10pt 15pt;
    }
}

在浏览器上下文或 Calibre 中呈现时,它会按预期工作。但是在 Kobo Clara HD 上,这会破坏 CSS 文件;规则根本不加载。

删除查询后,CSS 文件将再次工作。因此,问题仅限于此功能。@media

我试图将 放入另一个文件中并使用 .结果:主CSS不再被破坏;但问题是,在有效的上下文中,规则的顺序不正确,因此应用的规则不是我想要的规则。换句话说,该规则必须介于我想要设置样式的元素的主要规则之间,但由于该规则必须首先根据 CSS 规范定义,因此它不符合我的要求。@media@import@media@media@import

  • 好吧,理论上我可以将我的主 CSS 文件解构为 3 个文件(开头、媒体、其余文件),每个文件都用 ,但这似乎太过分了;我需要在添加规则的任何地方破坏主CSS文件。@import@media
  • 我不能使用 ,因为主文件中的后续规则会重置媒体中的某些规则。!important

关于,我没有找到任何检查规则是否受支持的规则。我尝试了以下方法:@supports@supports@media

@supports selector(div) {
  /* The same rules from the previously shown code block. */
}

它使主要的 CSS 文件工作,因为现在(2023 年 11 月)仍处于实验阶段,并且在我的 Kobo 上不受支持。但它所展示的是:我们可以有一种方法可以禁用规则块。@supports selector(...)@media@supports

有什么解决方法吗?

CSS epub epub3

评论


答:

0赞 NemuLumeN 11/8/2023 #1

这是因为,对于 Kobo 电子阅读器,高级 CSS 功能是为文件而不是文件加载的。这些文件是用一个破碎的(或简单的)CSS实现来呈现的。.kepub.epub.epub.epub

只需将文件的扩展名更改为 ,样式表就不会因 而失败。.kepub.epub@media

不要使用 Calibre 传输文件;否则 Calibre 会将扩展名改回 ,因此最好将文件直接复制到存储中。如果您真的想使用 Calibre,请安装 Calibre 的第三方扩展 KoboTouchExtended.epub

此更改后,其他不受支持的 CSS 功能也将开始工作,例如 和 / 。这也将使脚注预览正常工作(只要文件中的实现是正确的)。:not::before::after

要区分 Kobo Clara HD 上加载的 EPUB 和 KEPUB 文件,在电子书列表中,您将在书名旁边找到文件类型:

  • .epub文件被标记为“EPUB”
  • .kepub.epub作为“KOBO EPUB”。