223 lines
5.3 KiB
CSS
223 lines
5.3 KiB
CSS
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
|
|
|
/* Rules required for style caching of anonymous content scrollbar parts */
|
|
/* stylelint-disable-next-line media-query-no-invalid */
|
|
@media -moz-pref("layout.css.cached-scrollbar-styles.enabled") {
|
|
:is(scrollcorner, resizer, scrollbar, scrollbarbutton, slider):where(:-moz-native-anonymous) {
|
|
/* All scrollbar parts must not inherit any properties from the scrollable
|
|
* element (except for visibility and pointer-events), for the anonymous
|
|
* content style caching system to work.
|
|
*/
|
|
all: initial;
|
|
visibility: inherit;
|
|
pointer-events: inherit;
|
|
|
|
/* These properties are not included in 'all'. */
|
|
-moz-context-properties: initial;
|
|
-moz-control-character-visibility: initial;
|
|
-moz-min-font-size-ratio: initial;
|
|
-moz-box-collapse: initial;
|
|
-moz-theme: initial;
|
|
|
|
/* We don't want zoom on our ancestors to affect our styles. */
|
|
zoom: document;
|
|
|
|
math-depth: initial;
|
|
/* As long as inert implies pointer-events: none as it does now, we're
|
|
* good. */
|
|
-moz-inert: initial;
|
|
|
|
/* direction: initial is not sufficient, since its initial value can depend
|
|
* on the document's language. But we specify ltr explicitly below */
|
|
|
|
/* Similarly for font properties, whose initial values depend on the
|
|
* document's language. Scrollbar parts don't have any text or rely on
|
|
* font metrics.
|
|
*/
|
|
font: 16px sans-serif;
|
|
|
|
/* The initial value of justify-items is `legacy`, which makes it depend on
|
|
* the parent style.
|
|
*
|
|
* Reset it to something else.
|
|
*/
|
|
justify-items: start;
|
|
|
|
/* Avoid `object > *` rule in html.css from setting a useless, non-initial
|
|
* value of vertical-align.
|
|
*/
|
|
vertical-align: initial !important;
|
|
}
|
|
|
|
/* There are other rules that set the cursor on the scrollbar, expecting them
|
|
* to inherit into its children. Explicitly inherit it, overriding the
|
|
* 'all: initial;' declaration above.
|
|
*/
|
|
:is(scrollbarbutton, slider, thumb):where(:-moz-native-anonymous) {
|
|
cursor: inherit;
|
|
}
|
|
}
|
|
|
|
scrollbar, scrollbarbutton, scrollcorner, slider, thumb, resizer {
|
|
/* We need a display value that doesn't get blockified to preserve the
|
|
* scrollbar sizing asserts. In practice it doesn't matter since these get
|
|
* special frames */
|
|
display: block;
|
|
box-sizing: border-box;
|
|
|
|
/* Our scrollbar layout uses physical coordinates, we wouldn't want an
|
|
* horizontal scrollbar to flip in rtl for example. */
|
|
direction: ltr;
|
|
writing-mode: initial;
|
|
|
|
-moz-user-focus: ignore;
|
|
user-select: none;
|
|
}
|
|
|
|
|
|
/********** resizer **********/
|
|
|
|
resizer {
|
|
position: relative;
|
|
z-index: 2147483647;
|
|
|
|
background: url("chrome://global/skin/icons/resizer.svg") no-repeat;
|
|
background-size: 100% 100%;
|
|
cursor: se-resize;
|
|
width: 15px;
|
|
height: 15px;
|
|
}
|
|
|
|
resizer[dir="bottom"][flip],
|
|
resizer[dir="bottomleft"] {
|
|
transform: scaleX(-1);
|
|
}
|
|
|
|
resizer[dir="bottomleft"] {
|
|
cursor: sw-resize;
|
|
}
|
|
|
|
resizer[dir="top"],
|
|
resizer[dir="bottom"] {
|
|
cursor: ns-resize;
|
|
}
|
|
|
|
resizer[dir="left"] {
|
|
transform: scaleX(-1);
|
|
}
|
|
|
|
resizer[dir="left"],
|
|
resizer[dir="right"] {
|
|
cursor: ew-resize;
|
|
}
|
|
|
|
resizer[dir="topleft"] {
|
|
cursor: nw-resize;
|
|
}
|
|
|
|
resizer[dir="topright"] {
|
|
cursor: ne-resize;
|
|
}
|
|
|
|
thumb {
|
|
appearance: auto;
|
|
-moz-default-appearance: scrollbarthumb-horizontal;
|
|
}
|
|
|
|
thumb[orient="vertical"] {
|
|
-moz-default-appearance: scrollbarthumb-vertical;
|
|
}
|
|
|
|
scrollbar[disabled] thumb {
|
|
visibility: hidden;
|
|
}
|
|
|
|
@media (-moz-platform: android) {
|
|
scrollbar, resizer, scrollcorner {
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
scrollbar {
|
|
appearance: auto;
|
|
-moz-default-appearance: scrollbar-horizontal;
|
|
cursor: default;
|
|
}
|
|
|
|
scrollbar[orient="vertical"] {
|
|
-moz-default-appearance: scrollbar-vertical;
|
|
}
|
|
|
|
scrollbar[root] {
|
|
position: relative;
|
|
z-index: 2147483647; /* largest positive value of a signed 32-bit integer */
|
|
}
|
|
|
|
@media (-moz-overlay-scrollbars) {
|
|
scrollbar {
|
|
opacity: 1;
|
|
will-change: opacity;
|
|
transition-property: opacity;
|
|
transition-duration: env(-moz-overlay-scrollbar-fade-duration);
|
|
}
|
|
scrollbar:not([active]),
|
|
scrollbar[disabled] {
|
|
pointer-events: none;
|
|
opacity: 0;
|
|
}
|
|
scrollcorner {
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
scrollbarbutton {
|
|
appearance: auto;
|
|
-moz-default-appearance: scrollbarbutton-right;
|
|
}
|
|
|
|
scrollbar[orient="vertical"] > scrollbarbutton {
|
|
-moz-default-appearance: scrollbarbutton-down;
|
|
}
|
|
|
|
scrollbarbutton[type="decrement"] {
|
|
-moz-default-appearance: scrollbarbutton-left;
|
|
}
|
|
|
|
scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"] {
|
|
-moz-default-appearance: scrollbarbutton-up;
|
|
}
|
|
|
|
scrollcorner {
|
|
appearance: auto;
|
|
-moz-default-appearance: scrollcorner;
|
|
width: 16px;
|
|
cursor: default;
|
|
}
|
|
|
|
@media (-moz-scrollbar-start-backward: 0) {
|
|
scrollbarbutton[sbattr="scrollbar-up-top"] {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
@media (-moz-scrollbar-start-forward: 0) {
|
|
scrollbarbutton[sbattr="scrollbar-down-top"] {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
@media (-moz-scrollbar-end-backward: 0) {
|
|
scrollbarbutton[sbattr="scrollbar-up-bottom"] {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
@media (-moz-scrollbar-end-forward: 0) {
|
|
scrollbarbutton[sbattr="scrollbar-down-bottom"] {
|
|
display: none;
|
|
}
|
|
}
|