一、 裁剪

  裁剪(clipping)能让元素显示指定形状的区域,在布局时可起点缀的作用,丰富了视觉呈现。注意,裁剪本质上只是让元素的部分区域透明,由此可知,裁剪完后元素所占的空间仍旧会保留。裁剪最早是在CSS 2.1时代由clip属性引入,但该属性只能应用于绝对定位的元素,并且只能裁剪成矩形。CSS3提供了强大的clip-path属性,突破了clip属性的众多限制,接下来将围绕clip-path属性展开讲解。

1)裁剪形状

  clip-path属性可以使用四种裁剪函数:circle()、ellipse()、inset()和polygon(),它们的作用和浮动形状中的shape-outside属性中的形状函数相同。

  下面用一个例子来演示这四个函数的效果,将它们分别应用到四个div元素中,样式如下,得到的形状如下图所示。

div {
width: 200px;
height: 200px;
background: url(./lake.png);
}
.circle {
clip-path: circle(50%);
}
.ellipse {
clip-path: ellipse(50% 30%);
}
.inset {
clip-path: inset(20px 10px);
}
.polygon {
clip-path: polygon(0 0, 100px 0, 160px 200px, 0 200px);
}

2)裁剪盒子

  裁剪盒子可指定形状的边界,其中margin-box、border-box、padding-box和content-box的作用与shape-outside属性中的相同,并且这些关键字也能与裁剪函数组合使用,如下所示。在下图中,左侧是原图,右侧是使用了clip-path属性后的效果。

div {
width: 160px;
height: 160px;
padding: 20px;
clip-path: content-box circle(50%);
}

  还有三个关键字view-box、fill-box和stroke-box适用于SVG元素,具体用途可在网上查到相关资料。

3)裁剪路径

  对于复杂的形状,可以采用SVG来创建裁剪路径,实现自定义。引用方式和滤镜中的一样,也是使用url()函数,但指向的是SVG文件中的clipPath元素,下面的SVG文件源自MDN网站。

<svg height="0" width="0" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="cross">
<rect y="110" x="137" width="90" height="90" />
<rect x="0" y="110" width="90" height="90" />
<rect x="137" y="0" width="90" height="90" />
<rect x="0" y="0" width="90" height="90" />
</clipPath>
</defs>
</svg>

  有两种方式引用SVG文件中的形状,第一种是外部引用,将SVG元素放在单独的文件中;第二种是行内引用,将SVG元素放在当前的HTML结构中。下面用两个CSS类来演示这两种引用方式,其中url()函数接收的参数的最大区别就是是否包含文件路径。

.url-cross {
clip-path: url(./shapes.svg#cross);
}
.inline-cross {
clip-path: url(#cross);
}

  两种方式的效果是相同的,都是将元素裁剪成四部分,如下图所示。注意,外部引用的浏览器支持度比较糟糕,目前只有Firefox支持。

二、遮罩

1)蒙版

  蒙版(masking)与裁剪类似,也是让元素以某种形状显示,但蒙版能根据透明度和灰度值计算裁剪边缘,并且有更多的蒙版属性可供选择,例如定位、尺寸、填充方式等。

  下面用一个例子来演示蒙版的用法,首先创建HTML结构,包含三个div元素。

<div class="lake"></div>
<div class="star"></div>
<div class="lake star-mask"></div>

  然后为三个div元素添加背景图,并给第三个元素定义蒙版,样式如下。注意,在Chrome浏览器中定义蒙版属性时,需要额外添加-webkit-前缀,例如将原来的mask-image属性改成-webkit-mask-image属性。

.lake {
background: url(./lake.png);
}
.star {
background: url(./star-shadow.png);
background-position: center;
background-repeat: no-repeat;
}
.star-mask {
mask-image: url(./star-shadow.png);
mask-position: center;
mask-repeat: no-repeat;
}

  在下图中,将第二张五角星作为蒙版,作用到第一张风景照中,第三张是发生遮罩后的效果图,可以看到五角星中不透明和半透明的区域会显示风景照中的内容。

  在.star-mask类中用到了mask-position,它的语法与background-position一样,下表列出了所有的蒙版属性和背景属性之间的对应关系。

蒙版属性 背景属性 作用
mask-size background-size 调整蒙版的尺寸
mask-repeat background-repeat 调整蒙版的填充方式
mask-position background-position 调整蒙版的定位
mask-origin background-origin 调整蒙版的原点
mask-clip background-clip 调整蒙版的裁剪区域

  CSS还提供了一个简写属性mask,可将上述属性合并到该属性中。关于蒙版还有一点需要注意,那就是遮罩用的蒙版图像既可以是位图图像(png、jpg等),也可以是矢量图形(指向SVG中的mask元素)。

2)替换元素的填充和定位

  CSS3引入了两个新属性,用于遮罩替换元素。第一个是object-fit属性,用来控制替换元素的内容以何种方式填充当前所使用的元素盒子,它有5个关键字可供选择,如下所列,效果如下图所示。

  (1)fill:将元素盒子填充满,它是object-fit属性的默认值。

  (2)contain:保持宽高比缩放,直到能将整块内容填充进元素盒子为止。

  (3)none:保持原有尺寸填充。

  (4)cover:保持宽高比缩放,直到水平或垂直方向撑满元素盒子为止。

  (5)scale-down:作用与none或contain中的一个相同,取决于谁的尺寸更小。

  第二个是object-position属性,用来控制替换元素的内容在元素盒子中的位置,其语法和background-position相同。

CSS躬行记(8)——裁剪和遮罩的更多相关文章

  1. CSS躬行记(1)——CSS基础拾遗

    一.box-decoration-break CSS3新增的box-decoration-break属性可指定行内非替换元素在跨行.跨列或跨页时的样式渲染,它包含两个值: (1)slice:默认值,盒 ...

  2. CSS躬行记(2)——伪类和伪元素

    一.伪类选择器 伪选择器弥补了常规选择器的不足,能够实现一些特殊情况下的样式,例如在鼠标悬停时或只给字符串中的第一个字符指定样式.与类选择器类似,可以从HTML元素的class属性中查看到,但伪选择器 ...

  3. CSS躬行记(3)——CSS属性拾遗

    一.粘滞定位 粘滞定位(sticky)与相对定位类似,既不会脱离正常流,也不会改变元素盒类型,并且会保留原先所占的空间.它会相对于包含块偏移,它的包含块分为两种,第一种和绝对定位一样:第二种是最近的滚 ...

  4. CSS躬行记(4)——浮动形状

    CSS规范新增了一个模块:CSS Shapes,shape-outside属性属于该模块,它能影响浮动元素周边内容流的形状(即浮动形状),可接收三类值:形状盒子.函数和图像. 一.形状盒子 形状盒子( ...

  5. CSS躬行记(9)——网格布局

    网格布局(Grid Layout)也叫栅格布局,与表格布局类似,也依赖行和列.但与之不同的是,网格布局能直接控制HTML文档中元素的顺序.位置和大小等,而不用再借助辅助元素. 一.术语 下图展示了CS ...

  6. CSS躬行记(6)——滤镜

    滤镜(filter)可改造元素的视觉呈现,CSS内置的滤镜有10种,通过SVG文件还能自定义滤镜. 一.调色滤镜 调色滤镜可控制元素的模糊.颜色.亮度等变化,并且多个滤镜可组合在一起使用.这些滤镜大部 ...

  7. CSS躬行记(7)——合成

    在图形编辑软件中,可以按特定地方式处理不同图层的合成,最新的CSS规范也引入了该功能,并提供了mix-blend-mode和background-blend-mode两个属性.混合模式(blendin ...

  8. CSS躬行记(10)——CSS方法论

    方法论是一个哲学术语,会对一系列具体的方法进行分析研究.系统总结并最终提出较为一般性的原则.CSS方法论是一种面向CSS.由个人和组织设计.已被诸多项目检验且公认有效的最佳实践.这些方法论都会涉及结构 ...

  9. CSS躬行记(11)——管理后台响应式改造

    为了提升业务人员操作管理后台的体验,花了点时间进行响应式的改造,紧急情况时,掏出手机就能工作. 利用CSS3的媒体查询,就能根据不同屏幕的尺寸采用不同的样式来渲染,目前使用的移动端屏幕阈值为750px ...

随机推荐

  1. CentOS下的Docker-Compose离线安装

    公司服务器已经安装了 Docker 环境,但没有安装 Docker Compose,使用起来十分不便.由于服务无法连接外网,下面演示如何离线安装 Docker Compose. (1)首先访问 doc ...

  2. vue+springboot后台实现页面按钮权限

    思路 1.用户跟角色关联 2.角色跟菜单关联 3.菜单跟菜单下的按钮关联 4.后端返回每个菜单下的按钮,前端通过自定义事件,在每个按钮上加上相应的事件 打字麻烦,还是看图吧! 建立btn.js 然后在 ...

  3. 微信小程序之界面交互反馈

    交互反馈就是在用户出发某事件之后,给用户一个反馈信息,这要是一个很友好的习惯. 在小程序中是通过一下几种方式实现的: 1.wx.showToast()方法 showToast: function (p ...

  4. Google GMS介绍

    Google GMS介绍GMS全称为GoogleMobile Service.GMS目前提供有Search.Search by Voice.Gmail.Contact Sync.Calendar Sy ...

  5. 躁!DJ 风格 Java 桌面音乐播放器

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...

  6. Python 1基础语法四(数字类型、输入输出汇总和命令行参数)

    一.数字(Number)类型 python中数字有四种类型:整数.布尔型.浮点数和复数. int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. ...

  7. Maybatis的一些总结(三:增删改查)

    回顾一个点 之前不懂这句: UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 现在理解了一点点,相当于实现了userMap ...

  8. 并查集---体会以及模板&&How Many Tables - HDU 1213

    定义&&概念: 啥是并查集,就是将所有有相关性的元素放在一个集合里面,整体形成一个树型结构,它支持合并操作,但却不支持删除操作 实现步骤:(1)初始化,将所有节点的父亲节点都设置为自己 ...

  9. 数据结构和算法(Golang实现)(16)常见数据结构-字典

    字典 我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页. 计算机中,也有这种需求. 一.字典 字典是存储键值 ...

  10. CentOS7安装JAVA环境

    安装JAVA环境我常用的有两种形式 1.下载tar包安装 2.下载rpm包直接安装 本篇内容就写这两种形式的安装方法: JAVA程序的下载地址:https://www.oracle.com/java/ ...