Возможно, вы ищете css свойство background-attachment: fixed . Здесь есть предостережение, что фон больше не будет прокручиваться вместе со страницей и останется неизменным c, но таким образом вы можете гарантировать, что перекрытие между фоном элемента и фоном контейнера останется прежним. Исправлена проблема с прокруткой через javascript, за небольшие накладные расходы, в зависимости от того, насколько тяжелой является графика для браузера / рендеринга.
Затем вы просто применяете тот же фон к фону. содержащий элемент (.wrap в моем случае) и текст, содержащий элемент (wrap в моем случае), и вы получите желаемый эффект, как показано на втором изображении.
Затем установите метку в элементе абзаца и повторите текст дважды. Один раз в абзаце, один раз в пределах отметки.
Затем установите абзац в положение относительное, а отметку в абсолютное, чтобы они полностью перекрывали друг друга. Это необходимо для того, чтобы противодействовать тому, чтобы перенос был прозрачным и не отображал текст должным образом, поскольку текст также становится прозрачным.
.wrap, .wrap mark {
background-image: url('https://i.imgur.com/hAodNjT.jpg');
background-attachment: fixed;
}
.wrap p {
position: relative;
}
.wrap mark {
position: absolute;
top: 0px;
left: 0px;
opacity: 0.4;
}
img {
width: 300px;
height: auto;
}
.wrap {
padding-top:160px;
position: relative;
width: 400px;
height: 400px;
}
.wrap img {
position:absolute;
top:60px;
z-index:0;
}
.wrap p {
position:relative;
z-index: 1;
}
<div class="wrap">
<img src="https://i.imgur.com/cULI8TG.png">
<p>some text that runs over the image<mark>some text that runs over the image</mark></p>
<p>some other text that runs over the image<mark>some other text that runs over the image</mark></p>
</div>
с исправлением фоновой прокрутки, вносит больше накладных расходов при прокрутке
var $affected = $('.wrap, .wrap mark');
let handler = (e) => {
$affected.css({'background-position' : '-'+window.scrollX+'px -'+window.scrollY+'px'});
}
$(window).on('resize scroll', handler);
.wrap, .wrap mark {
background-image: url('https://i.imgur.com/hAodNjT.jpg');
background-attachment: fixed;
}
.wrap p {
position: relative;
}
.wrap mark {
position: absolute;
top: 0px;
left: 0px;
opacity: 0.4;
}
img {
width: 300px;
height: auto;
}
.wrap {
padding-top:160px;
position: relative;
width: 400px;
height: 400px;
}
.wrap img {
position:absolute;
top:60px;
z-index:0;
}
.wrap p {
position:relative;
z-index: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrap">
<img src="https://i.imgur.com/cULI8TG.png">
<p>some text that runs over the image<mark>some text that runs over the image</mark></p>
<p>some other text that runs over the image<mark>some other text that runs over the image</mark></p>
</div>