【问题标题】:How to apply inverse text mask with CSS如何使用 CSS 应用反向文本掩码
【发布时间】:2013-03-08 14:15:53
【问题描述】:

我会尝试用图片来解释我的问题。我们开始吧。

1 - 此图像显示了遮盖图像的文本,到目前为止一切顺利,我可以使用以下代码:

font-size: 120px;
background: url(image-to-be-masked.jpg) repeat 0 0, white;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;

2 - 这另一个图像,文本创建相反的效果,只留下透明的文本区域。这就是我想要的:

有人试过吗?

【问题讨论】:

  • 你会在后面放另一张图片吗?为什么不把文字涂成白色呢?
  • 是的,后面还会有一张图片。
  • 所以你可能想试试-webkit-mask-image: url(the_bg_image.png);
  • 这不是想要的效果。

标签: html css mask clipping


【解决方案1】:

我不认为 CSS 可以做到这一点。但是您可以使用三个不同的嵌套元素将其组合在一起:

  • 最外层元素包含背景图片
  • 中间元素包含中间图像
  • 内部元素包含文本,并且与最外面的元素具有相同的背景图像,并使用background-clip:text; 进行掩码,就像您的第一个示例一样。

这可行,但有点麻烦,因为您必须补偿蒙版背景位置才能达到所需的效果。这是一个示例:http://jsfiddle.net/dzkTE/

【讨论】:

  • 很好,这是一个解决方案,但我不知道它是否是最好的。谢谢!
  • 值得一提的是,剪切文本的背景图像(或渐变,如果它使用)需要与主图像具有完全相同的原点和大小参考窗口我>。这意味着它必须从自己的边界框之外开始并且大小大于自身才能使背景正确排列
【解决方案2】:

我已经设法通过几种不同的方法实现了这一点。 在这里查看我的答案:https://stackoverflow.com/a/32476482/2315496

见下文:

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

  1. 使用<canvas> 绘制您的形状和类型,并设置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%
}
<canvas id='myCanvas'></canvas>
  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%;
}
<div class="blend-mode">MORE</div>
  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>

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 当然,我在这里添加了其他帖子的内容。只是不想发帖。
【解决方案3】:

* { margin: 0; padding: 0 }

header {
    overflow: hidden;
    height: 100vh;
    background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/2017/17_04_art_bw_butterfly_bg.jpg) 50%/ cover
}

h2 {
    color: white;
    mix-blend-mode: difference;
    font: 900 35vmin/35vh cookie, cursive;
    text-align: center
}
<header>
    <h2 contentEditable role='textbox' aria-multiline='true'>And stay alive...</h2>
</header>

【讨论】:

    【解决方案4】:

    [对不起,我看错了。我尝试相反,认为:P] 我认为你可以通过使用背景剪辑来做到这一点。

    background-clip:text;
    

    检查here(请在 chrome 中尝试或添加供应商前缀)。您可以查看demo page 表格 chris。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2018-10-19
    • 2020-06-02
    • 2018-05-31
    • 2014-07-16
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多