为长阅读而生:我做了一个「安静」的 PDF 阅读器

为什么再造一个 PDF 阅读器

浏览器自带的 PDF 视图能用,但它是"能读",不是"想读"。刺眼的白底、冰冷的无衬线字体、突兀的工具栏------对于一份需要静下心啃两小时的论文或散文集,它像超市的日光灯,什么都照亮,却什么都留不下。

我想要的是一盏台灯:暖、稳、聚焦。于是花了一个下午,写了一个单文件 HTML 阅读器:reader.html。双击就能用,没有安装,没有账户,没有云端上传。PDF 只在你的浏览器里被翻开。

C:/Users/86182/Desktop/rainnyDay/reader.html

设计的三条准绳

一、纸感优先,屏幕退后

屏幕的默认状态是发光,而纸的默认状态是被光照。这一字之差决定了阅读体验的一切。

  • 底色 用 #EDE4D0 的羊皮纸色,比米白更暖一点,比米黄更收敛一点;
  • 纸面 再提亮到 #F6EFDD,与底色形成极轻的层次------像书页从书桌上微微浮起;
  • 墨色 用 #3A2E22 的深棕,而不是纯黑。纯黑压屏,深棕落纸。

对比度依然守住 WCAG 的 4.5:1,只是把"能读清楚"这条底线,抬到了"读久了不难受"。

夜间模式也没有走到纯黑。#161311 的暖暗棕配 #E7DDC8 的旧象牙,眼睛落在屏幕上像落在一张老照片上------不再是"关灯的白纸",而是"点灯的旧书"。

二、字体要有性格,但不能抢戏

标题用 Fraunces------一款可变轴衬线,字面骨架挺括,衬线尾部有细微的手工感;正文继承同一家族,行高 1.65,让字与字之间有余地喘气。控件反过来用 Inter:几何、克制、不与正文争夺注意力。

中文自动回落到 Noto Serif SC,不至于在混排时忽宋忽黑。

font-feature-settings 打开 liga calt,text-rendering: optimizeLegibility 打开次像素渲染。这些开关平时看不出差别,长阅读下能省下几百次眨眼。

三、工具栏是仆人,不是主人

我把整条工具栏做成悬浮的 pill:backdrop-filter: blur(10px) 让它半透明地浮在纸面之上,只在你需要它的时候存在。翻页、缩放、主题切换全部收在里面,键盘快捷键(O / ←→ / + - / W)覆盖了 90% 的日常操作------真正读进去的时候,鼠标可以不用碰。

技术上其实简单

核心只有三块:

  1. PDF.js(jsDelivr CDN) 负责解析和渲染。用 pdfjs-dist@4.7.76 的 ES module 版本,直接 import 进来,不需要打包工具。
  2. Canvas 2D + devicePixelRatio 缩放,把每一页画到高清画布上。上限设到 2 倍------4K 屏也够用,再高就是烧显存。
  3. IntersectionObserver 监听可视区域,自动同步"当前页码"。滚动式阅读的顺畅感全靠它。

主题切换是最不起眼但最讨喜的一环:所有颜色都写在 :root 的 CSS 变量里,切换主题时只是给 <html> 换一个 data-theme 属性,浏览器自己接管过渡。选好的主题存进 localStorage,下次打开还是你昨天读到那盏灯。

一些克制的选择

  • 不做云同步 。PDF 打开在浏览器里,arrayBuffer 直接喂给 PDF.js,从头到尾没有一次网络上传。信任是一种很贵的东西,能不要就不要。
  • 不做书签、批注、高亮。这些功能我很想做,但每加一个,界面就多一层。第一版的目标只有一个:让人愿意在这里读完一本书。
  • 不做懒加载。全书一次性铺开,滚轮就是翻书。分页加载在移动端也许有必要,桌面端反而打断阅读的连贯感。

长阅读的界面,本质是减法

写完这个小工具,我最直接的感受是:设计一个"读得进去"的界面,比设计一个"看得下去"的界面难得多。

后者靠对比、动效、情绪;前者靠退让。纸色退一步,让文字站出来;工具栏退一步,让内容占满视野;动画退一步,让眼睛能停下。

好的阅读器不该让你注意到它------它该像窗外的雨声一样,只是让你更容易沉下去。


源码:reader.html,单文件,双击运行。想要它的下一版做什么?告诉我。

相关推荐
PYB313 小时前
【Web·基础学习】基础布局
css·html·web
用户2986985301420 小时前
Python 文档格式转换实战:RTF 转 PDF 与 HTML
python·html·api
志尊宝7 天前
Vue3 零基础每日笔记(055):组件里正确使用 store——storeToRefs 解构与 $patch 批量修改
笔记·vue·html·前端开发·软件开发
huaweichenai7 天前
spring boot操作PDF
java·spring boot·pdf
吴声子夜歌7 天前
HTML——看似普通的元素的背后(<a>标签)
html
IMPYLH7 天前
HTML 的 <style> 元素
前端·html
刃神太酷啦7 天前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
IMPYLH7 天前
HTML 的 <strong> 元素
前端·html
开开心心就好7 天前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
我命由我123457 天前
CSS - CSS 媒体查询 orientation
前端·javascript·css·html·css3·html5·js