news 2026/9/19 13:41:53

Bilibili-Evolved 简化评论区(simplifyComments)功能解析:从配置项到源码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bilibili-Evolved 简化评论区(simplifyComments)功能解析:从配置项到源码实现

Bilibili-Evolved 简化评论区(simplifyComments)功能解析:从配置项到源码实现

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

导读

"简化评论区"是 Bilibili-Evolved 增强脚本中一个专注净化评论区视觉体验的样式类组件,它通过一系列可开关的配置项,隐藏或优化新版评论区中的用户等级、装扮、头像框、粉丝勋章、小喇叭横幅等冗余元素,并微调回复排版与编辑框细节。本文以该组件的官方说明文档 registry/lib/components/style/simplify/comments/index.md 为主体,结合其入口实现与样式源码,完整讲解 6 个配置项的作用、默认值与底层实现原理。读完本文,你将掌握该组件每个开关的精确行为,理解其如何兼容新版评论区(含 Shadow DOM)与 Firefox 浏览器,并能据此在 Bilibili-Evolved 设置面板中按需定制评论区外观。

一、组件概览:它到底简化了什么

"简化评论区"(英文标识simplifyComments,显示名"简化评论区")属于 Bilibili-Evolved 的样式类组件,其核心目标可以用一句话概括:去除或优化评论区内的元素,让评论区更干净、更聚焦于内容本身。

从组件入口 index.ts 可以看到,它通过wrapSwitchOptions封装为"开关组"形态,在设置面板中以多个独立开关的形式呈现,每个开关对应一个布尔配置项,组件标识为simplifyOptions。同时,组件还注册了instantStyles(即插即用样式):

  • comments.scss:作用于 v1 旧版评论区;
  • comments-v2.scss:作用于 v2 新版评论区(非 Shadow DOM 部分)。

重要前提:官方文档明确指出,所有配置项仅对新版评论区有效。旧版评论区只会套用基础样式(图标统一、布局微调等),不响应下方各开关。

组件开关启用后,还会在document.body上切换simplify-comment类,作为整体生效标记:

addComponentListener( metadata.name, (value: boolean) => { document.body.classList.toggle('simplify-comment', value) }, true, )

二、六个配置项逐一详解

以下配置项均可在 Bilibili-Evolved 设置面板中勾选。以下描述均为勾选时的效果,各开关的默认值与行为依据 index.ts 与 comments-v2.scss、comments-v3.scss。

1. 用户等级(userLevel,默认开启)

隐藏评论者昵称旁的用户等级标识(如 LV5 等级图标)。

  • 隐藏方式:通过 CSS 将等级元素display: none。v2 样式中对应.user-level, .sub-user-level,v3 样式中对应 Shadow DOM 里的bili-comment-user-info内的#user-level
  • 替代查看途径:隐藏后,将鼠标停留在评论者头像上,在弹出的资料卡小窗中仍可查看等级信息,不会完全丢失该数据。

2. 装扮 & 时间(decorateAndTime,默认开启)

隐藏评论者的装扮(挂件)图片,并把发送时间移动到原本装扮所在的位置。

  • 实现细节:v2 样式中隐藏.reply-decorate,同时将.reply-time.sub-reply-time改为绝对定位(position: absolutetop: 0right: 0),使时间文本占据右上角装扮原本的显示区域;v3 样式中对应隐藏bili-comment-user-sailing-card(航行装扮卡片)。
  • 视觉效果:装扮被移除后,时间信息被"上提"到第一行右侧,行内空间得到更充分的利用。

3. 回复换行(subReplyNewLine,默认开启)

将楼中楼回复也另起一行显示,与一级回复的排版保持一致。

  • 实现细节:v2 样式中对.root-reply采用 flex 布局(display: flex; align-items: center; flex-wrap: wrap),并将.reply-content-container设置为flex-basis: 100%,强制内容独占一行;reply-tag-list(标签列表)则与点赞栏排在同一行,并右移18px缩进。
  • 附带效果:文档特别说明,勾选后"热评"、"UP 主点赞"等标记(对应.reply-tag-item)与点赞栏(操作栏)放在同一行,减少纵向高度占用。

4. 编辑框(replyEditor,默认开启)

优化评论区发布框的排版细节:将提示文本(placeholder)居上显示,使其更贴近用户实际输入文字的位置;同时将发布按钮的字号略微调小。

  • 实现细节:v2 样式中将.reply-box-textarealine-height设为normal,并将.reply-box-send .send-text字号设为14px;v3 样式中对应调整bili-comment-box #pub button(14px)、bili-comment-textarea #input(13px)以及复选框bili-checkbox #label(15px)的字号。
  • 目的:避免长提示文本在输入框内居中显示造成遮挡感,让占位文字与光标起始位置一致。

5. 粉丝勋章(fansMedal,默认关闭)

隐藏评论者昵称旁的粉丝勋章(含勋章等级)。

  • 实现细节:v2 样式中隐藏.fan-badge;v3 样式中隐藏bili-comment-user-info内的bili-comment-user-medal
  • 注意:该开关默认关闭(defaultValue: false),即默认保留粉丝勋章,需要用户主动勾选才会隐藏。

6. 小喇叭横幅(eventBanner,默认开启)

隐藏评论区顶部的小喇叭(官方活动公告)横幅。

  • 实现细节:v2 样式中隐藏.reply-notice;v3 样式中隐藏bili-comments-header-renderer内的bili-comments-notice

配置项速查表

配置项(开关 key)显示名默认值隐藏/优化的目标
userLevel用户等级等级标识(头像悬停资料卡仍可查看)
decorateAndTime装扮 & 时间装扮图片;时间上移到装扮位置
subReplyNewLine回复换行楼中楼回复另起一行;标记与点赞栏同行
replyEditor编辑框提示文本居上;发布按钮字号调小
fansMedal粉丝勋章粉丝勋章
eventBanner小喇叭横幅评论区顶部小喇叭横幅

三、配置方式

在 Bilibili-Evolved 的设置面板 → 样式分类中找到"简化评论区"组件(其标签为componentsTags.style),即可看到上述开关组。每个开关独立生效、互不影响,勾选后即时应用,无需刷新页面。由于组件通过addComponentListener监听配置变化,用户在任何时刻切换开关,样式都会实时增删(详见下文实现原理)。

四、实现原理:一份组件,三种样式,两条渲染路径

"简化评论区"最值得称道的是其对评论区多版本、多浏览器的兼容设计。从 index.ts 的入口逻辑可以看出,它实际加载了三份样式、运行在两条路径上。

4.1 三份样式分别服务谁

样式文件作用对象
comments.scssv1 旧版评论区(.bb-comment),主要做图标统一、操作栏排序、时间定位等基础优化,不含各开关逻辑
comments-v2.scssv2 新版评论区(.bili-comment),通过body.simplifyComments-switch-<key>类选择器响应各开关
comments-v3.scssv3 新版评论区(Shadow DOM 内),通过@container style(...)容器样式查询响应各开关

4.2 路径一:支持容器样式查询的浏览器(主流浏览器)

v3 评论区将大量 DOM 封装在 Shadow DOM 中(元素如bili-comment-rendererbili-comment-user-info等),外部全局 CSS 无法直接穿透。为此组件利用现代 CSSContainer Style Queries(容器样式查询),把每个开关状态以自定义属性形式暴露,例如:

@container style(--simplifyComments-switch-userLevel: true) { :host(bili-comment-user-info) { #user-level { display: none; } } }

即:当容器自定义属性--simplifyComments-switch-userLeveltrue时,隐藏 Shadow DOM 内的等级元素。这份样式通过shadowRootStyles.toggleWithComponent注入到评论区组件的 Shadow Root 中。

4.3 路径二:Firefox 回退方案(逐开关动态注入)

由于 Firefox 当时尚未支持 Container Style Queries,入口代码先通过 src/core/container-query.ts 的isContainerStyleQuerySupported()做特性检测——其原理是向文档注入一个@container style(...)规则并读取计算后的自定义属性值来判断支持与否:

export const isContainerStyleQuerySupported = lodash.once(() => { return ( window.getComputedStyle(document.body).getPropertyValue('--container-query-supported') === 'true' ) })

在不支持的浏览器(Firefox)中,组件改用require.context('./comments-v3-firefox', false, /\.scss$/)动态收集 comments-v3-firefox 目录下的 6 个样式文件,文件名与开关 key 通过lodash.kebabCase相互转换(如userLeveluser-level.scss)。随后为每个开关注册监听器:勾选时通过addStyle将对应样式注入主文档与 Shadow Root,取消时按样式 ID 移除。该目录下的样式与 v3 样式一一对应:

开关Firefox 回退样式核心规则
用户等级user-level.scss隐藏#user-level
装扮 & 时间decorate-and-time.scss隐藏bili-comment-user-sailing-card
回复换行sub-reply-new-line.scss用户信息块改为display: block
编辑框reply-editor.scss发布按钮 14px、输入框 13px、提示文本line-height: normal
粉丝勋章fans-medal.scss隐藏bili-comment-user-medal
小喇叭横幅event-banner.scss隐藏bili-comments-notice

代码注释中说明:等 Firefox 支持 Container Style Queries 后,可移除这一整条回退分支,统一走 v3 样式。

4.4 旧版评论区的基础优化

即便对于已不受开关控制的旧版评论区(v1),comments.scss 也做了不少细节优化,包括:

  • 将楼中楼信息栏重新排序(楼层 → 回复 → 标签 → 操作栏,操作栏右对齐);
  • 点赞/点踩/举报图标统一替换为 Material Design Icons(@mixin mdi),并支持暗色模式反色;
  • 隐藏回复通知栏(.reply-notice)、投票容器(.vote-container)等冗余元素;
  • 对 lite 版发评论框做吸底(sticky)适配。

这些优化不依赖任何开关,是组件的基础净化能力。

五、从源码看设计要点

  1. 默认值体现产品取舍:6 个开关中只有"粉丝勋章"默认关闭,其余全部默认开启,反映出作者认为等级、装扮、横幅属于高干扰元素,而粉丝勋章属于用户可接受甚至愿意展示的身份标识,故默认保留、由用户自行决定。
  2. 开关与样式的解耦:v2 样式通过body.simplifyComments-switch-<key>类选择器响应开关,v3 样式通过@container style(...)响应,两者都不需要 JS 逐条操作 DOM,仅靠配置监听器切换 body 类或注入/移除样式,性能开销极小。
  3. 渐进增强的兼容策略:优先使用现代 CSS 特性(容器样式查询),对不支持的老浏览器提供等价的逐开关样式回退,保证功能在所有目标浏览器上一致。

结语

"简化评论区"是 Bilibili-Evolved 样式类组件中"小功能、精实现"的典型代表:文档虽短,但背后的源码同时覆盖了旧版评论区、新版评论区(Shadow DOM)和 Firefox 兼容三条战线。理解这 6 个开关的默认值与行为,你就能在设置面板中一键获得更清爽的评论阅读体验;读懂 index.ts 与两份 v3 样式,也能为你在其他组件中处理 Shadow DOM 样式注入与浏览器兼容问题提供直接参考。

【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 13:40:32

Unity3D虚拟化学智能课堂系统开发:从规则建模到数据闭环

简介&#xff1a;一份基于 Unity3D 的虚拟化学智能课堂系统论文 PDF&#xff0c;适合中学化学教师、教育技术研究者以及 Unity/VR 方向开发人员阅读。系统针对传统化学教学实验条件受限、安全隐患多的问题&#xff0c;采用 Unity3D 引擎结合 C# 脚本与粒子系统构建高仿真虚拟实…

作者头像 李华
网站建设 2026/9/19 13:38:54

SpringDataRedis核心功能与实战应用指南

1. SpringDataRedis 项目概述SpringDataRedis 是 Spring 生态中用于简化 Redis 操作的官方模块&#xff0c;它封装了 Jedis、Lettuce 等 Redis 客户端&#xff0c;提供统一的模板化 API。我在电商系统的秒杀模块和分布式会话管理中多次使用该框架&#xff0c;实测能减少 60% 以…

作者头像 李华
网站建设 2026/9/19 13:38:50

Python量化交易:网格策略实现与TqSdk实战

1. 网格交易策略基础解析网格交易策略是我在量化交易领域最常使用的策略之一&#xff0c;它的核心思想简单却有效。想象一下在渔场撒网捕鱼&#xff1a;我们把网&#xff08;网格&#xff09;均匀地撒在价格波动的区间内&#xff0c;无论价格往哪个方向波动&#xff0c;都能&qu…

作者头像 李华
网站建设 2026/9/19 13:38:24

学生选课成绩分析系统实战:Flask+Vue+ECharts前后端分离开发

做学生选课成绩分析这个系统&#xff0c;我踩了不少坑&#xff0c;也攒了不少可以直接抄作业的方案。这个项目从标题看涉及 Flask、Vue、Django、PyCharm 一整套东西&#xff0c;但本质上就是一个典型的前后端分离 Web 应用&#xff0c;核心是做学生选课、成绩管理&#xff0c;…

作者头像 李华
网站建设 2026/9/19 13:38:15

VS Code报错Could not register service worker?精准清理与排查指南

1. 这个报错到底卡在哪一环VS Code 里弹出“加载Web视图时出错: Error: Could not register service worker: InvalidStateError”&#xff0c;第一反应往往是重启编辑器&#xff0c;但重启十次有九次还是老样子。这个报错的核心不在 VS Code 主进程&#xff0c;而在它内嵌的El…

作者头像 李华
网站建设 2026/9/19 13:37:58

Centos7安装Mysql5.7(超详细版)

文章目录一、下载mysql5.7的安装包①、选择linux版的②、选择64bit&#xff0c;根据自己的情况来看③、选择下载tar包④、点击下载⑤、等待下载完二、上传到服务器三、检查服务器是否安装过mysql服务四、卸载Centos7自带的mariadb①、查找系统自带的mariadb②、卸载系统自带的m…

作者头像 李华