这是一个技巧,您可以考虑将固定元素的颜色放在不同的块中background-attachment:fixed
.block {
position: fixed;
top: 10px;
left: 10px;
height: 25px;
width: 25px;
border:1px solid;
box-sizing:border-box;
}
.is-green {
display: block;
height: 300px;
width: 100%;
background:
linear-gradient(#fff,#fff) 10px 10px/25px 25px fixed no-repeat,
green;
}
.is-white {
display: block;
height: 300px;
width: 100%;
background:
linear-gradient(#000,#000) 10px 10px/25px 25px fixed no-repeat,
#fff;
}
body {
padding-bottom:200px;
}
<div class="block">
</div>
<div class="is-green">
</div>
<div class="is-white">
</div>
<div class="is-green">
</div>
当然,这种解决方案有两个主要缺点:如果有内容,它将破坏背景技巧的魔力,并且您必须在不同的地方更改不同的值。
为了克服这个问题,我们可以考虑伪元素和 CSS 变量:
:root {
--t:10px;
--l:10px;
--h:25px;
--w:25px;
}
.block {
position: fixed;
z-index:999;
top: var(--t);
left: var(--l);
height: var(--h);
width: var(--w);
border:1px solid;
box-sizing:border-box;
color:red;
}
.is-green {
display: block;
height: 300px;
width: 100%;
position:relative;
z-index:0;
background:green;
}
.is-green::before {
content:"";
position:absolute;
z-index:99;
top:0;
left:0;
right:0;
bottom:0;
background:
linear-gradient(#fff,#fff) var(--l) var(--t)/var(--w) var(--h) fixed no-repeat;
}
.is-white {
display: block;
position:relative;
height: 300px;
width: 100%;
background: #fff;
color:#000;
}
.is-white::before {
content:"";
position:absolute;
z-index:99;
top:0;
left:0;
right:0;
bottom:0;
background:
linear-gradient(#000,#000) var(--l) var(--t)/var(--w) var(--h) fixed no-repeat;
}
body {
padding-bottom:200px;
}
<div class="block">
Hi
</div>
<div class="is-green">
lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum
</div>
<div class="is-white">
lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum
</div>
<div class="is-green">
lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum lorem pisum
</div>
现在您只需要将渐变的颜色更改为您想要的任何颜色。