为什么主滚动条颜色在火狐中没有改变?



我在使用var(…)为Firefox设置滚动条样式时遇到了一个问题.

我们可以看到下面的代码:

* {
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: var(--sb-bgc);
}
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}

一切都应该正常工作,但主滚动条Firefox在var(…). 在站点深处,其他滚动条在Firefox中正常工作

如果我直接使用color,如red或者一些变量,比如$ somevariable一切正常。问题是只有当我使用var(…)-我需要它在浅色和深色主题之间切换颜色。

编辑:

我用的是Windows 10。

data-theme="light"data-theme="dark"添加到body标签中。在body标签中添加root类的div

以某种风格。SCSS文件复制(这在主页面上不起作用,因为var(…)属性:

.root {
height: 200vh;
}
$lightBlueColor: #2ac6c7;
$darkBlueColor: #17b9ba;
[data-theme='light'] {
--sb-bgc: #{$lightBlueColor};
}
[data-theme='dark'] {
--sb-bgc: #{$darkBlueColor};
}
* {
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: var(--sb-bgc);
}
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}
正如我之前提到的问题是使用var(…). 如果我在scrollbar-color中直接使用$lightBlueColor#2ac6c7,则没有问题,一切都很好。当我使用var(…)什么也没有发生。

再来一次。我知道我可以写下面的代码,它将工作:

...
scrollbar-color: $lightBlueColor transparent;
...

...
scrollbar-color: #2ac6c7 transparent;
...

但这对我来说不是解决方案因为当主题改变时,颜色需要改变。因此,我需要一个工作的var(…)房地产解决方案。

Firefox使用不同的滚动条样式属性,你可以添加

.container {
white-space: nowrap;
overflow-y: hidden;
width: 500px;

**scrollbar-width: thin;
scrollbar-color: #e3e3e3 transparent;**
}

设置样式

例如,您可以查看此链接https://codepen.io/reacraf/pen/ExaBZzZ

我建议你看看浏览器兼容性

目前只支持Firefox滚动条功能:

  • https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars

Chrome和其他浏览器设置滚动条样式:

  • https://developer.mozilla.org/en-US/docs/Web/CSS/: -webkit-scrollbar
  • https://webkit.org/blog/363/styling-scrollbars/

* {
box-sizing: border-box;
/* Firefox only */
scrollbar-width: thin;
scrollbar-color: rebeccapurple green;
}
html,
body {
block-size: 300%;
}
/* Chrome, Edge, Safari... */
::-webkit-scrollbar-button {
background: #5f13ca;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar {
width: 20px;
height: 20px;
}
::-webkit-scrollbar-thumb {
background: #3b82f6;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar-track {
background: #a1a1aa;
}
::-webkit-scrollbar-corner {
background: white;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar-button:vertical:start:increment,
::-webkit-scrollbar-button:vertical:end:decrement,
::-webkit-scrollbar-button:horizontal:start:increment,
::-webkit-scrollbar-button:horizontal:end:decrement {
display: block;
}
.container {
block-size: 50vh;
background-color: #ffecaf;
overflow-y: scroll;
}
.container > .child {
background-color: aquamarine;
inline-size: 50%;
min-block-size: 300%;
margin: auto;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="container">
<div class="child">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Atque
molestias incidunt minus ea praesentium repellendus cum officia
quas eius quasi distinctio libero non neque id quis inventore
veritatis nemo, numquam nobis et voluptas voluptatum! Neque,
blanditiis! Dolores vitae architecto ullam accusamus voluptatem
ratione ab sit quae quaerat exercitationem fugiat sunt
laboriosam cupiditate minus omnis labore, facilis sed ut!
Possimus atque non nobis facilis numquam deleniti officiis
accusamus consequuntur nisi repudiandae. Veniam, molestias illum
saepe rerum fuga sapiente dolorum cupiditate pariatur porro ipsa
blanditiis repudiandae illo eligendi, tempora esse, placeat
officiis. Facilis, quasi. Facilis inventore hic, vel sint a
fugit nesciunt.
</div>
</div>
</body>
</html>


编辑:

我编辑了Firefox上的代码,并意识到;如果身体和元素的大小相同,HTML的滚动条是有效的。因此,您可以放置名为"data-theme"在HTML或者减小BODY的宽度并添加滚动条到BODY.

仅firefox:

html,
body {
block-size: 200vh;
}
/* In case you want to add scrollbars to *HTML* and *BODY* elements separately.
html {
overflow: hidden;
background: white;
}
body {
overflow: auto;
background: rgba(240, 255, 157, 0.5);
inline-size: 50%;
block-size: 500px;
}
*/
[data-theme=light] {
--sb-bgc: red;
}
[data-theme=dark] {
--sb-bgc: blue;
}
* {
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}
.scrollable {
overflow-y: auto;
inline-size: min(300px, 50%);
block-size: 300px;
outline: 1px solid red;
}
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<p>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Porro
labore animi officia, ipsam doloribus atque quis cupiditate sequi
omnis explicabo unde autem culpa, ratione quisquam odit placeat
veniam debitis, saepe temporibus? Sequi, aperiam modi excepturi
itaque, facilis exercitationem, consequuntur quidem obcaecati cumque
aut aspernatur esse quibusdam. Ipsam officia incidunt numquam
accusamus architecto maxime error labore a suscipit ipsa reiciendis
cum sunt voluptas adipisci rerum placeat minima molestias amet
dolorum nihil, possimus nam! Nesciunt perspiciatis, magni eum iure
dolor, harum sed, recusandae placeat quam aspernatur dolorem.
Debitis dolore laborum repellat cum non, fuga quibusdam animi
accusantium tempore nisi maxime repudiandae esse sed perspiciatis
quas minima reiciendis? Architecto nisi laborum inventore
perferendis iure repellat officia possimus quisquam, eveniet beatae
tenetur illum nostrum cum alias, vitae dolores earum, ut quaerat
error. Repellendus iure impedit inventore a nobis optio, voluptatum
excepturi dolorem illo earum iste accusantium quae numquam quis
eaque consequatur soluta? Recusandae dolore iste, nihil porro alias
esse earum libero suscipit accusantium consequuntur nobis deserunt
necessitatibus quos facere doloribus vitae, tempore enim culpa
officiis magni fuga placeat vero? Ratione ex quo quod exercitationem
quae nesciunt molestiae delectus aperiam magnam aliquam inventore,
tempora cum blanditiis deleniti id quibusdam possimus recusandae
accusantium nostrum eum alias libero incidunt nisi! Earum delectus
itaque deleniti perferendis, ullam nam recusandae, odio repellendus
repellat, suscipit laudantium voluptate id facere necessitatibus
distinctio explicabo quibusdam eos doloremque error qui sed officia
ratione dicta consectetur! Esse vero qui doloremque explicabo dicta
tempora delectus sapiente, corporis ab ipsam optio perferendis eius
dolorum. Libero vel sed ad impedit aspernatur maxime nostrum
repellat possimus dolorem ipsam exercitationem praesentium in, neque
sit molestiae obcaecati ullam ipsa ratione. Commodi ipsum deserunt
quisquam suscipit adipisci accusamus! Assumenda eius nesciunt error
adipisci ad id minus consequuntur, sed eveniet, perferendis a quos
illum necessitatibus fuga eum dolores harum at. Sint deserunt quae
doloremque obcaecati? Tempore, necessitatibus hic modi, minus sed
atque voluptatibus alias assumenda dicta blanditiis porro qui
reiciendis est. Provident ea odio nihil eligendi ad facere quas quis
animi suscipit hic dicta enim rem, a laboriosam dolorem culpa
placeat, delectus, corrupti aliquid! Accusamus nisi vitae
dignissimos cum praesentium nemo velit, nostrum enim voluptate,
mollitia voluptatibus repellendus necessitatibus. Earum dolorum
quasi maiores aliquam aspernatur facere recusandae, fugit
reprehenderit obcaecati laboriosam totam placeat a? Dolorem nobis
ratione quos provident! Rem reprehenderit velit est ullam expedita,
repellat dicta adipisci id alias? Tenetur amet soluta officia eos
neque repudiandae ullam aliquid unde quasi quibusdam dolore, itaque
qui nulla deserunt voluptas alias sapiente odit quisquam accusamus
quae rerum cumque sint quos nisi! Necessitatibus cum neque harum
sapiente labore tenetur exercitationem, ad magni eveniet maiores
praesentium dolores ratione dicta soluta consequatur dolorem alias
quos sed. Veritatis adipisci, nihil accusamus nostrum eaque
voluptatum aspernatur quaerat voluptate nisi nobis dolores illo
laboriosam ducimus quas facilis minima nesciunt ipsum. Repudiandae
amet veritatis est, illum expedita deserunt dicta, provident,
impedit deleniti possimus vel molestiae facilis explicabo atque.
Consectetur excepturi porro rem consequatur sequi quod atque
repellat unde quis recusandae harum earum incidunt soluta aut
ducimus modi illo esse, dolor repellendus?
</p>
<div class="scrollable" data-theme="dark">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Corporis
nesciunt accusamus consequatur similique adipisci iusto tempore
aliquam sapiente esse perferendis deserunt minus modi placeat id
dolor, ut fuga? Hic, illum id! Laboriosam quaerat numquam ipsum iste
repellat nam obcaecati possimus, explicabo odio sed impedit vero
exercitationem quae animi veritatis dignissimos non quam
praesentium! Eveniet obcaecati ea ad exercitationem quia aperiam
aliquam fuga ullam maiores dicta laboriosam temporibus vitae alias
incidunt unde nobis sint, eligendi, recusandae debitis perspiciatis
voluptatibus magnam odio? Amet accusantium est quisquam sed aut
saepe, esse perferendis vitae minima necessitatibus, a, doloremque
earum repellat nulla error labore vero laborum beatae provident
incidunt neque. Provident, aperiam. Recusandae ipsum maiores
explicabo nihil, eius quaerat assumenda molestiae reprehenderit
laboriosam neque odit nemo asperiores totam repudiandae corrupti
natus obcaecati alias adipisci animi praesentium fugit quisquam cum
blanditiis eaque. Voluptate tempora magni, dicta maiores similique
aperiam dolorum totam soluta placeat consectetur commodi? Quos sed,
esse ea voluptatibus fugiat recusandae? Nam harum consequuntur
quisquam iusto itaque, molestiae exercitationem distinctio animi
ratione earum voluptatibus iste ab modi. Laudantium, repudiandae.
Perspiciatis ut voluptatem laborum nemo voluptas repellendus
necessitatibus, autem iusto dolor vel inventore ex quae facere
nulla, reiciendis temporibus facilis provident. Animi, illum
distinctio non quae ea a incidunt numquam, odio quo dolorum ipsa
vero ut praesentium deleniti, nisi voluptas! Deleniti voluptate
alias, repudiandae quod aperiam quasi ad? Fuga iusto consequuntur
architecto necessitatibus aliquid sed perspiciatis ullam veniam
reprehenderit sunt accusantium velit commodi officiis adipisci at
quas nihil quia sit nobis, veritatis eos et illum placeat ex. Alias
voluptatibus pariatur distinctio illo omnis ex fugit aut aliquid
animi. Veniam eveniet aperiam omnis amet adipisci hic, esse
doloribus, velit neque sequi cupiditate ea dicta architecto officia?
Autem, voluptatem tenetur aspernatur accusantium dolores deserunt
eius illum saepe ab id veniam deleniti neque corporis voluptate qui
cum eaque similique tempore voluptas sed iure modi perspiciatis ut!
Eaque vero voluptas repellendus facere, sint autem maxime unde
adipisci, numquam cumque accusantium fugit eligendi quam quidem
optio harum officiis consequatur porro natus, explicabo dolor
officia ipsam fugiat quaerat? Quod labore non itaque minus veniam
quam suscipit officia, praesentium asperiores! Unde nulla molestiae
consectetur sed cupiditate sit et minima, dignissimos quisquam esse
ipsam voluptatem optio vel eos. Maiores rerum nulla libero fugit
iure quidem neque, exercitationem tenetur eum natus aliquid
perferendis id corrupti veritatis inventore quibusdam nostrum
facilis voluptatum! Reprehenderit quam ipsam voluptatem quasi velit
dolore quod doloribus nihil, quis iusto veritatis deserunt laborum
voluptate ut excepturi alias consectetur? Iste delectus, neque
reiciendis est ipsam ullam at excepturi cupiditate harum deserunt
dolores illum alias, sed rerum quod corrupti quo possimus nulla
voluptate voluptas, officia eos vitae. Facere asperiores assumenda
voluptates aliquid. Laboriosam unde minus praesentium, corporis
animi esse repellendus mollitia iusto corrupti eum illum minima
accusamus at quia eos aliquam! Eum aperiam placeat temporibus quia,
nulla laborum, natus sed tempora consequuntur qui veniam. Nisi
ratione laudantium, maiores aliquid officiis magni! Facere nulla
fugit officiis aliquam provident neque ullam similique consequuntur
autem culpa! At repudiandae excepturi veniam aut nam facilis
voluptatum, quos nisi. Minus.
</div>
</body>
</html>

我目前也在Windows 10和Firefox 109.0上进行测试。对我来说,这是完美的:

scrollbar-width: thin;
scrollbar-color: var(--lpClose) transparent;
scrollbar-color: var(--lpClose) var(--someAnotherVarHere); // This also works nicely

我最好的猜测是——可能是早期版本的Firefox有bug。但是我找不到任何关于这个bug的参考资料。

最新更新