2016-10-04 3 views
4

Я пытаюсь применить маску к div, чтобы я мог видеть ее на фоновом изображении. Все, что я вижу, касается клипов, но я ищу противоположное. Клип-трассы показывают, что находится внутри клипа. Я пытаюсь сделать его маской, чтобы вы видели внешнюю часть клипа.Как создать маску над изображением (не клип-путь, а наоборот)

Here is an example of what I am trying to achieve, а ниже - полное описание примера.

У меня есть div с фоновым изображением. Внутри этого div есть еще один div, который покрывает всю ширину и высоту своего родителя (с фоновым изображением) и имеет полупрозрачный (rgba) цвет фона. Я пытаюсь добавить маску в этот оверлейный div (тот, который имеет цвет фона rgba), чтобы круг был вырезан из середины, который показывает полное фоновое изображение без наложения цвета.

Here is a link to a jsfiddle, который устанавливает то, о чем я говорю, но без маски (так как я не знаю, как это сделать).

<div class="backgroundImage"> 
    <div class="backgroundOverlayWithMask"> 
    <!-- content will be here --> 
    </div> 
</div> 

.backgroundImage { 
    width: 100%; 
    height: 500px; 
    background: url(https://upload.wikimedia.org/wikipedia/commons/4/47/New_york_times_square-terabass.jpg) no-repeat center center; 
    background-size: cover 
} 

.backgroundOverlayWithMask { 
    width: 100%; 
    height: 500px; 
    background-color: rgba(0, 0, 0, 0.75); 
} 
+0

я бы создать маску растрового изображения, как PNG или GIF. – dandavis

+0

Мне действительно нужно четкое отзывчивое решение этой проблемы, которое будет работать на стандартных экранах сетчатки. Края маски будут размытыми/размытыми при разных размерах экрана, если бы я использовал маску изображения. – bluebomber

+0

Независимо от того, afaik, нет стандартного способа достижения того, что вы хотите с помощью только css ... Я также не думаю, что хрустящая hi-res геометрическая форма будет слишком сложной, fwiw – dandavis

ответ

2

Я думаю, что у меня есть решение, используя box shadow, :after и flex. Fiddle. Основываясь на ответе веб-тики here.

#inner { 
 
    position: relative; 
 
    width: 100%; 
 
    height: 200px; 
 
    overflow: hidden; 
 
    display: flex; 
 
    justify-content: center; 
 
} 
 
#inner:after { 
 
    content: ''; 
 
    border-radius: 100%; 
 
    width: 150px; 
 
    height: 150px; 
 
    box-shadow: 0px 0px 0px 2000px rgba(0, 0, 0, 0.5); 
 
    -webkit-box-shadow: 0px 0px 0px 2000px rgba(0, 0, 0, 0.5); 
 
    -moz-box-shadow: 0px 0px 0px 2000px rgba(0, 0, 0, 0.5); 
 
    align-self: center; 
 
} 
 
#container { 
 
    background: url('http://via.placeholder.com/800x200'); 
 
    background-size: cover; 
 
}
<div id="container"> 
 
    <div id="inner"> 
 
    </div> 
 
</div>

+0

Вау, это круто. Кажется, работает в Chrome просто отлично, но не в Safari. Мне нужно будет изучить эту работу во всех браузерах. Благодаря! – bluebomber

+0

Это классный трюк. – charlietfl

+0

@bluebomber проверить расширения webkit Я добавил к ответу для сафари. –

Смежные вопросы