简介面向产品经理、需求分析师及初入行的产品岗位学习者这份经典 PRD 模板聚焦产品需求文档的规范化撰写帮助读者在功能定义、需求评审与跨团队沟通中建立统一结构。文档围绕概要介绍、项目概述、产品环境、产品需求、用例场景、优先级与发布计划、风险评估及参考资料等模块展开并保留文档基本信息、接收人签字与修改记录等管理字段便于追踪版本变化和定位具体章节。压缩包内共 1 个 doc 文件大小约 73KB可直接作为 Word 文档编辑复用适合快速套用或按项目二次调整。已有 3199 人学习下载说明其在通用产品需求模板场景中具有一定参考价值读者可据此梳理需求边界、补充功能与非功能需求并借助优先级和风险章节完善评审材料提升 PRD 的完整度与可衡量性。1. 到底什么是 PRD一份让所有人对齐的“产品说明书”装修房子前师傅会先跟你确认一张图纸哪里做柜子、哪里留插座、水管走顶还是走地。没这张纸你说“看着办”最后大概率是砸了重来。产品需求文档Product Requirements Document简称 PRD就是软件项目里的那张图纸——它把“要做什么、为什么做、做到什么程度”写成白纸黑字让产品、开发、测试、运营看的是同一份东西。搞懂它很划算。多数项目返工不是因为技术多难而是开工时大家对“要做成什么样”各有一套理解。一份经典的产品需求模板通用结构本质是把这种理解偏差提前挤掉。下面从模板为什么长这样讲起再说清各章节在回答什么问题、哪些概念容易混。2. 为什么要有模板文档修改记录背后的协作逻辑很多人第一次见 PRD 模板反应是“字段真多”。编号、版本、章节、修改原因、日期、修改人外加一张文档修改记录表和接收人签字栏看起来像行政表格。但这些字段不是给写文档的人看的是给三个月后接手的人、给半年后要查“这条需求当初为什么这么定”的人看的。文档一旦进入多人协作最贵的成本不是写而是追溯。2.1 编号与版本为什么“第几次改”比“改了什么”更好追模板要求填两个看似重复的东西编号和文档版本。编号只是为了记录修改的顺序像流水号第 1 次改是 001第 2 次改是 002它不承载任何业务含义。文档版本显示的则是当前修改的内容属于文档的第几个版本一次修改一般记为一个版本比如 V1.0、V1.1、V2.0。编号回答“这是第几笔改动”版本回答“这份文档现在处于什么状态”。打个比方编号是快递单号版本是物流状态。单号让你能定位到具体那一次寄件状态告诉你包裹现在到哪了。两者混用会出问题有人把版本号当修改次数V1.3 之后直接跳 V1.4可中间其实合并了两次修改追溯时就对不上号也有人只写编号不写版本读者拿到文档不知道这是草稿还是已定稿。模板把两者分开是为了让“变更历史”和“当前状态”各归各。在实际填写时编号可以按项目内统一序列走版本则建议遵循一个朴素规则小改加小数位结构性调整进大版本。这样任何人拿到文档只看版本号就能判断该不该重新通读全文。血泪经验是版本号乱跳的文档通常修改记录也乱最后没人敢信它。2.2 修改原因与修改人给未来的自己留一份后悔药修改原因这一栏是整张修改记录表里最容易被敷衍、也最值钱的一栏。模板的原话是“说明为什么要修改该需求让阅读者直观的了解原因”。听起来像废话实际差别巨大。举个真实场景某模拟项目 X 里需求从“支持导出 Excel”改成了“支持导出 CSV”修改原因写“优化”的版本三个月后没人记得为什么放弃 Excel写“目标客户环境普遍打不开 xlsx且导出量级以万行计”的版本后来的人一看就懂也不会有人手痒改回去。修改人这一栏看着只是署名作用是责任到人。不是追责是当文档出现矛盾时能快速找到最了解上下文的那个人问一句。一个人名背后是一段记忆文档再详细也替代不了。写修改原因有个笨办法很有效假设三个月后有个完全没参与的人来读这一行他能不能仅凭这句话判断“这次改动该不该做”。如果写的是“按领导要求”那等于没写如果写的是“按某次用户访谈反馈结算页字段过多导致放弃率上升”这就是有效信息。模板给了字段填法决定了它是档案还是废纸。2.3 章节定位与接收人签字文档不是发出去就算送达模板里“章节”这个字段指的是具体到修改内容属于哪个功能模块以便阅读人及时找到修改后的内容。它的价值在文档变长之后才显现一份几十页的 PRD第十次修改只动了“性能需求”里的一行如果修改记录只写“修改了需求”读者得从头翻到尾。写上章节相当于给每次改动贴了坐标。文档接收人签字则是另一层保障接收方确认已阅读和理解文档确保信息传递的有效性。签字不是走形式它制造了一个“必须读完”的时刻。很多团队把签字搬到线上用一次简短的评审会替代效果类似——重点不是那个签名而是有人真的把文档从头到尾过了一遍并当众确认“我理解的和写的一致”。这三组字段合起来构成模板的第一层逻辑让文档可追溯、可定位、可确认。缺了任何一环PRD 就会退化成“某个人电脑里的一个 Word 文件”。而一份没人能追溯的文档写得再漂亮也只是自我感动。3. 概要介绍与项目概述前半段在回答“为什么做”翻到模板正文第一章叫概要介绍第二章叫项目概述很多人会跳过这两章直接看功能需求。这恰恰是 PRD 最容易被写废的地方。功能需求回答“做什么”前两章回答“为什么值得做”后者才是让开发愿意为一个 odd 需求加班、让评审会上没人抬杠的底层依据。3.1 市场问题、产品问题、技术问题三种“问题”不是一回事模板在概要介绍里并列了三个问题市场问题、产品问题、技术问题。名字都叫问题指向完全不同。市场问题分析的是市场存在的问题和机遇解释产品产生的背景和市场需求。通俗地说就是“外面发生了什么让我们觉得这事该做”。比如某类工具在目标人群里的使用率在涨但现有供给集中在少数场景这就是市场层面的空档。产品问题指出现有产品或竞品的不足为新产品的设计提供方向。它关注的是“别人哪里没做好”。竞品功能堆得满但上手门槛高、客服响应慢、导出格式单一这些都算。写这一节最忌讳泛泛说“竞品体验差”要具体到哪个环节、哪类用户、什么表现。技术问题探讨可能的技术挑战和解决方案为技术团队提供技术路线参考。它不是说“我们要用某某框架”而是提前把“这事难在哪”摆上桌比如数据量级、实时性要求、第三方依赖的稳定性。三者混在一起写评审时就会出现鸡同鸭讲产品在讲市场机会开发在担心技术风险谁也没说服谁。分开写的好处是每类问题有自己的判据市场问题看数据和趋势产品问题看竞品拆解技术问题看可行性和成本。打个比方开一家早餐店市场问题是这条街有没有人吃早餐产品问题是现有早餐店是不是太油、太慢技术问题是出餐流程能不能在三十秒内完成。三个都成立这事才值得往下走。3.2 产品概念一句话说清“你到底是什么”产品概念这一节模板给的任务是初步定义产品的核心价值和独特卖点。听起来像口号实际是整份文档的锚点。写不清楚这一节后面所有功能需求都会漂。判断有没有写清楚有个简单标准一个没参与项目的人读完这句话能不能用自己的话向第三个人转述且不失真。比如“一个面向小团队的记账工具主打三分钟内完成一笔记录”这就是有效概念“一个平台化、智能化的财务解决方案”这种听起来高级转述时必然走样。产品概念不是功能列表也不是愿景宣言。它要同时装下三样东西给谁用、解决什么核心问题、凭什么比现有选择好一点。三样缺一概念就会虚。很多文档在这一节翻车不是因为写得少而是因为写得太满把十几个卖点塞进一句话结果一个也没记住。留一个最硬的卖点剩下的交给后面的需求章节去证明。3.3 目标市场与目标客户别把“所有人”当客户项目概述里模板要求写目标市场描述和目标客户描述。前者明确产品的目标市场包括市场规模、趋势和潜力后者详细描绘目标用户群体包括他们的特征、需求和行为模式。两者经常被写成同一段话其实是两个视角市场是“盘子有多大、在往哪走”客户是“具体是谁、他每天怎么用”。写目标市场重点不是把数字堆得多漂亮而是说清这个市场的边界和变化方向。写目标客户重点不是画一个完美用户画像而是找出那群人身上真正影响产品决策的特征。比如做一款会议记录工具目标客户里“每周开会超过十小时、会后需要整理待办”这个特征比“25 到 40 岁、本科以上”有用得多前者决定功能优先级后者只适合放进宣传物料。一个常见毛病是把客户写成“所有人”。所有人等于没有人因为不同人群的需求会互相打架。模板把这一节单独列出来就是逼着写作者做取舍先服务哪群人暂时放弃哪群人。这个取舍写明白了后面的功能需求才有排序依据。3.4 文档摘要给没时间的人一个入口概要介绍的第一节是文档摘要模板的定义很朴素简要介绍整个 PRD 的主要内容为繁忙的读者提供快速了解。它放在最前面但建议最后写。因为只有全文定稿你才知道哪三件事最值得放进这三百字。摘要不是目录的散文版也不是背景铺垫。它应该让一个只读这一节的人能判断“这份文档跟我有没有关系、我要不要往下看”。写的时候可以问自己如果评审会上只给我两分钟我会讲哪三句话。把这三句话写顺摘要就成了。4. 产品环境与产品需求把“做什么”落到可检查的条目PRD 的核心章节是产品需求但模板在它前面先放了产品环境。顺序不是随意的先划清边界再谈功能能少掉很多“这个要不要做”的争论。这一章讲的就是边界和条目的写法。4.1 约束条件与假设条件一个不能动一个可能会变产品环境里有两节约束条件和假设条件。名字像性质相反。约束条件是影响产品设计和开发的限制比如预算、时间表、法规要求。它的特点是“不由你决定但你必须接受”。写约束要写死不能写成“预算有限”这种废话要写成“首版开发周期不超过十周”“必须支持某类合规要求”。约束写清楚了功能优先级自然就有了取舍依据。假设条件是对产品成功至关重要的假设比如市场接受度、技术可行性。它的特点是“你暂时当成真的但它可能被证伪”。假设要写得可验证最好附上验证方式。比如“假设目标客户愿意为自动整理付费”后面就该跟一句“通过首版上线后的付费转化观察”。假设不写验证方式就会慢慢变成没人敢质疑的“事实”这是很多项目翻车的起点。打个比方约束是房子的承重墙不能动假设是你猜“这间房朝南冬天会暖和”住进去发现漏风就得回头改。两者放在产品环境里是提醒读者哪些是硬边界哪些是待验证的判断。4.2 功能需求与需求概要表PR ID 和 MR ID 怎么对上产品需求章节的第一块是功能需求模板给的字段是需求描述、PR ID、实现目标、约束条件、MR ID。后面还有一张产品需求概要表字段包括 PR ID、实现目标、约束条件、MR ID、类别、优先级。两处字段基本对应概要表是给快速浏览用的索引。PR ID 是产品需求的编号MR ID 在模板里没有展开解释通常理解为这条需求对应的上游需求编号比如来自市场或管理侧的需求单号。它的作用是回溯当有人问“这条功能当初是谁提的、对应哪个业务目标”顺着 MR ID 能找回去。没有这层关联需求就会变成从石头里蹦出来的条目。一个便于团队统一填写的结构可以长这样# 单条功能需求的元数据示例字段名可按团队习惯替换 requirement: pr_id: PR-014 # 产品需求编号项目内唯一 title: 批量导出账单 # 需求描述的精简版 goal: 让财务人员一次导出整月数据 # 实现目标写结果不写手段 constraint: 单次导出不超过 5 万行 # 该需求自身的约束 mr_id: MR-003 # 关联的上游需求编号用于回溯 category: 功能需求 # 与性能、兼容等非功能需求区分 priority: P1 # 优先级需与发布计划对齐这段结构不是要求照抄而是说明每个字段各自承担什么。pr_id保证唯一可引用goal要写清实现目标而不是实现方式constraint只写这条需求特有的限制mr_id负责向上追溯category和priority让概要表能排序。字段填不全都比乱填强最怕的是goal写成“优化导出功能”这种无法验收的表述。需求描述本身也有讲究一条需求只描述一件事能用一个动作加一个结果说清。把“支持导出、支持筛选、支持定时任务”塞进一条后面测试没法判断通过标准排期也没法拆。模板把需求描述和实现目标分开就是逼着写作者先想清楚“做出来是为了什么”再写“做成什么样”。4.3 一长串非功能需求兼容、性能、国际性、文档、外观、发布、支持培训功能需求之后模板列了一串容易被跳过的章节开发需求、兼容性需求、性能需求、国际性需求、文档需求、外观需求、发布需求、支持和培训需求最后还有其它需求、方案概述、方案技术概述。这些统称非功能性需求它们不直接对应某个按钮但决定了产品能不能真的被用起来。可以拿一张表把它们各自管什么说清楚需求类型回答的问题漏写后的典型后果兼容性需求要在哪些环境、设备、版本上可用上线后部分用户打不开性能需求多快、多稳、能扛多大数据量数据一多就卡死国际性需求多语言、时区、本地格式海外用户看到乱码日期文档需求需要哪些说明书、帮助文档客服被重复问题淹没外观需求界面风格、品牌规范设计与品牌脱节返工发布需求什么时间、以什么方式上线发布当天手忙脚乱支持和培训需求谁来做支持、用户怎么学会上线后无人接盘这些条目看着琐碎价值在于把“到时候再说”变成“现在就得想”。性能需求尤其容易写虚写“响应要快”等于没写写“在万行数据量下列表首屏加载不超过两秒”才是可检查的。兼容性需求同理列出具体环境和版本比写“主流浏览器都支持”有用得多。方案概述和方案技术概述放在需求章节末尾作用是给技术团队一个路线参考而不是替他们做技术选型。写的时候点到为止说清有哪些可行路径、各自代价是什么把决定权留给实现方。产品需求概要表则把前面所有条目收拢成一张索引方便评审时逐条过、逐条定优先级。5. 常见误区与易混概念PRD 不是“写完就完事”PRD 这个词被用得很泛不同团队说的可能不是同一件事。这一章把最容易混的几个概念拆开顺便说说初学者最常踩的坑。5.1 PRD、MRD、需求文档名字像管的事不一样PRD 是产品需求文档重心在“产品要做成什么样”读者主要是开发和测试。MRD 是市场需求文档重心在“市场上需要什么”读者偏向业务和决策层。日常说的“需求文档”是个更大的筐可能指 PRD也可能指一份简单的需求清单。区分方法看两点这份文档的验收对象是谁以及它是否包含功能细节。只讲市场机会、不讲功能条目的不是 PRD只列功能、不讲目标和约束的也算不上合格的 PRD。5.2 五个最容易踩的坑坑一把 PRD 当技术方案写。易混点在于两者都要描述“怎么做”。为什么混写需求时很容易顺手把实现方式写死。怎么区分PRD 写约束和目标技术方案写路径和取舍前者说“必须支持五万行导出”后者说“用流式导出还是分页”。坑二把版本号当修改次数。易混点在于两者都随时间递增。为什么混模板同时给了编号和版本两个字段。怎么区分编号是流水号只记顺序版本是文档状态反映内容层级变化。改一次加一个编号但版本可以跳。坑三把假设条件当结论。易混点在于假设写下来很像事实。为什么混假设条件往往写得笃定。怎么区分假设后面必须跟验证方式没有验证方式的假设要么补上要么降级成待确认项。坑四把功能需求当全部需求。易混点在于功能最显眼。为什么混评审会上大家最关心“有没有这个按钮”。怎么区分功能需求只占模板第四章的一部分性能、兼容、发布、培训同样要过一遍漏了任何一个都可能在发布时翻车。坑五把接收人签字当形式。易混点在于签字只是一个动作。为什么混很多团队把签字当成流程终点。怎么区分签字的前提是读完并确认理解如果签字人答不出文档的核心目标这个签字就没有意义。6. 什么时候该用这份模板什么时候别用这份模板适合的场景很明确多人协作、需求会变、需要向上追溯的项目。比如某公司要做一款内部工具产品、开发、测试分属不同小组需求来自多个部门改动频繁那就值得按模板把修改记录、需求编号、约束条件填起来。它解决的不是“写得更长”而是“改了之后还有人能看懂”。尤其是需求条目带 PR ID 和 MR ID 的设计在跨部门协作里能省掉大量“这条是谁提的”的追问。不适合的场景同样明确。三五个人两周做完的模拟项目 X需求一句话能说清硬套完整模板就是给自己找活干。另一种不适合是探索性极强的早期产品方向一周一变此时把假设条件写得再严谨也会立刻过期不如先用一页纸把产品概念和目标客户写清楚等方向稳了再补全模板。判断标准可以收成一张简单的表场景建议多人协作、需求会变更用完整模板重点填修改记录和需求条目小团队短周期、需求单一只用产品概念、目标客户、功能需求三节方向未定的探索期先用一页纸模板留到方向收敛后需要跨部门追溯来源保留 PR ID 与 MR ID 关联纯内部试验、无外部交付可省略发布和培训需求还有一个边界要注意模板是检查清单不是评分表。把每一节都填满不代表文档合格填了但没人读、读了但理解不一致照样白搭。真正决定 PRD 价值的是修改原因写得够不够具体、需求目标写得够不够可验收、假设条件有没有验证方式这三件事跟模板长度无关。我刚带项目那会儿觉得填修改记录是浪费时间有次直接把旧版本覆盖保存结果两周后开发拿着两份不同的需求来对质我翻遍聊天记录也说不清哪版为准。从那以后我每次改 PRD 都强制走一遍修改记录编号、版本、章节、原因、修改人一个不落。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
SRS软件需求规约落地:六板块契约、质量量化与验收走查 简介:面向软件开发团队、项目经理、需求分析与测试人员的IBM需求规约模板案例,围绕软件需求规约(SRS)的编写要求展开,可用于建立规范的需求文档框架、梳理功能性需求与非功能性需求,并为设计、开发、测试和… · 2026/11/4 12:18:10
UML笔试与建模面试高频考点:图种判定、用例关系与UP四阶段 简介:围绕UML用例图、顺序图与协作图等交互图知识整理的试题合集,面向正在学习面向对象分析与设计、准备课程考试或面试复习的学生与开发者,帮助梳理UML核心概念并检验掌握程度。压缩包内为1个doc文档,约62KB,内容以问… · 2026/11/4 12:18:10
STP生成树协议深度解析:BPDU、根桥选举与端口状态 一、STP协议概述:理解网络环路与生成树机制
1.1 STP协议的起源与目标
STP(Spanning Tree Protocol)生成树协议是IEEE 802.1D标准定义的一种网络协议,主要用于防止以太网中的环路问题。在二层网络中,当存在冗余链路时&a… · 2026/11/4 12:17:07
流媒体服务器日志轮转方案与优化实践 1. 项目背景与需求解析在流媒体服务器运维过程中,日志管理是个容易被忽视却至关重要的工作环节。以ZLMediaKit这类高性能流媒体服务器为例,默认配置下日志会持续追加到单个文件中,长期运行后可能产生几个GB甚至更大的日志文件,不仅… · 2026/11/4 15:18:09
TSM6.3+mhvtl虚拟带库实现Oracle/DB2异机恢复闭环 简介:本资源是一份面向企业级数据备份与灾备工程师、DBA及Linux系统运维人员的TSM 6.3实战测试文档,聚焦虚拟带库环境下的Oracle与DB2数据库全链路备份恢复验证。文档完整覆盖Mhvtl虚拟磁带库在CentOS 6.5上的编译部署与iSCSI映射、TSM主服务器安装与存储… · 2026/11/4 15:18:09
ComfyUI插件wheel化:custom_nodes薄壳入口与依赖管理 1. 先搞清楚 ComfyUI 是怎么加载插件的,再谈 wheel把 ComfyUI 的插件构建成 wheel 文件并安装,听起来只是把pip install换个姿势,真动手之后你会发现,难点根本不在打包那几条命令,而在于 ComfyUI 对插件的发现机制和 P… · 2026/11/4 15:18:09
Chrome本地运行Axure原型:绕过file://限制的插件方案 简介:这是一款专为Chrome浏览器设计的Axure RP原型设计辅助插件,面向产品经理、UI/UX设计师及前端开发人员,解决网页原型设计与真实页面比对、测量、注释和截图效率低下的问题。资源包共8个文件,含2个核心JS脚本(实现扩… · 2026/11/4 15:18:09
PostgreSQL存储对齐机制与表体积膨胀优化 1. 问题背景与现象观察最近在排查一个PostgreSQL数据库性能问题时,发现一个奇怪现象:某张业务表的数据量增长曲线与业务实际增长量严重不符。明明每天新增记录只有1万条左右,但表体积却以每天200MB的速度膨胀。经过深入分析,发现这… · 2026/11/4 15:18:09
SAP S/4HANA采购主数据实战避坑指南:MM01、OMS2与BP配置关键逻辑 简介:本资源是SAP S4 HANA采购模块(S4520)的中文版系统化教程,专为SAP应用顾问、项目经理及企业最终用户设计,聚焦供应链管理中的采购全流程实践与配置能力提升。内容覆盖从采购主数据创建(物料主记录、业务… · 2026/11/4 15:17:08
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38