最简单的解决办法,但至少支持:backdrop-filter
最直接的方式,就是实际使用,而新backdrop-filter
财产。不幸的是,到目前为止,它是only supported in Safari(和Chrome Canary)。
body{
background: url('https://i.imgur.com/uh5YLj5.jpg') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
margin: 0;
padding: 0;
}
.profile-box{
width: 80%;
height: 60%;
/* Backdrop filter */
-webkit-backdrop-filter: grayscale(100%);
backdrop-filter: grayscale(100%);
/* Additional styles for positioning */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div class="profile-box"></div>
上面的代码段会呈现在Safari上与此类似:
复杂的解决方案,但更多的跨浏览器兼容
使用已弃用clip
:
另一种可以在浏览器中看到更多支持的解决方案是使用clip: rect(...)
属性。但是,该属性为deprecated in favour of clip-path
(有关更新的解决方案,请参阅下一节)。既然你已经在你的代码中指定了你想要一个宽度为80%,高度为60%(相对于视口,所以相当于80vw
和60vh
)的灰度区域,我们可以调整传递给clip: rect(...)
的参数,如下所示:
clip: rect(30vh, 90vw, 70vh, 10vw);
坐标表示与剪切矩形的顶部,右侧,底部,左侧边缘的页面的顶部/左侧角偏移。要水平居中放置80vw
,我们需要左侧和右侧的10vw
(合计为20vw
)。要将60vh
垂直居中,我们需要顶部和底部的20vh
(合计为40vh
)。此计算出:
20vh
从顶部(这是从顶部测量的顶部边界)
90vw
从左侧(这是从左侧测量的右边界)
- 从顶部
80vh
(此是从顶部测量的底部边框)
10vw
从左侧(这是从左侧测量左边界)
下面将图像帮你解释计算的更多:
body{
background: url('https://i.imgur.com/uh5YLj5.jpg') no-repeat center center fixed;
background-size: cover;
margin: 0;
padding: 0;
}
.profile-box {
background: url('https://i.imgur.com/uh5YLj5.jpg') no-repeat center center fixed;
background-size: cover;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
filter: grayscale(100%);
clip: rect(20vh, 90vw, 80vh, 10vw);
}
<div class="profile-box"></div>
使用新的属性,clip-path
:
即使它是一个更现代的标准相比clip
,它仍然患有non-support in IE or Edge。 clip-path: inset(...)
的参数不是用逗号分隔的,与clip: rect(...)
不同,它的使用稍微直观一点,因为每个边都是相对于浏览器的相应边进行测量的。在这种情况下,使用上面我们已经建立了相同的计算逻辑,参数将是:
20vh
从顶部
10vw
从右侧
20vh
从底部
10vw
从左侧
换句话说,这样的事情:
clip-path: inset(20vh 10vw 20vh 10vw);
body{
background: url('https://i.imgur.com/uh5YLj5.jpg') no-repeat center center fixed;
background-size: cover;
margin: 0;
padding: 0;
}
.profile-box {
background: url('https://i.imgur.com/uh5YLj5.jpg') no-repeat center center fixed;
background-size: cover;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
filter: grayscale(100%);
clip-path: inset(20vh 10vw 20vh 10vw);
}
<div class="profile-box"></div>
是你的形象是预期的结果,还是你得到和不喜欢的? –
你将不得不给灰色框相同的背景图像,并将其扩展以确保它与背景相匹配。然后,您可以将[CSS灰度](https://www.w3schools.com/cssref/css3_pr_filter.asp)应用到弹出窗口图像。 –