Подтвердить что ты не робот

Как применить обратную текстовую маску с помощью CSS

Я попытаюсь объяснить свой вопрос изображениями. Здесь мы идем.

1 - На этом изображении отображается текст, маскирующий изображение, настолько хорошее, что я могу сделать со следующим кодом:

enter image description here

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

2 - Это другое изображение, текст создает противоположный эффект, оставляя прозрачным только текстовую область. Это то, что я хочу:

enter image description here

Кто-нибудь попробовал?

4b9b3361

Ответ 1

Я не думаю, что CSS может это сделать. Но вы можете взломать его, используя три разных вложенных элемента:

  • Самый внешний элемент содержит фоновое изображение
  • Средний элемент содержит среднее изображение
  • Внутренний элемент содержит текст и имеет то же фоновое изображение, что и внешний элемент, замаскированный с помощью background-clip:text;, как в первом примере.

Это работает, но немного громоздко, так как вам придется компенсировать фоновое положение маски для достижения желаемого эффекта. Вот пример: http://jsfiddle.net/dzkTE/.

Ответ 2

Мне удалось добиться этого несколькими парами методов. См. Мой ответ здесь: fooobar.com/questions/486751/...

См. ниже:

Существует три способа поиска в HTML/CSS/JavaScript, некоторые из которых немного взломаны, чем другие.

  • Используйте <canvas>, чтобы нарисовать фигуру и тип, и установите ctx.globalCompositeOperation="xor";, где ctx - ваш контекст canvas.

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>

Ответ 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;

проверьте здесь (попробуйте в Chrome или добавьте префиксы поставщика). вы можете проверить демо-страницу в форме chris.