Стили браузера
Определённые компоненты пользовательского интерфейса — браузерные и страничные действия поп-упа, боксы и страницы настроек — задаются расширением в основном одинаковым образом:
- создайте HTML-файл, определяющий структуру элемента пользовательского интерфейса
- добавьте ключ manifest.json (
browser_action,page_action,sidebar_actionилиoptions_ui), указывающий на этот HTML-файл.
Одна из задач этого подхода — стилизация элемента таким образом, чтобы он соответствовал собственному стилю браузера. Для этого ключи manifest.json включают дополнительное необязательное свойство: browser_style. Если оно включено и установлено в значение true, ваш документ получит один или несколько дополнительных таблиц стилей, которые помогут ему выглядеть согласованно с пользовательским интерфейсом браузера и другими расширениями, использующими свойство browser_style.
При рассмотрении использования browser_style: true, необходимо протестировать ваше расширение с различными темами (встроенными или из AMO), чтобы убедиться, что пользовательский интерфейс расширения ведет себя так, как ожидается.
Предупреждение: Когда browser_style: true включено в манифесте веб-расширения, выделение текста в пользовательском интерфейсе расширения отключено, за исключением элементов управления вводом. Если это вызовет проблему, включите browser_style:false вместо этого.
Примечание: Google Chrome и Opera используют chrome_style вместо browser_style, поэтому, если вы хотите поддерживать их, вам нужно добавить оба ключа.
В Firefox таблицу стилей можно увидеть по адресу chrome://browser/content/extension.css. Дополнительная таблица стилей по адресу chrome://browser/content/extension-mac.css также включена в macOS.
Большинство стилей применяются автоматически, но для некоторых элементов необходимо добавить нестандартный класс browser-style, чтобы получить их стили, как подробно описано в таблице ниже:
| Элемент | Пример |
|---|---|
<button> | <button class="browser-style">Click me</button> |
<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> | <textarea class="browser-style">Write here</textarea> |
Родитель <input> | <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> |
Примечание: См. отчёт об ошибке Firefox 1465256 для удаления этого ненужного требования.
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Browser_styles |
40 | 79 | 48 | ? | 27 | 14 | ? | ? | 57 | ? | 15 | ? |
browser_style |
40 | 79 | 55 | ? | 27 | Нет | ? | ? | 57 | ? | Нет | ? |
open_in_tab |
40 | 79 | 48 | ? | НетСтраницы настроек всегда открываются в новой вкладке браузера. |
НетСтраницы настроек всегда открываются в новой вкладке браузера. |
? | ? | 57 | ? | НетСтраницы настроек всегда открываются в новой вкладке браузера. |
? |
page |
40 | 79 | 48 | ? | 27 | 14 | ? | ? | 57 | ? | 15 | ? |
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Browser_styles |
Нет | Нет | 54 | ? | 30 | Нет | ? | ? | Нет | ? | Нет | ? |
browser_style |
Нет | Нет | 55 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
default_icon |
Нет | Нет | 54 | ? | 30Иконки SVG не поддерживаются. |
Нет | ? | ? | Нет | ? | Нет | ? |
default_panel |
Нет | Нет | 54 | ? | 30 | Нет | ? | ? | Нет | ? | Нет | ? |
default_title |
Нет | Нет | 54 | ? | 30 | Нет | ? | ? | Нет | ? | Нет | ? |
open_at_install |
Нет | Нет | 62 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Browser_styles |
Да["С Chrome 49 действия на странице отображаются в панели инструментов, а не в адресной строке.", "Если расширение определяет действие на странице, ему запрещено определять действие в браузере."] |
14 | 48 | ? | ДаЕсли расширение определяет действие на странице, ему запрещено определять действие в браузере. |
14Если расширение определяет действие на странице, ему запрещено определять действие в браузере. |
? | ? | Да | ? | 15Если расширение определяет действие на странице, ему запрещено определять действие в браузере. |
? |
browser_style |
Нет | Нет | 48 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
default_icon |
ДаИконки SVG не поддерживаются. |
14["Иконки SVG не поддерживаются.", "'default_icon' должен быть объектом со явными размерами."] |
48 | ? | ДаИконки SVG не поддерживаются. |
14Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны и обрабатываться с использованием системного цвета акцента и системного внешнего вида. |
? | ? | Да | ? | 15Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны и обрабатываться с использованием системного цвета акцента и системного внешнего вида. |
? |
default_popup |
Да | 14 | 48 | ? | Да | 14 | ? | ? | Да | ? | 15 | ? |
default_title |
Да | 14 | 48 | ? | Да | 14 | ? | ? | Да | ? | 15 | ? |
hide_matches |
Нет | Нет | 59 | ? | Нет | Нет | ? | ? | 59 | ? | Нет | ? |
pinned |
Нет | Нет | 64 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
show_matches |
Нет | Нет | 59 | ? | Нет | Нет | ? | ? | 79 | ? | Нет | ? |
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Browser_styles |
Да["Доступно только в Manifest V2.", "Если расширение определяет действие браузера, оно не должно определять действие страницы."] |
14Доступно только в Manifest V2. |
48Доступно только в Manifest V2. |
? | Да["Доступно только в Manifest V2.", "Если расширение определяет действие браузера, оно не должно определять действие страницы."] |
14["Доступно только в Manifest V2.", "Если расширение определяет действие браузера, оно не должно определять действие страницы."] |
? | ? | 55Доступно только в Manifest V2. |
? | 15["Доступно только в Manifest V2.", "Если расширение определяет действие браузера, оно не должно определять действие страницы."] |
? |
browser_style |
Нет | Нет | 48 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
default_area |
Нет | Нет | 54 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
default_icon |
ДаИконки SVG не поддерживаются. |
14["Иконки SVG не поддерживаются.", "'default_icon' должен быть объектом с явными размерами."] |
48 | ? | ДаИконки SVG не поддерживаются. |
14Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны иконки с использованием системного акцента и внешнего вида. |
? | ? | Нет | ? | 15Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны иконки с использованием системного акцента и внешнего вида. |
? |
default_popup |
Да | 14 | 48 | ? | Да | 14 | ? | ? | 57 | ? | 15 | ? |
default_title |
Да | 14 | 48 | ? | Да | 14 | ? | ? | 55Действия браузера представлены в виде пунктов меню, а заголовок — меткой пункта меню. |
? | 15 | ? |
theme_icons |
Нет | Нет | 56 | ? | Нет | Нет | ? | ? | Нет | ? | Нет | ? |
| Рабочий стол | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | |
Browser_styles |
88 | 88 | 109 | ? | 74 | 15.4 | ? | ? | 109 | ? | 15.4 | ? |
browser_style |
88 | 88 | 109 | ? | 74 | Нет | ? | ? | Нет | ? | Нет | ? |
default_area |
88 | 88 | 109 | ? | 74 | Нет | ? | ? | Нет | ? | Нет | ? |
default_icon |
88Иконки SVG не поддерживаются. |
88["Иконки SVG не поддерживаются.", "'default_icon' должен быть объектом с явными размерами."] |
109 | ? | 74Иконки SVG не поддерживаются. |
15.4Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны иконки с использованием системного акцента и внешнего вида. |
? | ? | Нет | ? | 15.4Иконки SVG не поддерживаются. Серые изображения будут обрабатываться как шаблоны иконки с использованием системного акцента и внешнего вида. |
? |
default_popup |
88 | 88 | 109 | ? | 74 | 15.4 | ? | ? | 109 | ? | 15.4 | ? |
default_title |
88 | 88 | 109 | ? | 74 | 15.4 | ? | ? | 109Действия браузера представлены в виде пунктов меню, а заголовок — меткой пункта меню. |
? | 15.4 | ? |
theme_icons |
88 | 88 | 109 | ? | 74 | Нет | ? | ? | Нет | ? | Нет | ? |
webextensions.manifest.action
Таблицы BCD загружаются только в браузере
webextensions.manifest.browser_action
Таблицы BCD загружаются только в браузере
webextensions.manifest.page_action
Таблицы BCD загружаются только в браузере
webextensions.manifest.sidebar_action
Таблицы BCD загружаются только в браузере
webextensions.manifest.options_ui
Таблицы BCD загружаются только в браузере
Компоненты панели Firefox
Примечание: Эта функция нестандартна и работает только в Firefox.
Таблица стилей chrome://browser/content/extension.css также содержит стили для компонентов панели Firefox.
В старом руководстве по стилю Firefox описывается правильное использование.
| Элемент | Пример |
|---|---|
| Заголовок | <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> |
| Подвал | <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> |
| Вкладки | <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> |
| Форма | <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> |
| Меню | <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
<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>
Результат
© 2005–2023 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles