使字体颜色与背景图像的颜色相同

时间:2014-08-01 14:37:08

标签: html css

我正在设计一个带有背景图片的网页。中间有一个白色的盒子(使用div),白色的盒子里面有一些文字。我想要做的是使文本颜色与身体背景的颜色相同。如果我将文本的颜色属性设置为透明,它会消失,因为有一个白色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中,我使用红色背景来简化,但在真实的网页中,正文的背景是图像。

2 个答案:

答案 0 :(得分:4)

您在HTML / CSS / JavaScript中寻找的方法有三种,有些方法比其他方式更为简洁。

  1. 使用<canvas>绘制您的形状和类型,并设置ctx.globalCompositeOperation="xor";,其中ctx是您的画布上下文。
  2. 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%
    }
    <canvas id='myCanvas'></canvas>

    1. 使用mix-blend-mode: screen并将文字颜色设置为黑色。
    2. .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%;
      }
      <div class="blend-mode">MORE</div>

      1. 使用-webkit-text-fill-color:transparent-webkit-background-clip:text显示其背后的背景副本。这个需要背景副本的一些对齐以匹配“原始”背景。
      2. .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>

        这些都不可能在浏览器上运行良好,我还没有测试过它们!

答案 1 :(得分:3)

不能用CSS做到这一点;我的建议是什么:

请尝试使用图片。

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

请确保从div中删除白色背景。

<强> EXAMPLE

像这样:

enter image description here