clip-path 属性

  1. clip-path 属性clip 属性的升级版。
  2. clip-path 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。
  3. clip 属性只能作用于 position 为 absolute 和 fixed 的元素且剪裁区域只能是正方形。
  4. 第一类值 basic-shape 一种形状,由不同的函数绘制。
  5. 第二类值 clip-source<url> 的方式引用SVG<clipPath> 来作为剪裁路径。
  6. 第三类值 geometry-box 它将为基本形状提供相应的参考框盒。利用确定的盒子边缘包括任何形状边角(比如说,被 border-radius 定义的剪切路径)。该属性大部分浏览器都不支持。

basic-shape

inset(top, right, bottom, left, round radius) 矩形

  • 可以传入5个参数,分别对应top,right,bottom,left的裁剪位置,round radius(可选,圆角)。
<!DOCTYPE html>
<html lang="en"><style>.img {margin-left: 50px;}.img1 {clip-path: inset(10px 20px);}.img2 {clip-path: inset(2em 1em 30% 20%);}.img3 {clip-path: inset(10px 20px 10% 20% round 50px);}.img4 {clip-path: inset(10px 20px 10% 20% round 40%);}</style><body><img src="./1.jpg" /><img class="img1" src="./1.jpg" /><img class="img2" src="./1.jpg" /><img class="img3" src="./1.jpg" /><img class="img4" src="./1.jpg" /></body>
</html>

circle(radius, at position) 圆

  • 传入两个参数:
  1. radius圆的半径,默认元素宽高中短的那个为直径,支持百分比。 使用百分比时 圆的半径 = (sqrt(width^2+height^2)/sqrt(2)) * 百分比, width、height分别为被剪裁元素的宽高 。
  2. at position圆心位置,默认为元素中心点。
<!DOCTYPE html>
<html lang="en"><style>.img {margin-left: 50px;}.img1 {clip-path: circle(100px);}.img2 {clip-path: circle(100px at 50px 100px);}.img3 {clip-path: circle(at center);}.img4 {clip-path: circle(20% at center);}</style><body><img src="./1.jpg" /><img class="img1" src="./1.jpg" /><img class="img2" src="./1.jpg" /><img class="img3" src="./1.jpg" /><img class="img4" src="./1.jpg" /></body>
</html>

ellipse( radius-x, radius-y, at position ) 椭圆

  • 可以传人3个可选参数:
  1. radius-x椭圆的X轴半径,默认是宽度的一半,支持百分比。
  2. radius-y椭圆的Y轴半径,默认是高度的一半,支持百分比。
  3. at position椭圆中心位置,默认是元素的中心点。
<!DOCTYPE html>
<html lang="en"><style>.img {margin-left: 50px;}.img1 {clip-path: ellipse(50px 100px at 50% 50%);}.img2 {clip-path: ellipse(45% 30% at 100px 50px);}.img3 {clip-path: ellipse(40% 30%);}.img4 {clip-path: ellipse(at 50% 50%);}</style><body><img src="./1.jpg" /><img class="img1" src="./1.jpg" /><img class="img2" src="./1.jpg" /><img class="img3" src="./1.jpg" /><img class="img4" src="./1.jpg" /></body>
</html>

polygon( [<fill-rule>,]? [<shape-arg> <shape-arg>]#) 多边形

  • 可传入两种类型的值:
  1. <fill-rule> 代表了填充规则(可选)。即,如何填充该多边形。可选值为 nonzeroevenodd。该参数的默认值为 nonzero
  2. <shape-arg> <shape-arg> 多组,每一对在列表中的参数都代表了多边形顶点的坐标。
<!DOCTYPE html>
<html lang="en"><style>.img {margin-left: 50px;}.img1 {clip-path: polygon(0% 100%, 50% 0%, 100% 100%);}.img2 {clip-path: polygon(5% 5%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);}.img3 {clip-path: polygon(0% 38.31%, 50% 0%, 100% 38.31%, 80.86% 100%, 19.14% 100%);}.img4 {clip-path: polygon(50% 0, 65% 40%, 100% 40%, 72% 60%, 85% 100%, 50% 75%, 15% 100%, 28% 60%, 0 40%, 35% 40%);}</style><body><img src="./1.jpg" /><img class="img1" src="./1.jpg" /><img class="img2" src="./1.jpg" /><img class="img3" src="./1.jpg" /><img class="img4" src="./1.jpg" /></body>
</html>

path( [<fill-rule>,]? <string>) SVG Path 绘制图形

  • 可传入两个参数:
  1. <fill-rule> 代表了填充规则(可选)。即,如何填充该多边形。可选值为 nonzeroevenodd。该参数的默认值为 nonzero
  2. <string> SVG Path 字符串。
  3. 改属性目前是,实验属性,部分浏览器不支持。
<!DOCTYPE html>
<html lang="en"><style>body {background-color: black;}.img {margin-left: 50px;}.img1 {clip-path: path('M 0 200 L 0,75 A 5,5 0,0,1 150,75 L 100 100 z');}.img2 {clip-path: path('M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z');}.img3 {clip-path: path('M0 31c109.323 19.23 189.323 28.845 240 28.845 50.677 0 130.677-9.615 240-28.845v100H0V31z');}.img4 {clip-path: path('M0 31.398C109.323 10.466 189.323 0 240 0c50.677 0 130.677 10.466 240 31.398V131.52H0V31.398z');}</style><body><img src="./1.jpg" /><img class="img1" src="./1.jpg" /><img class="img2" src="./1.jpg" /><img class="img3" src="./1.jpg" /><img class="img4" src="./1.jpg" /></body>
</html>

clip-source

获取SVG轮廓裁剪图像。

<!DOCTYPE html>
<html lang="en"><style>body {background-color: black;}.img {margin-left: 50px;}.img1 {clip-path: url(#myPath);}</style><body><svg><clipPath id="myPath" clipPathUnits="objectBoundingBox"><pathd="M0.5,1C 0.5,1,0,0.7,0,0.3A 0.25,0.25,1,1,1,0.5,0.3A 0.25,0.25,1,1,1,1,0.3C 1,0.7,0.5,1,0.5,1 Z"/></clipPath></svg><img src="./1.jpg" /><img class="img1" src="./1.jpg" /></body>
</html>

常用方式

实现图片从上往下加载

<!DOCTYPE html>
<html lang="en"><style>body {background-color: black;}.img {width: 280px;height: 180px;}img {overflow: hidden;-webkit-clip-path: polygon(0 0, 0 0, 100% 0, 100% 0);clip-path: polygon(0 0, 0 0, 100% 0, 100% 0);opacity: 0;transition: clip-path 1.1s ease-in, opacity 1.1s ease 167ms, -webkit-clip-path 1.1s cubic-bezier(0.19, 1, 0.22, 1);}.img:hover img {opacity: 1;-webkit-clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 0);clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 0);}</style><body><div class="img"><img src="./1.jpg" /></div></body>
</html>

  • 开始先设置图片剪切(clip-path: polygon(0 0, 0 0, 100% 0, 100% 0))和透明度(opacity: 0)为0。
  • 通过transition自动补间动画,由上向下逐渐增大剪切面积,实现效果

根据滚动实现图片切换

<!DOCTYPE html>
<html lang="en"><style>body {background-color: black;}.home {margin-top: 100px;width: 100%;/* 测试添加滚动条 */padding-bottom: 56.25%;position: relative;}.top,.bottom {width: 100%;height: 200px;position: absolute;top: 0;left: 0;right: 0;}.top {z-index: 1;background: url(./4.jpg) no-repeat center center;background-size: cover;}.bottom {z-index: 2;background: url(./3.jpg) no-repeat center center;background-size: cover;}</style><body><div class="home"><div class="top"></div><div class="bottom"></div></div></body><script type="text/javascript">var percentagevar direction = 0 // 0: 正向,1: 反向var scrollTem = 0 // 滚动高度function update() {const home = document.querySelector('.home')const top = document.querySelector('.top') // 上层const bottom = document.querySelector('.bottom') // 下层// 操作 top 的裁剪实现交替 修改 top 在上面 并设置 裁剪面积为0top.style.zIndex = '2'bottom.style.zIndex = '1'if (direction == 0) {// 正向scrollTem = window.scrollY}// 初始化 正向滚动if (window.scrollY === 0) {direction = 0}// 反向滚动if (window.scrollY < scrollTem && direction !== 1) {direction = 1}if (direction === 1) {// 反向percentage = 1 - window.scrollY} else if (direction === 0) {// 正向percentage = window.scrollY}var radius = percentage * Math.sqrt(top.clientWidth * 2 + top.clientHeight * 2)if (direction === 0) {top.style['clip-path'] = `circle(${radius + 'px'} at 0% 0%)`} else if (direction === 1) {top.style['clip-path'] = `circle(${radius + 'px'} at 0% 0%)`}}window.onscroll = update</script>
</html>

  • 这里使用的是最简单的方式,先根据层级绝对定位要切换的图片。然后通过滚动条的高度对上层图片进行裁剪,实现效果。

相关文章

绘制cilp-path
species-in-pieces

学习 clip-path属性 和 常用方式相关推荐

  1. JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能

    JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...

  2. vue快速学习01、环境与常用属性标签

    vue快速学习01.环境与常用属性标签 1.MVVC MVVM 设计模式是由 Model (模型). View (视图)和 ViewModel (视图模型)三部分组成,是 MVC 设计模式的进化版,即 ...

  3. 神经网络学习小记录45——Keras常用学习率下降方式汇总

    神经网络学习小记录45--Keras常用学习率下降方式汇总 2020年5月19日更新 前言 为什么要调控学习率 下降方式汇总 1.阶层性下降 2.指数型下降 3.余弦退火衰减 4.余弦退火衰减更新版 ...

  4. Matlab_GUI学习笔记(五)——常用对象的属性之Line

    Matlab_GUI学习笔记(五)--常用对象的属性之Line 1. Line 很多属性与之前的Figure与Axes属性差别不大,重点在于Line的核心属性Data. >> get(li ...

  5. Python学习记录day6-反射、常用模块

    Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...

  6. Windows校验文件哈希hash的两种常用方式

    大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...

  7. SpringMVC学习笔记(二)常用注解

    SpringMVC学习笔记(二)常用注解 1.RequestParam 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必 ...

  8. 前端学习——HTML初学__6 HTML常用标签(3)

    继续进行标签学习: 一.表格标签 表格主要用于显示,展示数据,它可以让数据显示的非常规整,可读性非常好,特别是后台展示数据的时候,一个表格可以将繁杂的数据表现得更加有条理. 表格基本语法如下: < ...

  9. 使用注解来让后端获取前端参数的常用方式

    如下是使用注解来让后端获取前端参数的常用方式: @RequestParam 前端发出的请求:path?id=1; 后端获取方式: @RequestMapper(value="path&quo ...

最新文章

  1. 洛谷4147:玉蟾宫——题解
  2. leetcode算法题--解码方法★
  3. 2013年2月最后一周
  4. linux 新增文件夹记录_linux文件系统(基础概念)
  5. 小学在班里排第几名家长才比较放心?
  6. c调用python函数_python - Linux C调用Python 函数
  7. smartsvn 忽略文件夹_SmartSVN设置忽略文件类型设置上传.a文件
  8. GDI函数 StretchDIBits,StretchBlt 缩小图片会有黑点的问题解决办法
  9. 计算二叉树叶子结点数目(C语言)
  10. 【数学】积分法推导求圆的周长、弧度
  11. 学前端需要什么学历?
  12. C语言实现反汇编【微机原理】
  13. USACO 2007 Dec Silver Mud Puddles bfs or A-star
  14. jdk,jre的下载安装教程
  15. navicat 无法连接mysql10060错误
  16. C语言中 .c 和 .h 文件有什么关系?
  17. 电脑办公利器 屈指可数的软件!
  18. 广东第二师范学院计算机科学与技术(软件工程)的专业在哪,广东第二师范学院好就业吗?广东第二师范学院就业如何?...
  19. 马斯克畅想的“超级高铁”物理上可行,但面临三大工程挑战
  20. Centos7 下移动所有文件到一个新的目录

热门文章

  1. Python替换docx模板文件内容
  2. 什么是欠拟合现象_在模型评估过程中,过拟合和欠拟合具体指什么现象?能否说出几种降低过拟合和欠拟合风险的方法?...
  3. 青岛一中2021年高考成绩查询,2021年青岛高考各高中成绩及本科升学率数据排名及分析...
  4. JavaWeb实现简单购物车案例
  5. 【小程序】使用WXSS编写样式介绍以及与CSS的区别
  6. Nginx配置 https 证书
  7. js数组中indexOf和findIndex的区别
  8. 结城浩的《图解设计模式》设计模式之Adapter模式的理解
  9. 《图解密码技术》(第三版)结城浩-知识结构整理
  10. 「山东城商行联盟」数据库准实时数据采集系统上线,DataPipeline助力城市商业银行加快数字化转型