为长阅读而生:我做了一个「安静」的 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 calttext-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,单文件,双击运行。想要它的下一版做什么?告诉我。

相关推荐
赵广陆1 天前
企业实战:主体识别
langchain·pdf·langgraph
AI英德西牛仔1 天前
豆包导出 pdf 颜色不一样怎么办,选用 AI 导出鸭优化文档导出,结合行业白皮书数据解析色彩失真成因
人工智能·ai·chatgpt·pdf·deepseek·ai导出鸭
薰珞婷紫小亭子1 天前
如何解决IEEE期刊LaTeX 模版编译pdf出现大空白的问题
经验分享·pdf
Hello-FPGA1 天前
AI 如何自动通过 PDF 原理图生成管脚映射
人工智能·fpga开发·pdf
阿部多瑞 ABU1 天前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
梦醒沉醉1 天前
1、HTML入门——HTML基本语法
html
zh_xuan2 天前
github搭建个人主页
html·github
2601_963906782 天前
可自由切割与合并的 PDF 尺寸调整与打印工具
pdf
2601_965912912 天前
PDF转Word与拆分组合操作实测:从格式保真到批量处理的方案对比
pdf·word
小妖6662 天前
设置了 box-sizing: border-box; 不管用,下边框还是被挤压没了
前端·css·html