如何根据背景反转描边文字颜色
How to invert stroke text color depending on background
我有 2 个 50% 宽度的 div。有一个巨大的 header h1 应该具有这两个 div 的颜色。我试过 mix-blend-mode 但当设置为不同时它会给我一些随机颜色。我的目标是反转颜色但保留 div 的颜色。这是一个 codepen 文件,我尽量保持简单:https://codepen.io/lukagurovic/pen/MLoZmj
本例中的最终效果应该是这样的:
但我不确定为什么它不适用于这些颜色。
此外,这些 div 是交互式的,因此颜色必须随着悬停时 div 的宽度增加而动态变化,并且应该只有文字笔划而没有任何填充
body {
height: 100vh;
width: 100%;
position: relative;
background-color: #510035;
margin: 0 auto;
}
h1 {
font-size: 4.7em;
text-transform: uppercase;
}
.half-pager {
width: 50%;
height: 100%;
position: absolute;
display: inline-block;
overflow: hidden;
text-align: center;
}
.half-pager-dark {
background-color: #510035;
}
.half-pager-light {
right: 0;
background-color: #E8E8E8;
float: right;
}
.lp-header {
position: absolute;
}
.lp-header {
color:transparent;
mix-blend-mode: difference;
-webkit-text-stroke: 3px rgb(126, 124, 133);
z-index: 1;
}
.lp-header {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div id="box" class="half-pager half-pager-dark"></div>
<div id="box1" class="half-pager half-pager-light"></div>
<h1 class="lp-header">left or right</h1>
一个想法是复制文本并使用 CSS 变量来定义颜色,这样您就可以轻松地在一个地方更改它们。我使用 clip-path 隐藏了一半的文本并显示了另一半:
body {
margin: 0;
--c1:#510035;
--c2:#E8E8E8;
}
body:hover {
--c1:red;
--c2:blue;
}
h1 {
font-size: 4.7em;
text-transform: uppercase;
margin: 0;
}
.first {
background:var(--c1);
-webkit-text-stroke: 3px var(--c2);
}
.second {
background:var(--c2);
-webkit-text-stroke: 3px var(--c1);
clip-path:polygon(0% 0%, 50% 0%, 50% 100%,0% 100%);
}
.lp-header {
position:absolute;
top:0;
left:0;
right:0;
min-height:100vh;
box-sizing:border-box;
color: transparent;
z-index: 1;
padding: 50px;
text-align: center;
transition:0.5s;
}
<h1 class="lp-header first">left or right</h1>
<h1 class="lp-header second">left or right</h1>
我有 2 个 50% 宽度的 div。有一个巨大的 header h1 应该具有这两个 div 的颜色。我试过 mix-blend-mode 但当设置为不同时它会给我一些随机颜色。我的目标是反转颜色但保留 div 的颜色。这是一个 codepen 文件,我尽量保持简单:https://codepen.io/lukagurovic/pen/MLoZmj 本例中的最终效果应该是这样的:
但我不确定为什么它不适用于这些颜色。 此外,这些 div 是交互式的,因此颜色必须随着悬停时 div 的宽度增加而动态变化,并且应该只有文字笔划而没有任何填充
body {
height: 100vh;
width: 100%;
position: relative;
background-color: #510035;
margin: 0 auto;
}
h1 {
font-size: 4.7em;
text-transform: uppercase;
}
.half-pager {
width: 50%;
height: 100%;
position: absolute;
display: inline-block;
overflow: hidden;
text-align: center;
}
.half-pager-dark {
background-color: #510035;
}
.half-pager-light {
right: 0;
background-color: #E8E8E8;
float: right;
}
.lp-header {
position: absolute;
}
.lp-header {
color:transparent;
mix-blend-mode: difference;
-webkit-text-stroke: 3px rgb(126, 124, 133);
z-index: 1;
}
.lp-header {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div id="box" class="half-pager half-pager-dark"></div>
<div id="box1" class="half-pager half-pager-light"></div>
<h1 class="lp-header">left or right</h1>
一个想法是复制文本并使用 CSS 变量来定义颜色,这样您就可以轻松地在一个地方更改它们。我使用 clip-path 隐藏了一半的文本并显示了另一半:
body {
margin: 0;
--c1:#510035;
--c2:#E8E8E8;
}
body:hover {
--c1:red;
--c2:blue;
}
h1 {
font-size: 4.7em;
text-transform: uppercase;
margin: 0;
}
.first {
background:var(--c1);
-webkit-text-stroke: 3px var(--c2);
}
.second {
background:var(--c2);
-webkit-text-stroke: 3px var(--c1);
clip-path:polygon(0% 0%, 50% 0%, 50% 100%,0% 100%);
}
.lp-header {
position:absolute;
top:0;
left:0;
right:0;
min-height:100vh;
box-sizing:border-box;
color: transparent;
z-index: 1;
padding: 50px;
text-align: center;
transition:0.5s;
}
<h1 class="lp-header first">left or right</h1>
<h1 class="lp-header second">left or right</h1>