Css 将背景重叠处的文本颜色从黑色更改为白色

Css 将背景重叠处的文本颜色从黑色更改为白色,css,css-transforms,linear-gradients,mix-blend-mode,Css,Css Transforms,Linear Gradients,Mix Blend Mode,我有一个div,它的位置是绝对的,带有背景色渐变。我有这个文字,我想改变为白色,因为我滚动文字了 我目前正在使用“混合模式”属性来实现这一点,但我找不到任何将文本从黑色变为白色的设置。以前有没有人这样做过,或者我能想出一个窍门 .bg容器{ 位置:固定; 顶部:-30px; 左:0; 宽度:100px; 高度:100px; } .梯度背景{ 位置:绝对位置; 排名:0; 左:0; 宽度:100px; 高度:200px; 背景图像:线性梯度(到底部,rgb(100182240)15%,rgb(

我有一个div,它的位置是绝对的,带有背景色渐变。我有这个文字,我想改变为白色,因为我滚动文字了

我目前正在使用“混合模式”属性来实现这一点,但我找不到任何将文本从黑色变为白色的设置。以前有没有人这样做过,或者我能想出一个窍门

.bg容器{
位置:固定;
顶部:-30px;
左:0;
宽度:100px;
高度:100px;
}
.梯度背景{
位置:绝对位置;
排名:0;
左:0;
宽度:100px;
高度:200px;
背景图像:线性梯度(到底部,rgb(100182240)15%,rgb(81155244));
变换:歪斜(-15度);
}
.滚动内容{
位置:绝对位置;
顶部:50px;
}
.滚动内容页{
颜色:#000;
混合模式:叠加;
}
/*iOS黑客*/
.滚动内容p:之后{
内容:'\200c'
}

abc 1

abc 2

abc 3

abc 4

abc 5

abc 6

abc 7

abc 8

abc 9

abc 10

abc 11

abc 12

abc 13

abc 14

abc 15

abc 16

abc 17

abc 18

abc 19


您可以使用JavaScript进行测量,并将样式应用于您想要的范围内的标记,但您也可以做一些非常简单的事情,使文本可读(这属于“我可以做的其他一些技巧”):

。滚动内容{
文本阴影:0 0 3px白色;
}
这只会在蓝色背景上显示,在白色背景上消失。不过,这取决于您想要达到的效果


即使使用JavaScript实现,您也可以将其考虑为<强>渐进增强<强>(对于JS较少的用户)。

$(文档).ready(函数(){
$(窗口)。滚动(函数(){
变量bghight=$('.bg container').height();
var scroll=$(窗口).scrollTop();
$('.scroll content p')。每个((i,el)=>{
var pPos=$(el).offset().top;
var pHeight=$(el).height();
如果(pPos<(滚动-灯光+背景高度)){
$(el).removeClass('黑色');
$(el).addClass('white');
}否则{
$(el).addClass('黑色');
$(el.removeClass('white');
}
});
})
})
.bg容器{
位置:固定;
排名:0;
左:0;
宽度:100px;
高度:100px;
}
.梯度背景{
位置:绝对位置;
排名:0;
左:0;
宽度:100px;
高度:100px;
背景图像:线性梯度(到底部,rgb(1,55,124)15%,rgb(81,155,244));
}
.滚动内容{
位置:相对位置;
z指数:99999;
字体系列:neuzeit grotesk,无衬线;
字号:700;
}
怀特先生{
颜色:#fff;
}
布莱克先生{
颜色:黑色;
}









asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf

asdf


您可以使用渐变为文本着色。诀窍是让这个梯度与你的形状相似(形状边缘的相同程度和颜色变化)。由于倾斜元素是固定的,因此需要使渐变也固定,以创建文本滚动的神奇效果:

。渐变背景{
位置:固定;
排名:0;
左:0;
宽度:100px;
高度:200px;
背景图像:线性梯度(到底部,rgb(100182240)15%,rgb(81155244));
变换:歪斜(-15度);
变换原点:左;
}
.滚动内容{
位置:绝对位置;
顶部:50px;
/*165度=180度-15度*/
背景:线性梯度(165度,FFF195px,#000 195px)固定;
背景剪辑:文本;
-webkit背景剪辑:文本;
颜色:透明;
-webkit文本填充颜色:透明;
}

abc 1

abc 2

abc 3

abc 4

abc 5

abc 6

abc 7

abc 8

abc 9

abc 10

abc 11

abc 12

abc 13

abc 14

abc 15

abc 16

abc 17

abc 18

abc 19


但文本不会变为白色,这是OP要求的。它只会在渐变下可见。对,这就是为什么我注意到,如果他主要担心可读性等问题,它只是在一个相关技巧的大范畴下。添加了一个JS实现,但在移动设备上盲目飞行。将尽快进行测试。没有时间测试JS,而且它只不过是伪代码,所以删除该部分——但如果有人想尝试它或将其用作启动程序,它将在编辑历史记录中。欣赏这个想法,但不是我想要达到的效果。我不介意JS解决方案,但我认为它不会存在。我认为解决方案将是一系列的过滤器和混合背景模式。也许我必须复制文本内容并覆盖它。也许我必须对一些div应用隔离:隔离属性。仍然没有弄明白:(对不起,我重新做了我的示例以匹配我的图片。边界不是水平的,而是实际的对角线,因此文本在边界处变为两个色调。如果是水平的,这肯定会起作用。您能解释一下此代码的作用吗?
(pPos<(滚动-pHeight+bgHeight))
@BearNithi

位置小于(px中的当前滚动-

高度+渐变高度),您应该能够将纯色转换为渐变色(例如,如下所示:)…如果你面临问题,告诉meHey Temani,是的,如果这是我想要达到的效果,我可以这样做,但事实并非如此。我想要