在CSS中创建磨砂玻璃效果的两种方法

在本教程中,我将向您展示如何在CSS中创建磨砂玻璃效果。您已经在UI中看到了这一点,例如MacOS和iOS,甚至是现在的Windows,所以这绝对是一种趋势效应。我们可以使用CSS模拟网站中的磨砂玻璃,在本教程中,我将向您展示两种方法。

方法1

第一种方法具有相当广泛的浏览器支持,但它需要比我们将要看到的第二种方法更多的CSS。

首先创建一个带有类的div .container。我们将使用它来代表我们的磨砂玻璃窗格。然后,将背景图像应用于body元素。在此背景下,您需要:

    body {
        background-attachment: fixed;
    }

我们这样做是因为body的child会继承这个背景图像,我们希望将它保持在相同的大小。

我们现在要在我们.container身上创建一个伪元素,这就是我们模糊的东西。因此,我们应用以下内容:

.container:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

这为我们提供了一个涵盖容器元素的元素。现在是时候添加一些颜色,我们将使用盒子阴影:

.container:before {
    box-shadow: inset 0 0 2000px rgba(255, 255, 255, .5);
}

为了给我们一个磨砂效果,我们添加了一个模糊滤镜:

.container:before {
    box-shadow: inset 0 0 2000px rgba(255, 255, 255, .5);
    filter: blur(10px);
}

这给了我们大部分我们想要的东西,但它还没有。我们现在需要(如前所述)为伪元素及其父元素设置继承的背景。

.container {
    background: inherit;
}
 
.container:before {
    background: inherit;
}

最终代码如下:

html:

<div class="container"></div>

css

body {
    background: url(https://images.unsplash.com/photo-1544306094-e2dcf9479da3) no-repeat;
    /* Keep the inherited background full size. */
    background-attachment: fixed; 
    background-size: cover;
    display: grid;
    align-items: center;
    justify-content: center;
    height: 100vh;
}

.container {
    width: 30rem;
    height: 20rem;
    box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);   
    border-radius: 5px;
    position: relative;
    z-index: 1;
    background: inherit;
    overflow: hidden;
}

.container:before {
    content: "";
    position: absolute;
    background: inherit;
    z-index: -1;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    box-shadow: inset 0 0 2000px rgba(255, 255, 255, .5);
    filter: blur(10px);
    margin: -20px;
}

方法2

现在有一种替代方法,它使用较少的样式,但享受略少的浏览器支持。我们从相同的.container元素开始,并将相同的封面背景图像应用于body元素。

然后我们将注意力转向一个名为的CSS属性backdrop-filter。我们首先在我们的.container中添加一些显示样式,包括我们喜欢的任何背景颜色(让我们选择淡白色):

.container {
 background-color: rgba(255, 255, 255, .15);   
}

然后,我们添加过滤器。

.container {
 background-color: rgba(255, 255, 255, .15);  
 backdrop-filter: blur(5px);
}

最终

html

<div class="container"></div>

css

body {
    background: url(https://images.unsplash.com/photo-1544306094-e2dcf9479da3) no-repeat;
    background-size: cover;
    display: grid;
    align-items: center;
    justify-content: center;
    height: 100vh;
}

.container {
    width: 30rem;
    height: 20rem;
    box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);   
    border-radius: 5px;
    background-color: rgba(255, 255, 255, .15);
    
    backdrop-filter: blur(5px);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 正如我们在前一章中所解释的那样,HTML元素使网页设计者能够在文档中标记其结构。HTML规范列出了浏览器应如何显示...
    摩羯青春我掌握阅读 423评论 0 0
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 1,411评论 0 1
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 1,199评论 0 1
  • 一、CSS入门 1、css选择器 选择器的作用是“用于确定(选定)要进行样式设定的标签(元素)”。 有若干种形式的...
    宠辱不惊丶岁月静好阅读 1,763评论 0 6
  • 前端开发知识点 HTML&CSS对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型...
    Hebborn_hb阅读 913评论 0 1

友情链接更多精彩内容