Вам нужны указатели или ссылки, потому что для типа полиморфизма, который вас интересует (*), вам нужно, чтобы динамический тип мог отличаться от статического типа, другими словами, что истинный тип объекта отличается от объявленный тип. В C ++, который происходит только с указателями или ссылками.
(*) Обобщение, тип полиморфизма, предоставляемого шаблонами, не нуждается в указателях и ссылках.
Обходной путь заключается в том, чтобы использовать клип-путь, фильтр и одно и то же содержимое дважды, тогда вы получите тот же результат, что и фоновый фильтр
.container {
width: 200px;
height: 200px;
position: relative;
padding:1px;
}
.container .glass, .container .filter {
background: url('https://lorempixel.com/400/200/') center/cover;
text-align:center;
color:#fff;
height:100%;
}
.filter {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
filter: contrast(4) blur(3px);
z-index: 2;
clip-path: polygon(5% 15%, 82% 30%, 83% 71%, 17% 73%);
}
<div class="container">
<div class="glass">
<h1>A title</h1>
<p>Some content Some content</p>
</div>
<div class="filter">
<h1>A title</h1>
<p>Some content Some content</p>
</div>
</div>
И вы можете создать сценарий jQuery, который будет дублировать контент для вас, когда он достигнет большого количества контента. Вы можете также рассмотреть более сложный сценарий для настройки всех необходимых значений и параметров.
$('.backdrop').each(function() {
var e = $(this).html();
$(this).append('<div class="filter">'+e+'</div>');
})
.container {
width: 200px;
height: 200px;
position: relative;
padding:1px;
display:inline-block;
}
.container .glass, .container .filter {
background: url('https://lorempixel.com/400/200/') center/cover;
text-align:center;
color:#fff;
height:100%;
}
.filter {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
filter: contrast(4) blur(3px);
z-index: 2;
clip-path: polygon(5% 15%, 82% 30%, 83% 71%, 17% 73%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container backdrop">
<div class="glass">
<h1>A title</h1>
<p>Some content Some content</p>
</div>
</div>
<div class="container">
<div class="glass">
<h1>A title</h1>
<p>Some content Some content</p>
</div>
</div>
Просто: filter
filter: blur(10px);
Однако вам нужно немного изменить структуру. Вот пример:
*{
margin: 0;
padding: 0;
font-family: sans-serif;
}
main{
height: 100vh;
background: url('https://images.unsplash.com/photo-1477346611705-65d1883cee1e?dpr=0.800000011920929&auto=format&fit=crop&w=1199&h=800&q=80&cs=tinysrgb&crop=') fixed no-repeat;
background-size: cover;
}
#container{
width: 350px;
height: 500px;
background: inherit;
position: absolute;
overflow: hidden;
top: 50%;
left: 50%;
margin-left: -175px;
margin-top: -250px;
border-radius: 8px;
}
#container:before{
width: 400px;
height: 550px;
content: "";
position: absolute;
top: -25px;
left: -25px;
bottom: 0;
right: 0;
background: inherit;
box-shadow: inset 0 0 0 200px rgba(255,255,255,0.2);
filter: blur(10px);
}
form img{
width: 120px;
height: 120px;
border-radius: 100%;
}
form{
text-align: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
input{
background: 0;
width: 200px;
outline: 0;
border: 0;
border-bottom: 2px solid rgba(255,255,255, 0.3);
margin: 20px 0;
padding-bottom: 10px;
font-size: 18px;
font-weight: bold;
color: rgba(255,255,255, 0.8);
}
input[type="submit"]{
border: 0;
border-radius: 8px;
padding-bottom: 0;
height: 60px;
background: #df2359;
color: white;
cursor: pointer;
transition: all 600ms ease-in-out;
}
input[type="submit"]:hover{
background: #C0392B;
}
span a{
color: rgba(255,255,255, 0.8);
}
<main>
<div id="container">
<form action="">
<input type="text" value=""><br>
<input type="password"><br>
<input type="submit" value="SIGN IN"><br>
<span><a href="#">Forgot Password?</a></span>
</form>
</div>
</main>
Попробуйте следующее:
.glass:before {
content: "";
position: fixed;
left: 0;
right: 0;
z-index: 1;
background: rgba(0,0,0,0.8);
display: block;
width:100%;
height: 100%;
-webkit-filter: blur(30px);
-moz-filter: blur(30px);
-o-filter: blur(30px);
-ms-filter: blur(30px);
filter: blur(30px);
}