浏览器样式

您的扩展可以包含用户界面元素 - 浏览器和页面操作 弹出窗口侧边栏选项页面 - 由

  1. 创建定义 UI 元素结构的 HTML 文件。
  2. 添加一个指向该 HTML 文件的 manifest.json 键(actionbrowser_actionpage_actionsidebar_actionoptions_ui)。

您可以将这些元素的样式设置为与浏览器的样式匹配。manifest.json 键包含一个可选属性来帮助实现此目的:browser_style。如果包含此属性并将其设置为 true,则您的文档将获得一个或多个额外的样式表,以帮助使其外观与浏览器的 UI 以及使用 browser_style 属性的其他扩展保持一致。

注意:清单 V3 中对 browser_style 的支持已弃用。从 Firefox 115 开始,options_ui.browser_stylesidebar_action.browser_style 的默认值将从 true 更改为 false。在 Firefox 118 中,清单 V3 扩展将不再支持 "browser_style": true。如果您的清单 V3 扩展依赖于 "browser_style": true 样式,请按照 browser_style 的清单 V3 迁移指南 进行操作。有关更多信息,请参阅 (Firefox 错误 1827910)。如果您想将 Firefox 样式应用于您的扩展,请参阅 Firefox 样式指南

在考虑是否使用 browser_style: true 时,请使用各种主题(内置主题或来自 AMO 的主题)测试您的扩展,以确保扩展 UI 的行为符合您的预期。

警告:browser_style: true 包含在您的 Web 扩展的清单中时,除了输入控件外,扩展 UI 中的文本选择将被禁用。如果这导致问题,请改为包含 browser_style:false

注意:Google ChromeOpera 在清单 V2 中使用 chrome_style 而不是 browser_style。因此,对于跨浏览器扩展,您需要添加这两个键。清单 V3 中不提供 chrome_style

在 Firefox 中,样式表可以在 chrome://browser/content/extension.css 中看到。在 macOS 上,还会包含 chrome://browser/content/extension-mac.css 中的额外样式表。

大多数样式会自动应用,但某些元素需要您添加非标准的 browser-style 类才能获得其样式,如下表所述

元素 示例
<button>
html
<button class="browser-style">Click me</button>

<select>

html
<select class="browser-style" name="select">
  <option value="value1">Value 1</option>
  <option value="value2" selected>Value 2</option>
  <option value="value3">Value 3</option>
</select>
<textarea>
html
<textarea class="browser-style">Write here</textarea>
<input> 的父元素
html
<div class="browser-style">
  <input type="radio" id="op1" name="choices" value="op1"/>
  <label for="op1">Option 1</label>
<input type="radio" id="op2" name="choices" value="op2"/>
<label for="op2">Option 2</label>
</div>

清单 V3 迁移

由于 browser_style 在清单 V3 中已弃用,因此您可能希望在迁移清单 V2 扩展时删除支持。例如,使用 options_ui,您将执行以下步骤以删除对 browser_style 的支持

  • options_ui/browser_style 设置为 false
  • 扩展 UI 的外观是否发生了变化?
    • 如果外观没有变化,请删除该键。
    • 如果外观发生了变化,请进行实验以确定存在哪些依赖项,并在扩展的样式表中添加相关的属性。最可能导致布局更改的样式是 box-sizing:border-boxdisplay: flex。如果您无法识别依赖项,请将 extension.css 的内容与扩展一起包含,并删除所有不相关的部分,通常是 bodybody * 块,因为大多数扩展不使用 browser-style 类。

Firefox 面板组件(旧版)

注意:此功能是非标准的,仅在 Firefox 中有效。

chrome://browser/content/extension.css 样式表还包含旧版 Firefox 面板组件(导航组件)的样式。

旧版 Firefox 样式指南 文档说明了正确的用法。

元素 示例
页眉
html
<header class="panel-section panel-section-header">
  <div class="icon-section-header"><img src="image.svg"/></div>
  <div class="text-section-header">Header</div>
</header>
页脚
html
<footer class="panel-section panel-section-footer">
  <button class="panel-section-footer-button">Cancel</button>
  <div class="panel-section-footer-separator"></div>
  <button class="panel-section-footer-button default">Confirm</button>
</footer>
选项卡
html
<div class="panel-section panel-section-tabs">
  <button class="panel-section-tabs-button selected">Tab</button>
  <div class="panel-section-tabs-separator"></div>
  <button class="panel-section-tabs-button">Tab</button>
  <div class="panel-section-tabs-separator"></div>
  <button class="panel-section-tabs-button">Tab</button>
</div>
表单
html
<div class="panel-section panel-section-formElements">
  <div class="panel-formElements-item">
    <label for="name01">Label:</label>
    <input type="text" value="Name" id="name01" />
  </div>
  <div class="panel-formElements-item">
    <label for="picker01">Label:</label>
    <select id="picker01">
      <option value="value1" selected="true">Dropdown</option>
      <option value="value2">List Item</option>
      <option value="value3">List Item</option>
    </select>
  </div>
  <div class="panel-formElements-item">
    <label for="placeholder01">Label:</label>
    <input type="text" placeholder="Placeholder" id="placeholder01" />
    <button name="expander" class="expander"></button>
  </div>
</div>
菜单
html
<div class="panel-section panel-section-list">
  <div class="panel-list-item">
    <div class="icon"></div>
    <div class="text">List Item</div>
    <div class="text-shortcut">Ctrl-L</div>
  </div>
<div class="panel-list-item">
<div class="icon"></div>
<div class="text">List Item</div>
<div class="text-shortcut"></div>
</div>
<div class="panel-section-separator"></div>
<div class="panel-list-item disabled">
<div class="icon"></div>
<div class="text">Disabled List Item</div>
<div class="text-shortcut"></div>
</div>
<div class="panel-section-separator"></div>
<div class="panel-list-item">
<div class="icon"></div>
<div class="text">List Item</div>
<div class="text-shortcut"></div>
</div>
<div class="panel-list-item">
<div class="icon"></div>
<div class="text">List Item</div>
<div class="text-shortcut"></div>
</div>
</div>

示例

HTML

html
<header class="panel-section panel-section-header">
  <div class="icon-section-header"><!-- An image goes here. --></div>
  <div class="text-section-header">Header</div>
</header>

<div class="panel-section panel-section-list">
  <div class="panel-list-item">
    <div class="icon"></div>
    <div class="text">List Item</div>
    <div class="text-shortcut">Ctrl-L</div>
  </div>

  <div class="panel-list-item">
    <div class="icon"></div>
    <div class="text">List Item</div>
    <div class="text-shortcut"></div>
  </div>

  <div class="panel-section-separator"></div>

  <div class="panel-list-item disabled">
    <div class="icon"></div>
    <div class="text">Disabled List Item</div>
    <div class="text-shortcut"></div>
  </div>

  <div class="panel-section-separator"></div>

  <div class="panel-list-item">
    <div class="icon"></div>
    <div class="text">List Item</div>
    <div class="text-shortcut"></div>
  </div>

  <div class="panel-list-item">
    <div class="icon"></div>
    <div class="text">List Item</div>
    <div class="text-shortcut"></div>
  </div>
</div>

<footer class="panel-section panel-section-footer">
  <button class="panel-section-footer-button">Cancel</button>
  <div class="panel-section-footer-separator"></div>
  <button class="panel-section-footer-button default">Confirm</button>
</footer>

结果

浏览器兼容性

webextensions.manifest.action

BCD 表格仅在浏览器中加载

webextensions.manifest.browser_action

BCD 表格仅在浏览器中加载

webextensions.manifest.page_action

BCD 表格仅在浏览器中加载

webextensions.manifest.sidebar_action

BCD 表格仅在浏览器中加载

webextensions.manifest.options_ui

BCD 表格仅在浏览器中加载