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

相关推荐
এ慕ོ冬℘゜12 小时前
html理论
前端·html
是立不是利13 小时前
HTML 的尊严:一种被低估的语言
前端·html
anOnion14 小时前
构建无障碍组件之Landmarks Pattern
前端·html·交互设计
鲲穹AI种草1 天前
PDF 文档多格式转换处理,多款 PDF 处理工具能力客观记录
pdf·文档格式转换
xy34531 天前
Axure9.0中继器遮罩实现方法
前端·ui·html·axure·原型·产品设计
Felicia-侧听1 天前
PDF怎么转换成OFD?在线PDF转OFD方法
pdf·pdf转换·ofd·电子发票·文件格式转换·pdf转ofd·ofd格式
大梦想家a2 天前
基于 HTML+CSS 的个人生活主页设计与实现
css·html·生活
雪芽蓝域zzs2 天前
第二十七节:进阶:路由权限控制 + 404 / 401 全局异常页面开发
前端·javascript·html
平头哥技术团队2 天前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
开开心心_Every2 天前
实现鼠标键盘动作录制与重复播放的工具
微信·jupyter·pycharm·pdf·计算机外设·word·excel