# css-diff-devtools **Repository Path**: jevin98/css-diff-devtools ## Basic Information - **Project Name**: css-diff-devtools - **Description**: A browser extension that compares different CSS - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-03-30 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: Chrome扩展 ## README
CSS-Diff logo

CSS-Diff

English | 简体中文

CSS-Diff 是一个用于比较两个 DOM 元素计算后 CSS 的 DevTools 侧边栏扩展。它面向前端调试场景:在 Elements 面板中选择两个元素,即可查看哪些样式发生了变化、搜索指定属性,并一键复制 CSS 声明。

https://github.com/user-attachments/assets/1766e65e-fa31-4095-93d1-f247daa0e8e7 ## 为什么使用 CSS-Diff? 浏览器 DevTools 很适合检查单个元素,但当两个相似元素渲染结果不一致时,仍然经常需要在样式面板之间来回切换。CSS-Diff 会把两个元素的 computed style 放在同一张表中,优先展示差异,并让整个排查流程停留在 DevTools 内完成。 ## 功能特点 - **DevTools Elements 侧边栏**:在 Elements 面板中直接添加 `CSS-Diff` 面板。 - **双元素比较**:选择两个 DOM 元素后,比较它们标准化后的计算 CSS 属性。 - **差异优先展示**:默认只展示有差异的属性,也可以通过 `显示全部` 查看完整 computed style 列表。 - **属性搜索**:按 CSS 属性名过滤对比结果。 - **一键复制**:点击任意左右侧样式值单元格,即可复制 `property: value;`。 - **原生页面悬停高亮**:在差异表格中悬停源/目标 DOM 行时,会在被检查页面中高亮对应 DOM 节点,鼠标移出后立即取消高亮。 - **跨窗口/标签页同步**:选中的元素数据会同步广播到其他已打开的窗口/标签页,便于并排比较不同页面状态。 - **本地化界面**:内置英文和简体中文浏览器 i18n 文案。 ## 安装 > [!WARNING] > CSS-Diff 目前暂未上架浏览器扩展商店。 从 [Releases](https://github.com/jevin98/css-diff-devtools/releases) 下载打包后的 zip 文件,然后在浏览器扩展程序页面中手动安装或加载。 ## Chrome Debugger 权限 CSS-Diff 会请求 Chrome 的 `debugger` 权限,用于通过 Chrome DevTools Protocol 的 `Overlay.highlightNode` 和 `Overlay.hideHighlight` 命令实现差异表格 DOM 行的页面高亮,并在鼠标移出时立即取消高亮。 Chrome 会把该权限视为敏感权限: - 安装或更新扩展时,Chrome 可能显示权限警告。 - 扩展附加到当前页面时,Chrome 可能显示“正在调试此浏览器/页面”的提示。 - CSS-Diff 仅将该权限用于 DevTools 侧边栏中的临时 DOM 悬停高亮。 - 如果未授予该权限,CSS 对比功能仍可使用,但被检查页面中的原生悬停高亮不可用。 ## 使用方法 1. 打开需要检查的页面。 2. 打开 DevTools,并切换到 Elements 面板。 3. 打开 `CSS-Diff` 侧边栏。 4. 先选择第一个 DOM 元素,再选择第二个 DOM 元素。 5. 查看高亮的样式差异、搜索属性,或启用 `显示全部`。 6. 在差异表格中悬停源/目标 DOM 行,在被检查页面中高亮对应 DOM 节点。 7. 点击左侧或右侧的样式值单元格,复制对应 CSS 声明。 8. 点击 `清除选择` 开始新的比较。 ## 本地开发 安装依赖: ```sh pnpm install --frozen-lockfile ``` 启动开发构建: ```sh pnpm dev ``` 其他浏览器目标: ```sh pnpm dev:firefox pnpm dev:edge ``` ## 构建 构建全部支持目标: ```sh pnpm build ``` 构建单个目标: ```sh pnpm build:chrome pnpm build:firefox pnpm build:edge ``` 打包扩展: ```sh pnpm zip ``` ## 测试 本项目使用 Vitest 进行单元/组件测试,并使用 Playwright 对构建后的面板做冒烟测试。 ```sh pnpm test pnpm test:coverage pnpm test:e2e ``` - `pnpm test` 会运行快速 Vitest 测试,覆盖 CSS diff 纯工具、DOM 样式格式化和 Vue DevTools 面板外壳。 - `pnpm test:coverage` 会在本地 `coverage/` 目录下生成覆盖率报告。 - `pnpm test:e2e` 会先构建 Chrome 扩展,然后在本地服务 `.output/chrome-mv3` 并验证构建后的 DevTools 面板可以正常渲染。 ## 技术栈 - [pnpm](https://pnpm.io/) 用于包管理 - [WXT](https://wxt.dev/) 用于浏览器扩展开发 - [Vue 3](https://vuejs.org/) 搭配 TypeScript 用于 DevTools 面板 UI - shadcn-vue 风格的本地组件、[Reka UI](https://reka-ui.com/) 和 [lucide-vue-next](https://lucide.dev/) 用于 UI 基础组件与图标 - [Tailwind CSS v4](https://tailwindcss.com/) 用于样式和设计 token - `vue-tsc`、[Vitest](https://vitest.dev/) 和 [Playwright](https://playwright.dev/) 用于类型检查与验证 - WXT/browser `i18n` 用于本地化文案 ## 灵感来源 - https://github.com/kdzwinel/CSS-Diff ## 许可证 [MIT](./LICENSE.md)