首页 > 建站教程 > CSS3+HTML5 >  CSS3 mask-image属性实现元素的遮罩效果正文

CSS3 mask-image属性实现元素的遮罩效果

今天咱来聊聊CSS里超酷的mask-image属性,这玩意儿能让你给元素搞出超炫的遮罩效果。啥是遮罩效果呢?简单来说,就是你能通过一张图或者一个渐变啥的,让元素的某些部分显示,某些部分隐藏,就像给元素戴了个“面具”一样。


基本使用方法

先看个简单的例子,用mask-image给一个图片加个圆形遮罩。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mask Image Example</title>
    <style>
        /* 选择所有带有masked-image类的元素 */
       .masked-image {
            /* 这里是设置图片的宽度,你可以根据需要调整 */
            width: 300px;
            /* 设置高度,保持图片比例 */
            height: auto;
            /* 关键的地方,这里使用了一个圆形渐变作为遮罩 */
            /* 渐变中心在图片中心,从白色到透明 */
            /* 白色部分会显示图片,透明部分会隐藏图片 */
            -webkit-mask-image: radial-gradient(circle at center, white 50%, transparent 70%);
            mask-image: radial-gradient(circle at center, white 50%, transparent 70%);
        }
    </style>
</head>
<body>
    <!-- 这里是一个带有masked-image类的图片元素 -->
    <img src="https://picsum.photos/300/200" alt="A random image">
</body>
</html>

在这个例子里,我们给图片加了个圆形渐变的遮罩。渐变中心是白色的,越往外越透明。白色的部分图片会正常显示,透明的部分图片就会被隐藏,这样就形成了一个圆形的显示区域。


应用场景

1. 图片特效

就像上面的例子,你可以用不同的渐变或者图片作为遮罩,给图片搞出各种炫酷的效果。比如做成圆角、扇形、不规则形状等等。


2. 动画效果

结合CSS动画,你可以让遮罩动起来。比如让遮罩从左到右滑动,就好像图片在慢慢“显露”出来一样。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mask Animation Example</title>
    <style>
        /* 选择所有带有masked-image-animation类的元素 */
       .masked-image-animation {
            /* 设置图片宽度 */
            width: 300px;
            /* 设置高度,保持比例 */
            height: auto;
            /* 这里使用一个线性渐变作为初始遮罩 */
            /* 从左到右,白色到透明 */
            -webkit-mask-image: linear-gradient(to right, white 0%, transparent 100%);
            mask-image: linear-gradient(to right, white 0%, transparent 100%);
            /* 给遮罩添加动画,动画名为slide-mask,持续时间3秒,无限循环 */
            -webkit-animation: slide-mask 3s infinite;
            animation: slide-mask 3s infinite;
        }
        /* 定义动画关键帧 */
        @-webkit-keyframes slide-mask {
            0% {
                /* 初始状态,遮罩在最左边 */
                -webkit-mask-image: linear-gradient(to right, white 0%, transparent 100%);
                mask-image: linear-gradient(to right, white 0%, transparent 100%);
            }
            100% {
                /* 结束状态,遮罩在最右边 */
                -webkit-mask-image: linear-gradient(to right, transparent 0%, white 100%);
                mask-image: linear-gradient(to right, transparent 0%, white 100%);
            }
        }
        @keyframes slide-mask {
            0% {
                -webkit-mask-image: linear-gradient(to right, white 0%, transparent 100%);
                mask-image: linear-gradient(to right, white 0%, transparent 100%);
            }
            100% {
                -webkit-mask-image: linear-gradient(to right, transparent 0%, white 100%);
                mask-image: linear-gradient(to right, transparent 0%, white 100%);
            }
        }
    </style>
</head>
<body>
    <!-- 带有动画效果的图片元素 -->
    <img src="https://picsum.photos/300/200" alt="A random image">
</body>
</html>

在这个例子里,我们通过动画改变了遮罩的渐变方向,让图片看起来像是从左到右慢慢显示出来。


3. 响应式设计

在不同的屏幕尺寸下,你可以用不同的遮罩来适配。比如在手机上用一个简单的圆形遮罩,在平板上用一个更复杂的多边形遮罩。

总之,mask-image属性非常强大,能让你的页面元素变得更有趣、更有创意。赶紧试试吧!


除了圆形,还有哪些形状可以用mask-image属性来创建遮罩效果?

在CSS里,除了圆形,mask-image属性还能创建好多其他形状的遮罩效果。下面就给你详细介绍几种常见形状的实现方法。


矩形遮罩

矩形遮罩是比较基础的一种,你可以用线性渐变来创建。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Rectangle Mask Example</title>
    <style>
        /* 选择带有rectangle-mask类的元素 */
       .rectangle-mask {
            /* 设置元素宽度 */
            width: 300px;
            /* 设置元素高度 */
            height: 200px;
            /* 使用线性渐变创建矩形遮罩 */
            /* 上下部分各有20%透明,中间60%显示 */
            -webkit-mask-image: linear-gradient(to bottom, transparent 20%, white 20%, white 80%, transparent 80%);
            mask-image: linear-gradient(to bottom, transparent 20%, white 20%, white 80%, transparent 80%);
        }
    </style>
</head>
<body>
    <!-- 带有矩形遮罩的图片元素 -->
    <img src="https://picsum.photos/300/200" alt="A random image">
</body>
</html>

在这个例子中,我们使用线性渐变创建了一个矩形遮罩,让图片只有中间部分显示,上下部分隐藏。


三角形遮罩

三角形遮罩可以通过线性渐变组合来实现。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Triangle Mask Example</title>
    <style>
        /* 选择带有triangle-mask类的元素 */
       .triangle-mask {
            /* 设置元素宽度 */
            width: 300px;
            /* 设置元素高度 */
            height: 200px;
            /* 使用线性渐变创建三角形遮罩 */
            -webkit-mask-image: linear-gradient(to bottom left, white 50%, transparent 50%);
            mask-image: linear-gradient(to bottom left, white 50%, transparent 50%);
        }
    </style>
</head>
<body>
    <!-- 带有三角形遮罩的图片元素 -->
    <img src="https://picsum.photos/300/200" alt="A random image">
</body>
</html>

这里我们用线性渐变从左上角到右下角,实现了一个三角形遮罩,让图片显示成三角形。


多边形遮罩

对于多边形遮罩,可以使用SVG图像作为遮罩。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Polygon Mask Example</title>
    <style>
        /* 选择带有polygon-mask类的元素 */
       .polygon-mask {
            /* 设置元素宽度 */
            width: 300px;
            /* 设置元素高度 */
            height: 200px;
            /* 使用SVG图像作为遮罩 */
            -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><polygon points="50,0 100,100 0,100"/></svg>');
            mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><polygon points="50,0 100,100 0,100"/></svg>');
            /* 让遮罩覆盖整个元素 */
            -webkit-mask-size: cover;
            mask-size: cover;
        }
    </style>
</head>
<body>
    <!-- 带有多边形遮罩的图片元素 -->
    <img src="https://picsum.photos/300/200" alt="A random image">
</body>
</html>

此例中,我们使用了一个SVG的多边形(三角形)作为遮罩,让图片显示成多边形的形状。你可以修改SVG里的points属性来创建不同形状的多边形。

这些不同形状的遮罩能让你的页面元素更加独特和有趣,你可以根据自己的需求进行调整和组合。


mask-image属性的应用场景有哪些?

mask-image属性在网页设计和开发中用途广泛,下面为你详细介绍其常见应用场景:

1. 图片特效

创建不规则形状图片:借助mask-image属性,能够让图片呈现出常规CSS属性难以实现的不规则形状,比如星形、心形等。如此一来,页面中的图片便会更具特色,吸引用户的注意力。

制作图片渐变透明效果:通过使用渐变作为遮罩图像,可以使图片的边缘逐渐透明,实现与背景自然融合的效果,为页面增添柔和、自然的视觉感受。


2. 动画效果

元素淡入淡出:可以通过改变遮罩图像的透明度,实现元素的淡入淡出效果。这种动画效果能够让页面的交互更加流畅,增强用户体验。

元素滑动显示:结合动画和mask-image,可以实现元素从一侧滑动显示的效果。这种效果常用于菜单展开、图片轮播等场景,为页面增添动态感。


3. 响应式设计

不同屏幕尺寸下的形状适配:在不同的屏幕尺寸下,可以使用不同的遮罩图像,使元素在各种设备上都能呈现出最佳的视觉效果。例如,在手机屏幕上使用简单的圆形遮罩,而在平板电脑和电脑屏幕上使用更复杂的多边形遮罩。

内容显示控制:根据屏幕尺寸,使用遮罩来控制元素的可见部分,确保重要信息始终可见。比如,在小屏幕上只显示图片的关键部分,而在大屏幕上显示完整的图片。


4. 图标和按钮样式

自定义图标形状:使用mask-image可以为图标创建独特的形状,使图标与网站的整体风格更加契合。这样可以提升网站的品牌形象,让用户更容易记住网站。

按钮交互效果:在按钮上应用遮罩效果,可以实现按钮点击时的特殊效果,如颜色渐变、形状变化等。这种交互效果能够增强用户与按钮的互动性,提高用户体验。


5. 视频遮罩

视频形状控制:可以使用mask-image为视频添加遮罩,使视频呈现出特定的形状,如圆形、椭圆形等。这种效果可以让视频在页面中更加突出,增加视频的视觉吸引力。

视频透明度控制:通过遮罩图像的透明度变化,可以实现视频的淡入淡出效果,或者控制视频的局部透明度,创造出独特的视觉效果。


以下是一个简单示例,展示如何使用mask-image创建不规则形状的图片效果:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mask Image Example</title>
    <style>
        .masked-image {
            width: 300px;
            height: 300px;
            -webkit-mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path d="M50 0A50 50 0 0 1 100 50A50 50 0 0 1 50 100A50 50 0 0 1 0 50A50 50 0 0 1 50 0Z"/></svg>');
            mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><path d="M50 0A50 50 0 0 1 100 50A50 50 0 0 1 50 100A50 50 0 0 1 0 50A50 50 0 0 1 50 0Z"/></svg>');
            -webkit-mask-size: cover;
            mask-size: cover;
        }
    </style>
</head>
<body>
    <img src="https://picsum.photos/300" alt="A random image">
</body>
</html>

    

在这个示例中,我们使用SVG路径创建了一个圆形的遮罩图像,并将其应用到图片上,使图片呈现出圆形的效果。你可以根据需要修改SVG路径,创建不同形状的遮罩效果。