简体中文

为什么需要全面屏封面?

默认情况下,Sigil 生成的封面使用 SVG 包裹 <image> 标签的方式显示封面图片。这种方式在大多数阅读器上能正常工作,但存在一些问题:

  • 封面图片周围可能出现白边或黑边
  • 无法真正铺满整个屏幕,尤其在手机全面屏设备上
  • 不同阅读器对 SVG 封面的渲染效果差异较大

全面屏封面的目标是让封面图片完全覆盖阅读器的整个显示区域,没有任何边距和留白,带来更沉浸的视觉体验。

封面图片尺寸参考

不同设备和场景需要不同尺寸的封面图片:

用途宽 × 高(px)说明
书架封面1525 × 2140阅读器书架展示用,最常见
Kindle 封面1536 × 2048适配 Kindle 设备
手机全面屏封面1080 × 2400适配手机竖屏全面屏显示
平板封面1536 × 2048适配 iPad 等平板设备

如果你的电子书需要同时适配多种设备,建议准备多张不同尺寸的封面图片,在 EPUB 中分别引用。

方案一:手机全面屏封面(CSS 背景图方式)

这是适用范围最广的方案,通过 CSS background-image 将封面图片设为页面背景,实现真正的全屏铺满效果。大部分主流阅读器(阅微、Apple Books、微信读书等)都支持这种方式。

原理

不使用 <img> 标签插入图片,而是将封面图片作为 <body> 的 CSS 背景。配合 background-size: cover 属性,图片会自动缩放并裁剪以铺满整个视口,不留任何空白。

实现步骤

1. 准备封面图片

  • 尺寸:1080 × 2400 px(手机全面屏比例)
  • 格式:PNG 或 JPG
  • 将图片放入 EPUB 项目的 Images 文件夹,命名为 cover~slim.png

文件名中的 ~slim 是一种命名约定,表示这是竖屏/窄版封面。你也可以用其他名称,只要 CSS 中路径对应即可。

2. 创建封面页 XHTML

在 Sigil 的 Text 文件夹中新建一个 XHTML 文件(如 cover.xhtml),内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>封面</title>
    <style>
      /* 基础视口设置 */
      html,
      body {
        height: 100%;
        margin: 0;
        padding: 0;
        overflow: hidden;
      }
    </style>
    <link href="../Styles/main.css" type="text/css" rel="stylesheet" />
  </head>
  <body class="cover-page">
    <div class="fm">
      <p>&nbsp;</p>
    </div>
    <h2 class="none">封面</h2>
  </body>
</html>

代码解析:

  • html, body 设置高度 100% 并去除默认边距,确保页面占满整个视口
  • overflow: hidden 防止出现滚动条
  • <body class="cover-page"> 通过 class 关联外部 CSS 中的背景图样式
  • <div class="fm"><p>&nbsp;</p></div> 是一个占位元素,包含一个不可见的空格字符。部分阅读器要求页面有实际内容才能正常渲染,这个空白段落确保页面不会被跳过
  • <h2 class="none">封面</h2> 隐藏的标题,用于目录生成时标识这是封面页

3. 编写 CSS 样式

Styles/main.css 中添加以下样式:

/* ===== 封面页样式 ===== */
.cover-page {
  background-image: url("../Images/cover~slim.png"); /* 封面图路径 */
  background-repeat: no-repeat; /* 不重复 */
  background-size: cover; /* 满铺:自动缩放裁剪 */
  background-position: center; /* 居中显示 */
  width: 100%; /* 全宽 */
  min-height: 100%; /* 最小全高 */
  display: block;
  margin: 0;
  padding: 0;
}

/* 隐藏占位文字 */
.fm p {
  color: rgba(255, 255, 255, 0); /* 完全透明 */
}

/* 隐藏辅助标题 */
.none {
  display: none;
}

关键属性说明:

属性作用
background-size: cover图片等比缩放,确保完全覆盖容器,可能裁剪边缘
background-position: center裁剪时保留图片中心区域
min-height: 100%确保背景区域至少占满一整页
color: rgba(255,255,255,0)让占位文字完全透明,不影响视觉效果

注意 CSS 中图片路径是相对于 CSS 文件位置的。如果你的 CSS 在 Styles/ 目录下,图片在 Images/ 目录下,路径应该是 ../Images/cover~slim.png

兼容性

阅读器支持情况
阅微✅ 完美支持
Apple Books✅ 完美支持
微信读书✅ 支持
多看阅读⚠️ 部分支持,较新 CSS 属性支持有限
Kindle❌ 不支持 CSS 背景图,需要用方案二

方案二:Kindle 封面(IMG 标签方式)

Kindle 设备不支持 CSS background-image,需要使用传统的 <img> 标签方式。通过 Flexbox 布局让图片在页面中居中并尽可能大地显示。

实现步骤

1. 准备封面图片

  • 尺寸:1536 × 2048 px(Kindle 推荐尺寸)
  • 格式:PNG 或 JPG
  • 将图片放入 Images 文件夹,命名为 cover.png

2. 创建封面页 XHTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>封面</title>
    <link href="../Styles/main.css" type="text/css" rel="stylesheet" />
  </head>
  <body class="epub-cover">
    <div class="cover-image-container">
      <img alt="cover" src="../Images/cover.png" />
    </div>
  </body>
</html>

3. 编写 CSS 样式

/* ===== Kindle 封面样式 ===== */
body.epub-cover {
  margin: 0;
  padding: 0;
  text-align: center;
  background-color: #000; /* 黑色背景,填充图片未覆盖区域 */
}

body.epub-cover .cover-image-container {
  width: 100%;
  height: 100vh; /* 占满视口高度 */
  display: flex;
  justify-content: center; /* 水平居中 */
  align-items: center; /* 垂直居中 */
}

body.epub-cover .cover-image-container img {
  max-width: 100%;
  max-height: 95vh; /* 最大高度留 5% 余量 */
  height: auto;
  width: auto;
  margin: auto;
  display: block;
}

关键属性说明:

属性作用
background-color: #000黑色背景,当图片比例与屏幕不完全匹配时,空白区域显示为黑色而非白色
height: 100vh容器占满整个视口高度
display: flex + 居中属性让图片在容器中水平和垂直居中
max-height: 95vh图片最大高度为视口的 95%,留一点余量防止溢出

这种方式不会裁剪图片,而是完整显示。如果图片比例与屏幕不同,会在边缘出现黑色填充条。

方案三:多看阅读专属全屏封面

多看阅读扩展了 EPUB 标准的 <spine> 属性,提供了一种私有的全屏封面方案。这种方式只在多看阅读和适配了多看私有代码的软件中生效,未适配的阅读器会忽略这个属性。

实现方法

打开 EPUB 项目中的 content.opf 文件(在 Sigil 的书籍浏览器中可以找到),找到 <spine> 部分。

在封面页对应的 <itemref> 标签中添加 properties="duokan-page-fullscreen" 属性:

<spine toc="ncx">
  <itemref idref="cover.xhtml" properties="duokan-page-fullscreen"/>
  <itemref idref="chapter01.xhtml"/>
  <itemref idref="chapter02.xhtml"/>
  <!-- 其他章节 -->
</spine>

其中 idref 的值要与 <manifest> 中封面文件的 id 一致。例如如果你的 manifest 中是:

<item id="cover.xhtml" href="Text/cover.xhtml" media-type="application/xhtml+xml"/>

那么 itemref 中的 idref 就应该是 cover.xhtml

这种方式只在多看阅读和适配了多看私有代码的软件中生效,未适配的阅读器会忽略这个属性。

多方案共存:同时适配所有设备

如果你希望一本 EPUB 同时适配手机、Kindle 和多看,可以这样组织:

1. 准备两张封面图片:

  • cover~slim.png(1080 × 2400)— 手机全面屏用
  • cover.png(1536 × 2048)— Kindle / 书架用

2. 使用方案一的 XHTML 和 CSS 作为默认封面页

大部分阅读器都能正确渲染 CSS 背景图方式。

3. 在 content.opf<metadata> 中声明封面图片:

<meta name="cover" content="cover-image"/>

并在 <manifest> 中标记:

<item id="cover-image" href="Images/cover.png" media-type="image/png" properties="cover-image"/>

这样 Kindle 等不支持 CSS 背景图的设备会使用 cover.png 作为封面。

4. 在 <spine> 中为多看添加全屏属性:

<itemref idref="cover.xhtml" properties="duokan-page-fullscreen"/>

这样一本 EPUB 就能在不同阅读器上都获得最佳的封面显示效果。

搞定!

现在你已经掌握了三种全面屏封面方案,可以根据目标阅读器选择合适的方式,也可以多方案共存实现全平台适配。