CSS3干货19:CSS3中的遮罩 mask 样式及其拓展

在网页中看到这种图:

第一反应是把这个图片切片,做成png。

没毛病~!但是,如果要更换图中的妹子,岂不是又要切一次图??麻烦。

今天居然看到 CSS3 的一个新增样式 mask (遮罩),可以简单实现上图效果,而且可以保证内容图片完整,直接更换不用切片。

开始~

一、准备工作

准备内容图片,和遮罩png图。不出意外的话,建议内容图片和遮罩png图大小一样(当然也可以不一样,具体根据需要来定。)

PNG图:400*400,名:m1.png

内容图:400*400

二、HTML结构和基本CSS样式

<div class="mask">
    <img src="images/3d/11.jpg" alt="">
</div>
.mask{
    margin-left: auto;
    margin-right: auto;
    width: 400px;
    height: 400px;
}

三、添加 mask

.mask{ 
    ...省略其他样式...
    mask: url("images/m1.png") center center/400px 400px no-repeat ;
    -webkit-mask:url("images/m1.png") center center/400px 400px no-repeat ; 
}

解释:设置mask遮罩图片的地址,位置 / 大小,是否重复。

四、给mask添加过渡动画

.mask{
    ...省略其他样式...
    transition:all 0.5s;
}
.mask:hover{
    mask: url("images/m1.png") center center/400px 400px   no-repeat ;
    -webkit-mask:url("images/m1.png") center center/420px 420px no-repeat ;
}

当鼠标放到 div.mask 上的时候,mask部分会放大。

五、小结

  1. 作为遮罩mask的图片,不论颜色,只看透明区域和不透明区域
  2. mask能盖住的部分除了图片,文字之类的内容都可以。
  3. 目前 mask 样式还未最终形参标准,chrome 派系浏览器还必须添加 浏览器前缀 -webkit-。不过 firefox 从 53 版本开始已经全面支持 mask。

mask 的浏览器支持情况如下:图来自 caniuse.com

     3. 如果 mask 图片有半透明的部分,那么展示的内容效果也是半透明的。

换一个半透明的png图,作为 mask 的效果:

拓展1:SVG 中的 mask

SVG 也有 mask 效果。

<div class="mask">
    <svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
        <defs>
            <mask id="svgmask" x="0" y="0" width="100%" height="100%">
                <rect x="0" y="0" width="100%" height="100%" fill="#000" ></rect>
                <!-- 遮罩内容 -->
                <text x="200" y="110" fill="#fff">
                  I love you
                    我爱你
                </text>
                <circle cx="200" cy="200" r="100"
                        stroke-width="0" fill="#fff"></circle>
                <!-- 遮罩内容 end -->
            </mask>
        </defs>
        <!-- 图片内容 -->
        <image href="images/1.jpg" x="0" y="0" width="400" height="400"
               mask="url(#svgmask)"></image>
        <!-- 图片内容 end -->
    </svg>
</div>

 

注意:

1. SVG 遮罩中,白色可见,黑色不可见,其他颜色根据颜色的深浅呈现不同的半透明效果。

2. 在应用 mask 的内容上要添加 mask 属性。

拓展2:结合SVG和mask样式的遮罩

HTML:

<div class="mask">
    <svg width="400" height="400" xmlns="http://www.w3.org/2000/svg">
        <defs>
            <mask id="svgmask" x="0" y="0" width="100%" height="100%">
                <rect x="0" y="0" width="100%" height="100%" fill="#fff" ></rect>
                <!-- 遮罩内容 -->
                <text x="200" y="100" fill="#000">
                  I love you
                    我爱你
                </text>
                <circle cx="200" cy="200" r="100"
                        stroke-width="0" fill="#000"></circle>
                <!-- 遮罩内容 end -->
            </mask>
        </defs>
        <rect x="0" y="0" width="100%" height="100%"
              fill="#fff" ></rect>
    </svg>
    <!-- 内容可以是图片,视频等 -->
    <img src="images/1.jpg" width="400" height="400" alt="">
</div>

CSS:

*{
    margin: 0;
    padding: 0;
}
.mask{
    margin-left: auto;
    margin-right: auto;
    width: 400px;
    height: 400px;
    position: relative;
}
.mask svg{
    position: absolute;
    top: 0;
    right: 0;
}

.mask svg text{
    text-anchor: middle;
    font-size: 50px;
}
.mask > svg > rect{
    -webkit-mask: url(#svgmask);
    mask: url(#svgmask);
}

mask 应用示例:一些不规则的图像展示

当然,更多 mask 的有趣应用,等着我们去开发~!

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: CSS3遮罩loading是一种常见的网页加载效果,通过使用CSS3的特性来实现。下面是一种简单的实现方式: 首先,在HTML文件创建一个容器元素,用于包裹loading效果的内容。可以使用一个div元素,设置好宽高和位置。 接着,在CSS文件给这个容器元素添加样式。可以使用position属性将其定位在页面心,然后设置背景色和透明度,使其成为一个半透明的遮罩。 然后,在容器元素添加一个loading效果。可以使用伪类:before或:after来创建一个圆形或旋转的元素。可以使用CSS3的keyframes来设置旋转动画,或者使用transition来实现平滑的过渡效果。 最后,使用JavaScript来监听页面的加载事件,一旦页面的内容加载完毕,就移除这个遮罩层,展示出页面的内容。 总结来说,CSS3遮罩loading是通过使用CSS3的特性来创建一个带有loading效果的遮罩层,用于页面加载时展示loading状态,给用户一个良好的体验。在实现过程,需要结合HTMLCSS和JavaScript来完成。这种loading效果简单实用,可以根据需求进行灵活的样式和动画设置,提升用户体验。 ### 回答2: CSS3遮罩loading指的是使用CSS3技术实现的一种页面加载动画效果。主要通过遮罩层和旋转动画来展示加载的过程。 首先,我们可以使用一个遮罩层来覆盖整个页面,遮挡住用户的操作,防止用户在加载过程的干扰。通过设置遮罩层的宽度和高度为100%,使其覆盖整个页面。 接下来,我们可以使用CSS3的旋转动画来表示加载的过程。通过设置一个旋转的图标(例如一个圆圈或者一个齿轮)在遮罩层的央,并给这个图标设置一个旋转的动画效果。在CSS3,我们可以使用关键帧(@keyframes)语法来定义一个旋转动画。通过设置动画的起始状态和结束状态、旋转的角度以及动画的持续时间和重复次数等属性,就可以实现一个旋转的加载动画效果。 最后,加载完成后,可以通过JavaScript或者其他交互方式将遮罩层和加载动画移除,显示真正的页面内容。 总的来说,CSS3遮罩loading通过遮罩层和旋转动画来展示加载过程,使用户在等待加载完成时有了一个视觉的反馈,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值