CSS 遮挡和剪切属性 Masking

  • CSS 遮挡和剪切属性 Masking
    • 1. CSS Masking 的基本概念
    • 2. clip 属性: 设置 绝对/固定 定位元素的 可见区域 (可指定 四条剪切线的位置 , 已废弃,用 clip-path 替代)
    • 3. clip-path 属性:设置元素的 剪切区域 ( = 可见区域)
    • ♣ 结束语 和 友情链接

CSS 遮挡和剪切属性 Masking

用于 属性名 CSS 版本
① 设置 绝对/固定 定位元素的 剪切区域 = 可见区域 (可指定 四条剪切线的位置 , 已废弃,用 clip-path 替代) 。 clip 2
② 设置元素的 剪切区域 ( = 可见区域)。适用范围更广。 clip-path 2

1. CSS Masking 的基本概念

  • CSS Masking : ⇒ 隐藏元素 的方法。

    • 隐藏元素: 是一个 CSS 模块,它定义了 部分或全部 隐藏 可见元素的方法,包括 ❶ 遮挡和 ❷ 裁剪。
    • 相关属性
      • clip
      • clip-path
      • ❸ clip-rule (svg 中应用)
        • 只用于包含在 <clipPath>元素中的 图形元素。
      • mask (此属性和子属性的浏览器支持度 还不好,都是部分支持,属性是可识别的,应用于其上的值没有任何作用。以下属性 详细介绍 ,以后根据需要 再补上。)
        • mask-border
          • mask-border-mode
          • mask-border-outset
          • mask-border-repeat
          • mask-border-slice
          • mask-border-source
          • mask-border-width
        • mask-clip
        • mask-composite
        • mask-image
        • mask-mode
        • mask-origin
        • mask-position
        • mask-repeat
        • mask-size
        • mask-type

2. clip 属性: 设置 绝对/固定 定位元素的 可见区域 (可指定 四条剪切线的位置 , 已废弃,用 clip-path 替代)

  • 剪切 绝对/固定定位的元素: clip 属性

    • 可见区域:

      • clip 属性定义了 元素的哪一部分 是可见的。
      • 可指定 四条剪切线的位置 ⇒ 上下/左右剪切线 中间的区域 = 可见区域。
    • 适用对象:
      • 只适用于 ❶ 绝对定位元素 = position:absolute 的元素和 ❷ 固定定位的元素 position:fixed (固定定位,也算是 某种绝对定位)。
    • 已废弃
      • 该特性 已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。

  • 剪切的 语法

    • clip: rect(top,right,bottom,left)|auto|inherit;
<shape> | auto
where
<shape> = rect(<top>, <right>, <bottom>, <left>)/* 关键字值 Keyword value */
clip: auto;/* 矩形值,要带单位 可用空格符或逗号 分隔 <shape> values
空格分隔:  向后兼容的语法*/
clip: rect(1px 10em 3rem 2ch);
clip: rect(1px, 10em, 3rem, 2ch);/* 全局值 Global values */
clip: inherit;
clip: initial;
clip: unset;
  • 剪切的 属性值

    • 不剪切(默认值): auto

      • 浏览器 设置元素的形状。
      • ≠ 这与 rect(auto, auto, auto, auto) 不同,rect()会剪切到 元素的边框的内边界。
    • 可见区域 (剪切线的位置): rect()
      • 合法的形状值是:

        • rect(<top>, <right>, <bottom>, <left>)
        • rect(<top> <right> <bottom> <left>)
      • <top>, <right>, <bottom>, <left>的取值
        • ❶ 长度值 <length> 或 ❷ auto.。
      • 偏移量 = 剪切线的位置
        • 设置剪切的区域 偏移量 ,和 绝对定位的位置 偏移量 无关 ,只和元素本身的 整体宽高 有关。
        • 剪切位置 相对于: 相对 元素的 左边框 和 上边框 的距离。
          • <top><bottom>

            • 相对于盒子 上边框边界 的偏移量 = 剪切线的位置。

          • <right><left>
            • 相对于盒子 左边框边界 的偏移量 = 剪切线的位置。
        • 元素的 整体宽高
          • 元素的 整体高度 = 上下边框+上下内边距+高度 (外边距透明,此处 不含外边距)
          • 元素的 整体宽度 = 左右边框+左右内边距+宽度 (外边距透明,此处 不含外边距)
        • ❶ 上top = 上方 会剪切掉的距离 (从上往下剪切) 。
          • 最大值: 不能超过 元素的整个高度,否则会整个剪切掉。
          • 显示上边框 ⇒ 设置 top = 0px
        • ❷ 下bottom= 距离 上边框外边界的距离
          • 下方被剪切的距离 = 整个元素高度 - bottom的值 (负值 表示不剪切)
          • 显示下边框 ⇒ 设置 bottom = 元素的 整个高度 。
            • 小于 这个值,意味着 距离上边框更近, 从下往上剪切 一部分。
        • ❸ 左left = 左边 会剪切掉的距离
          • 最大值: 不能超过 元素的整个宽度,否则会整个剪切掉。
          • 显示左边框 ⇒ 设置 left = 0px
        • ❹ 右 right = 距离 左边框外边界的距离
          • 右方被剪切的距离 = 整个元素宽度 - right的值 (负值 表示不剪切)
          • 显示下边框⇒ 设置 right = 元素的整个宽度 。

  • 剪切区域的 浏览器支持


  • 示例1: 定义一个定位元素 进行剪切

    • 剪切线的位置 相对于: 是相对于 元素的 左边框和上边框的距离。
    • 剪裁区域和内容区: 取决于 剪切线的位置。
      • 可能 比元素的内容区大
      • 也可能 比内容区小。
  • html
<!--定位元素和剪切区域-->
<div class="posiancestor"><p class="position red">古人学问无遗力,</p><p class="position green">少壮工夫老始成。</p><p class="position red">纸上得来终觉浅,</p><p class="position green absolute">绝知此事要躬行。</p>
</div>
  • css
.red {background-color: indianred;/*margin: 10px;*/margin: 10px;}.green {background-color: lightseagreen;margin: 10px;}
/*去除各浏览器的 默认内外边距*/
* {margin: 0;padding: 0;
}
/*元素的包含块*/
.posiancestor {position: relative;top: 40px;left: 40px;margin: 10px;border: solid 10px;padding: 10px;width: 50%;
}.position {/* 设置宽高 */width: 150px;height: 50px;text-align: center;/*文字垂直居中: line-height = height*/line-height: 50px;border: solid 10px;margin: 5px;padding: 5px;
}
.absolute {/*设置 绝对定位类型*/position: absolute;top: 100px;left: 360px;/*z-index:-1;*//* 设置 剪切线的位置 */clip: rect(0px, 180px, 80px, 0px);clip: rect(10px, 180px, 80px, 10px);}
    clip: rect(10px, 180px, 80px, 10px);
  • 显示出来的部分= 上下 两条剪切线中间的部分 和 左右 两条剪切线中间的部分

    • 上边的 剪切线位置
      • 距离 元素的上边框 10px的位置 开始剪切 (上边会被剪切10px)。
    • 右边的 剪切线位置
      • 距离 元素左边框 180px的位置 开始剪切 。
      • 180px = 左右边框+左右内边距+宽度 = 10*2 + 5*2 + 150 = 180px
    • 下边的 剪切线位置
      • 距离 元素的上边框 80px的位置 开始剪切。
      • 80px = 上下边框+上下内边距+高度 = 10*2 + 5*2 + 50 = 80px
    • 左边的 剪切线位置
      • 距离 元素左边框 10px的位置 开始剪切。
  • clip: rect(auto, auto, auto, auto);
    • 四条剪切线的位置 都是 auto = 被剪切到该边的边框 = 边框和以内的内容 都可见。

3. clip-path 属性:设置元素的 剪切区域 ( = 可见区域)

  • 设置 元素的剪切区域 (可见区域): clip-path

    • 剪切区域

      • 元素可见部分: clip-path 属性创建一个 裁剪区域,用于设置 应显示 元素的哪个部分。
      • 可见和隐藏: 剪切区域内的 部分显示,区域外的隐藏。
    • 属性替代
      • clip-path 属性 代替了 现在已经弃用的剪切clip属性。
    • 适用对象
      • 所有元素;
      • 在 SVG 中,它适用于 容器元素,但不包括defs元素和 所有图形元素。

  • 剪切区域的 语法

    • clip-path: <clip-source> | [ <basic-shape> || <geometry-box> ] | none;
/* 关键字值 Keyword values */
clip-path: none;/* <clip-source> values */
clip-path: url(resources.svg#c1);/* 几何框/盒 值<geometry-box> values */
clip-path: margin-box;
clip-path: border-box;
clip-path: padding-box;
clip-path: content-box;
clip-path: fill-box;
clip-path: stroke-box;
clip-path: view-box;/* 基本形状的 形状函数值 <basic-shape> values */
clip-path: inset(100px 50px);
clip-path: circle(50px at 0 100px);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
clip-path: path('M0.5,1 C0.5,1,0,0.7,0,0.3 A0.25,0.25,1,1,1,0.5,0.3 A0.25,0.25,1,1,1,1,0.3 C1,0.7,0.5,1,0.5,1 Z');/* 同时设置 形状值 和 参考框 Box and shape values combined */
clip-path: padding-box circle(50px at 0 100px);/* 全局盒子 Global values */
clip-path: inherit;
clip-path: initial;
clip-path: unset;<clip-source> | [ <basic-shape> || <geometry-box> ] | none
where
<clip-source> = <url>
<basic-shape> = <inset()> | <circle()> | <ellipse()> | <polygon()>
<geometry-box> = <shape-box> | fill-box | stroke-box | view-boxwhere
<inset()> = inset( <length-percentage>{1,4} [ round <'border-radius'> ]? )
<circle()> = circle( [ <shape-radius> ]? [ at <position> ]? )
<ellipse()> = ellipse( [ <shape-radius>{2} ]? [ at <position> ]? )
<polygon()> = polygon( <fill-rule>? , [ <length-percentage> <length-percentage> ]# )
<shape-box> = <box> | margin-boxwhere
<length-percentage> = <length> | <percentage>
<shape-radius> = <length-percentage> | closest-side | farthest-side
<position> = [ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | <length-percentage> ] [ top | center | bottom | <length-percentage> ]? | [ [ left | right ] <length-percentage> ] && [ [ top | bottom ] <length-percentage> ] ]
<fill-rule> = nonzero | evenodd
<box> = border-box | padding-box | content-box
  • 剪切区域的 取值

    • clip-path属性 被指定为 下面列出的一 个或多个值 的组合。

  • 剪切区域的 属性值

    • Ⅰ.不创建剪切 (默认值): none

      • 不创建 剪切路径。
    • Ⅱ. 引用svg的[<clipPath>元素: <clip-source>
      • 一个<url>值 = 引用 SVG 的 一个<clipPath> 元素。
      • 可缩放 矢量图形Scalable Vector GraphicsSVG
        • 是一种用于 描述基于二维的矢量图形的,基于 XML 的标记语言。
      • 相对于图像: 本质上,SVG 相对于图像,就好比 HTML 相对于文本。
    • Ⅲ. 形状函数: <basic-shape>
      • 形状,其大小和位置 由<geometry-box>的值定义。
      • 剪切区域的默认参考盒:
        • 如果没有指定 几何框,则 ❶ 边框盒(border-box) 将用作 参考框/盒子。
      • 形状函数: inset()>, circle() , ellipse(), polygon(),path()
        • 详情参见: 【CSS 形状 (Shapes)】
    • Ⅳ. 几何框: <geometry-box>
      • 参考框:

        • 如果与<basic-shape>组合指定,此值将 指定 形状函数的 参考框。
      • 剪切路径:
        • 如果由它自己指定,它将使 ❶ 指定框的 边界 (包括任何 ❷ 圆角的形状,边框半径border-radius)成为 裁剪路径。
      • 几何框/盒 可以是以下值之一:
        • 盒模型中的 4个值 作为形状值⇒ 详情参见: 【CSS 形状 (Shapes)】

          • content-box
          • padding-box
          • border-box
          • margin-box
        • 对象边界框: fill-box (属性值 浏览器支持度很差)
          • 用 对象边界框(object bounding box) 作为 参考框。
        • 笔触边界框: stroke-box (属性值 浏览器支持度很差)
          • 用 笔触边界框(stroke bounding box)作为 参考框。
        • 最近的 svg 视窗: view-box
          • 使用最近的 SVG 视口(viewport)作为 参考框。
          • 如果 viewBox 属性 ⇒ 被指定来为元素 创建 SVG 视口
            • 参考框位置: 参考框 将会被定位在 坐标系的原点⇒ 参考框 位于由 viewBox 属性 建立的 坐标系的原点
            • 参考框 的尺寸: 被设置为 viewBox属性的 宽度和高度值。

  • 剪切区域的 浏览器支持

    • Edge,IE 只支持url()定义的剪切路径。
    • 谷歌需要浏览器前缀 -webkit-

    • 示例1: 给一张图片设置 剪切区域 / 可见区域。
  • html

    <img alt="" src="data:images/OrientalPearl.jpg" class="pearlimg">
  • css
.pearlimg {border: solid 5px lightskyblue;margin: 10px;padding: 10px;width: 300px;height: 200px;border-radius: 20%;background-color: #8fffdf;/*浮动*//*float: left;*//*设置 剪切区域的形状*/clip-path: none;clip-path:margin-box;clip-path:border-box;clip-path:padding-box;clip-path:content-box;/*-webkit-clip-path:content-box;*//*clip-path: inset(0% 0% 0px 0px);!*各边都不剪切*!*/clip-path: inset(10% 10% 10px 10px); /*各边 剪切掉一部分*/clip-path: inset(10% 10% 10px 10px round 50% 50%); /*各边 剪切掉一部分,被剪切的区域 设置圆角,不是原来的边框设置圆角*//*圆形*/clip-path:circle();/*clip-path:circle(at 50% 50%);*//*clip-path:circle(50% at 50% 50%);*//*clip-path:circle(60% at 50% 50%);*//*clip-path:circle(100px at 50% 50%);*//*clip-path:circle(100px at 50% 50%);*//*clip-path:circle(40% at 60% 50%);*/clip-path:circle(closest-side);/*clip-path:circle(closest-side at 50% 70%);*//*clip-path:circle(farthest-side);*//*椭圆形*//*clip-path: ellipse(100px 100px);*//*clip-path: ellipse(100px 100px at 50% 50%);*//*clip-path: ellipse(100px 50px);*//*clip-path: ellipse(100px 50px at 30%);!*圆心位置 只有一个,就是 横向位置,纵向默认50%*!*/clip-path: ellipse(100px 50px at 30% 50%);/*clip-path: ellipse(100px 50px at 30% 70%);*//*clip-path: ellipse(closest-side closest-side at 50% 50%);*//*clip-path: ellipse(farthest-side farthest-side at 50% 50%);*//*clip-path: ellipse(closest-side closest-side at 30% 70%);*//*clip-path: ellipse(farthest-side farthest-side at 30% 70%);*//*多边形*/clip-path: polygon(100px 10px , 200px  100px, 0px 100px); /*三个点坐标 = 三角形*//*clip-path: polygon(100px 10px , 200px  100px, 0px 100px,100px 200px); !*因为点的路线,四个点 = 两个相连的三角形*!*//*clip-path: polygon(evenodd, 100px 10px , 200px 100px,100px 200px, 0px 100px);*//*clip-path: polygon(100px 10px , 200px 100px,100px 200px, 0px 100px); !*四个点 = 四边形*!*/}
  • 默认显示 = 无剪切 = clip-path: none;

  • 外边距边界 作为剪切路径:⇒ 外边距, 边框以内都在。(存疑: 盒模型中的 4 个值,在谷歌中测试 无效果。)

    • clip-path:margin-box;
  • 边框的边界 作为剪切路径⇒ 边框以内都在。

    • clip-path:border-box;
  • 以内边距边界 为剪切路径⇒ 内边距区以内都在 (存疑: 图中4个角的 边框 没有被剪切干净)

    • clip-path:padding-box;

  • 以内容区边界 为剪切路径⇒ 内容区以内 都在。(存疑: 四个圆角 没有剪切干净,还是矩形)

    • clip-path:content-box;

  • 矩形剪切: 各边都向内 剪切掉一部分

    • clip-path: inset(10% 10% 10px 10px);
  • 矩形剪切: 并把 剪切区域 设置成圆角的。

    • clip-path: inset(10% 10% 10px 10px round 50% 50%);

  • 设置成 默认的圆形

    • clip-path:circle(); = clip-path:circle(closest-side);

  • 半径关键字不变 + 改变圆心的位置⇒ 剪切区域变化

    • clip-path:circle(closest-side at 50% 70%);

  • 剪切成 椭圆形

    • clip-path: ellipse(100px 50px at 30% 50%);

  • 剪切成 三角形

    • clip-path: polygon(100px 10px , 200px 100px, 0px 100px);



♣ 结束语 和 友情链接

  • 参考文档

    • MDN CSS 教程

  • 友情链接

    • CSS Masking | MDN
    • 【CSS 形状 (Shapes)】
    • 【CSS 单位 (详细介绍)】

  • 感谢:♥♥♥ 如果这篇文章 对您有帮助的话,可以点赞、评论、关注,鼓励下作者哦,感谢阅读 ~
  • 欢迎指正: 如果发现 有需要 更正的细节问题,欢迎指正,谢谢大家 ~╮( ̄▽ ̄)╭

  • 支持作者: 持续更新中,❤ 您的每一分赞助,让作者走得更远。

    • 可以备注 支持的理由 或 想对作者说的话哦~
  • 赞助二维码:

  • 转载 请评论告知作者 并注明出处 ,Thanks♪(・ω・)ノ

    • 作者:Hey_Coder
    • 来源:CSDN
    • 原文:https://blog.csdn.net/VickyTsai/article/details/103496346
    • 版权声明:本文为博主原创文章,转载 请评论告知作者 并附上博文链接!

【CSS 遮挡和剪切属性 Masking】相关推荐

  1. CSS中内容的剪切属性clip

    1. 在CSS中,可以使用剪切属性对元素内容的可视化区域进行控制,剪切区域所使用的属性时clip属性, 用来裁剪元素的可视化区域,内容的剪切属性可以使用2种属性值,一种为auto值,另一种为区域值,语 ...

  2. CSS动画——clip剪切动画

    css中有一动画属性:clip 语法:clip: rect(top,right,bottom,left);    例:clip: rect(0px, 50px, 50px, 0px); 作用:实现剪切 ...

  3. css text top,text-align属性(css中文本对齐属性)

    text-align属性 设置h1.h2.h3元素的文本对齐方法: h1{text-align:center} h2{text-align:left} h3{text-align:right} 亲自试 ...

  4. css选择器匹配没有属性x的元素[重复]

    本文翻译自:css selector to match an element without attribute x [duplicate] This question already has an ...

  5. CSS和JS样式属性对照表

    注意:1.在使用js时,如newTD.style.paddingLeft="200";(错误),正确生效的写法是newTD.style.paddingLeft="200p ...

  6. CSS 详细解读定位属性 position 以及参数

    Css 详细解读定位属性 position 以及参数 position 定位属性,是CSS中非常重要的属性.除了文档流布局,就是定位布局了.本来我对这个问题没有放在心上,毕竟写了这么多年的css,对p ...

  7. 可阅读性html css,css有继承性的属性有哪些?

    继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.CSS继承是指设置上级(父级)的CSS样式,上级(父级)及以下的子级(下级)都具有此属性. 继承性的作用:给父元素设置一 ...

  8. CSS学习笔记 display属性

    CSS学习笔记05 display属性 HTML标记一般分为块标记和行内标记两种类型,它们也称块元素和行内元素. 块元素 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高度.对齐等属性, ...

  9. Css3之基础-5 Css 背景、渐变属性

    一.CSS 背景概述 背景属性的作用 - 背景样式可以控制 HTML 元素的背景颜色.背景图像等 - 背景色 - 设置单一的颜色作为背景 - 背景图像 - 以图片作为背景 - 可以设置图像的位置.平铺 ...

最新文章

  1. Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例
  2. 如何在jupyter notebook上传文件夹
  3. java 虚拟打印机_Java 通过物理、虚拟打印机打印Word文档
  4. WiFi(网络)调试Android手机
  5. 微信小程序图片转换成文字_怎么利用微信小程序把图片上的文字转到word文本中?...
  6. \t\t使用Google APP Engine 完成个人代理服务器架设
  7. java设计模式——adapter模式
  8. devexpress控件使用笔记
  9. 【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
  10. flutter学习之基础组件(一)
  11. Wordpress建站教程:网站SEO优化
  12. OGRE粒子系统脚本详解
  13. 行思工作室官网移动端前端开发笔记
  14. vue项目中使用 Echarts的一些总结,包括饼图,折现图,折柱混图,年月日切换
  15. java 模拟投票代码_求投票系统(Java源代码)
  16. 已知测量精度,计算工业相机分辨率
  17. 最详细大数据项目落地路线图实践总结
  18. IOC容器(详细讲解)
  19. proteus仿真micropython_用Python让单片机“行动”起来——MicroPython实战入门篇
  20. UESTC1565 Smart Typist

热门文章

  1. python3的基本数据类型_python3基本数据类型
  2. scrapy源码2:scheduler的源码分析
  3. 威尔科克森(Wilcoxon)符号秩检验:定义,运行方式
  4. AutoRunner4.5结合真实项目crm客户管理系统进行界面功能自动化测试教学资料(登录)
  5. 服务器隐藏文件夹怎样打开,局域网文件如何设置隐藏?服务器隐藏文件夹的方法...
  6. 非日语专业如何有效学习日语?
  7. note3 android 4.4,三星手机升级安卓4.4.4名单曝光 S5、Note3将最快推送
  8. 【线程池封装】实现简单回射服务器
  9. oracle userenv('language'),USERENV()获取Oracle环境信息
  10. C#控件编程详解之文本框(TextBox)