【问题标题】:black and white text based on background image with css基于背景图像的黑白文本和css
【发布时间】:2020-06-04 23:43:17
【问题描述】:

我正在尝试在双色标题上实现黑白文本的效果,该标题的一侧始终为白色,另一侧为背景图像(不同颜色)。

这是用于本示例的 css,仅因为图像具有纯黑色背景而起作用:

.text {
  position: relative;
  color: rgb(255, 255, 255);
  mix-blend-mode: difference;
  text-transform: uppercase;
  font-size: 60px;
}

如果背景图像没有纯黑色背景,这将不起作用:

在这种情况下,我得到了我应该得到的东西,但我想要的是在左边得到一个白色文本,在右边得到一个黑色文本,就像第一个例子一样。

我一直在尝试 css filtermix-blend-modess、clip-paths,我见过这个 https://aerolab.github.io/midnight.js/(它不适合我的情况)但我总是得到错误的结果。您是否知道一种制作黑白文本的方法,该文本可以识别白色背景并将文本变为黑色,而无论不是纯白色背景,将颜色切换为白色?

我希望我的解释很清楚,任何解决方案甚至线索都非常受欢迎,即使它需要 javascript。谢谢!

这是一个带有示例的代码笔:https://codepen.io/vlrprbttst/pen/jOPMzvd?editors=1100

非常感谢!

【问题讨论】:

标签: javascript css clip-path css-filters mix-blend-mode


【解决方案1】:

我尝试了一些似乎可行的方法。

我在您的图像顶部添加了一个具有相同宽度的黑色层(rgba,alpha 0.8),然后使用 filter: brightness(3); 过滤图像的亮度

我不确定它是否以您想要的方式呈现图像。

body {
	 margin: 0;
	 padding: 0;
}
header.second {
	 height: 609px;
	 background-image: url("https://thedefiant.net/wp-content/uploads/2019/10/22520100_1600239116694701_7307954682775296386_o.jpg");
	 filter: brightness(3);
	 background-position: center left;
	 background-repeat: no-repeat;
	 background-size: 600px 100%;
	 background-color: #fff;
	 border: 1px solid red;
	 display: flex;
	 align-items: center;
	 padding-left: 390px;
	 position: relative;
}
header.second .mask {
	 position: absolute;
	 left: 0;
	 top: 0;
	 background-color: rgba(0, 0, 0, 0.8);
	 width: 600px;
	 height: 100%;
}
header.second .text {
	 position: relative;
	 color: white;
	 mix-blend-mode: difference;
	 text-transform: uppercase;
	 font-size: 60px;
}
 
<header class="second">
  <div class="mask"></div>
  <div>
    <div class="text" data-title="Sono caduto, ho pianto.">
      Sono caduto, ho pianto.
    </div>
  
    <div class="text" data-title="poi sono risalito">
      poi sono risalito
    </div>
  
    <div class="text" data-title="sei mejo te!">
      sei mejo te! sei mejo te!
    </div>
  </div>
</header>

【讨论】:

  • 不幸的是,图像变暗了,文字全部参差不齐:/这对我不起作用,但感谢您的帮助
【解决方案2】:

您可以考虑对文本进行渐变着色,但您需要知道图像的尺寸才能正确设置值。

这是一个只有第一部分的示例:

body {
  margin: 0;
  padding: 0;
}

header {
  height: 609px;
  background: 
   url("http://resources.doing.com/aaa/a.png") center right/auto 100% no-repeat;
  background-color: #fff;
  border: 1px solid red;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-left: 90px;
}

header>div {
  background: linear-gradient(to right, black calc(100% - 880px), white 0);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

.text {
  text-transform: uppercase;
  font-size: 60px;
}
<header>
  <div>
    <div class="text" data-title="Elisa di Francisca">
      Elisa di Francisca
    </div>

    <div class="text" data-title="tenacia e determinazione">
      tenacia e determinazione
    </div>

    <div class="text" data-title="di una mamma in pedana">
      di una mamma in pedana
    </div>
  </div>
</header>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2013-04-15
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多