【问题标题】:Making font color same as that of background image使字体颜色与背景图像相同
【发布时间】:2014-09-24 19:12:13
【问题描述】:

我正在设计一个带有背景图像的网页。中心有一个白框(使用 div),白框内是一些文本。我想要做的是使文本颜色与正文背景的颜色相同。如果我将文本的颜色属性设置为 transparent ,它就会消失,因为有一个白色的 div。我该怎么做?

这是 JSFiddle 的链接:http://jsfiddle.net/FpJpV/

html是

<div>
    <h1>Title</h1>
</div>

CSS是

body {
    background-color: red;
    font-family: sans-serif;
}

div {
    width: 200px;
    background-color: white;
    margin: auto;
    text-align: center;
    padding: 1em;
}

注意:在 JSFiddle 中,为了简单起见,我使用了红色背景,但在实际网页中,正文的背景是图像。

【问题讨论】:

  • “color:red;”怎么样
  • 就像在打孔蒙版中一样,所以底层图像完全可见?
  • 我的错,OP,我想我跳过了关于使用图像作为背景的部分。
  • 这在 CSS 中是不可能的。如果包含的 div 具有背景颜色,则无法看穿它,但请参见下文。

标签: html css


【解决方案1】:

您在 HTML/CSS/JavaScript 中寻找的内容有 3 种方式,其中一些比其他方式更老套。

  1. 使用&lt;canvas&gt; 绘制您的形状和类型,并设置ctx.globalCompositeOperation="xor";其中ctx 是您的画布上下文。

var c=document.getElementById('myCanvas');
var ctx=c.getContext('2d');
ctx.font = "bold 36px Proxima Nova";
ctx.fillStyle='blue';
ctx.fillText("MORE",100,87);
ctx.globalCompositeOperation='xor';
ctx.beginPath();
ctx.fillStyle='white';
ctx.arc(150,75,75,0,2*Math.PI);
ctx.fill();
body{
  background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
  width:100%;
  height:100%;
}

html{
  height:100%
}
&lt;canvas id='myCanvas'&gt;&lt;/canvas&gt;
  1. 使用mix-blend-mode: screen 并将文本颜色设置为黑色。

.blend-mode {
  background:white;
  border-radius:100%;
  width:150px;
  height:150px;
  line-height:155px;
  float:left;
  margin:20px;
  font-family: "Proxima Nova", Hevetica, sans-serif;
  font-weight:bold;
  color:black;
  text-align:center;
  vertical-align:middle;
  font-size:36px;
  mix-blend-mode: screen;
}

body{
  background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
  width:100%;
  height:100%;
}

html{
  height:100%;
}
&lt;div class="blend-mode"&gt;MORE&lt;/div&gt;
  1. 使用-webkit-text-fill-color:transparent-webkit-background-clip:text 显示其背后的背景副本。这需要对背景副本进行一些对齐以匹配“原始”背景。

.wrap{
  margin:20px;
  float:left;
  position:relative;
}

.background {
  width: 150px;
  height: 150px;
  border-radius: 100%;
  background: white;
  position:absolute;
  top:0;
  left:0;
  z-index:4;
  
}

.text {
  position:absolute;
  top: 25px;
  left: 25px;
  z-index:5;
  background: -webkit-radial-gradient(top left, rgb(23, 39, 34) 4%, rgb(56, 99, 99) 37%, rgb(22, 27, 15) 73%, rgb(22, 27, 14) 93%, #232323 100%);
  font-family: Proxima Nova, Helvetica, sans-serif;
  font-weight:bold;
  line-height:100px;
  font-size: 36px;
  color: #666;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

body{
  background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
  width:100%;
  height:100%;
}

html{
  height:100%;
}
<div class="wrap">
  <div class="background"></div>
  <div class="text">MORE</div>
</div>

这些都不太可能跨浏览器运行得很好,我还没有测试过它们!

【讨论】:

    【解决方案2】:

    CSS 无法做到这一点;我的建议:

    尝试改用图片。

    使用 Photoshop/GIMP 等软件从白色图像中剪切出文本,使其在文本所在的位置透明。将其保存为PNG,并将图片设置为div的背景。

    只要确保你也从 div 中删除白色背景。

    EXAMPLE

    像这样:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2011-11-07
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      相关资源
      最近更新 更多