CSS clip-path 属性的使用

news2024/9/23 10:44:30

今天记录一个css属性clip-path,首先介绍下这个属性。

clip-path 是CSS中的一个神奇属性,它能够让你像魔术师一样,对网页元素施展“裁剪魔法”——只展示元素的一部分,隐藏其余部分。想象一下,不用依赖图片编辑软件,直接在浏览器中就能实现元素的各种不规则形状裁剪。

clip-path 是CSS中一个强大的属性,它允许开发人员和设计师通过定义一个剪切区域来控制元素的可视部分,隐藏元素轮廓之外的内容。这一特性打破了传统矩形布局的限制,开启了创造非矩形、自定义形状设计的大门,对于提升网页和应用的视觉吸引力及交互体验具有重要意义。

作用clip-path 决定一个元素的哪些部分应该被显示,哪些部分应当被隐藏。通过在元素上应用一个剪切路径,可以实现如圆形头像、不规则形状的按钮或图片遮罩等多种视觉效果。

适用性:适用于几乎任何HTML元素,包括图片、文本块、背景以及更复杂的布局组件。

语法:支持多种函数定义剪切区域,如 circle(), ellipse(), polygon(), inset() 或者引用SVG中的 <clipPath>

浏览器兼容性:虽然现代浏览器广泛支持 clip-path,但早期版本和某些浏览器可能需要特定的前缀(如 -webkit-)来确保兼容性。检查最新的兼容性表格以确保广泛适用性。

动画与交互:结合CSS动画和过渡效果,clip-path 可以成为动态图形和交互设计的强大工具,实现元素形状的变化、加载动画或鼠标悬停效果等。总之,clip-path 是一个强大的设计工具,它不仅增强了网页的视觉层次,还推动了创新的用户界面设计,让网页元素的展示更加丰富多彩和引人入胜。

下面直接上代码,主要分为5种方法:

// 第一种圆形: circle()
/** 参数说明:  
半径: 50% 指定圆的半径。百分比值相对于引用盒子的高度和宽度中的较小者。
	也可以使用具体单位,如 100px。
位置: at 50% 50% 定义了圆心的位置。前一个值是水平位置,
	后一个是垂直位置。百分比值基于元素的宽度和高度。
*/
clip-path: circle(50% at 50% 50%);
// 第二种椭圆形:ellipse()
/** 参数说明: 
	水平半径: 50% 水平方向上的椭圆半径。
	垂直半径: 25% 垂直方向上的椭圆半径。
	位置: 同 circle() 函数,定义了椭圆中心的位置。
*/
clip-path: ellipse(50% 25% at 50% 50%);
// 第三种随机点位标点: polygon()
/** 参数说明:
顶点坐标: 列表形式给出多边形各顶点的坐标,每一对值代表一个点的水平位置和
		垂直位置。例如,25% 0% 表示第一个顶点位于元素宽度的25%处,垂直顶部。
*/
clip-path: polygon(25% 0%, 100% 25%, 75% 100%, 0% 75%);
// 第四种不规则矩形: inset()
/** 参数说明:
上右下左边距: 分别指定上、右、下、左边界的偏移量,可以是长度值或百分比。
round: 可选,用于设置圆角。后面跟一个或四个长度值,分别对应全部圆角或按顺序对应每个角的圆角半径。
*/
clip-path: inset(20px 40px 60px 80px round 15px);
<!-- 
第五种:SVG路径
这段SVG代码定义了一个包含内外两个矩形的剪切区域,外部大矩形剪出基本形状,内部小矩形进一步剪去中间部分。
然后在HTML元素中通过CSS引用这个SVG剪切路径ID。
 -->

<svg>
  <defs>
    <clipPath id="customClip">
      <path d="M10 10 H90 V90 H10 L10 10 Z M30 30 H70 V70 H30 Z"/>
    </clipPath>
  </defs>
</svg>

<div class="clipped-content" style="clip-path: url(#customClip);"></div>

响应式页面,适应不同的屏幕,保持良好的视觉效果

@media (max-width: 600px) {
  .element {
    clip-path: polygon(20% 0%, 100% 0%, 100% 80%, 0% 100%);
  }
}

@media (min-width: 601px) and (max-width: 1024px) {
  .element {
    clip-path: polygon(10% 0%, 100% 0%, 100% 90%, 0% 100%);
  }
}

/* 更大的屏幕尺寸 */
@media (min-width: 1025px) {
  .element {
    clip-path: polygon(5% 0%, 100% 0%, 100% 100%, 0% 100%);
  }
}

下面是一些示例:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            display: flex;
        }

        .circleBox {
            width: 100px;
            height: 150px;
            background-color: red;
            clip-path: circle(20% at 50% 50%);
            clip-path: circle(20% at center);
        }

        .ellipseBox {
            width: 100px;
            height: 150px;
            background-color: #0078d4;
            clip-path: ellipse(20% 25% at 50% 50%);
        }

        .polygonBox {
            width: 200px;
            height: 80px;
            background-color: #fad701;
            clip-path: polygon(10% 0, 80% 0, 60% 50%, 80% 100%, 10% 100%, 30% 50%);
        }

        .polygonBox:hover {
            clip-path: polygon(0 20%, 100% 0, 100% 80%, 0 100%);
        }

        .insetBox {
            width: 100px;
            height: 150px;
            background-color: #46ca71;
            clip-path: inset(10px 30px 15px 20px round 5px);
            /* clip-path: inset(10px round 5px); */
        }

        .image-container {
            width: 200px;
            height: 200px;
            border-radius: 50%;
        }

        .circular-image {
            width: 100%;
            object-fit: contain;
            clip-path: circle(50% at center);
        }

        @keyframes clipPathAnimation {
            0% {
                clip-path: polygon(0% 0%, 0% 100%, 100% 100%);
            }

            50% {
                clip-path: circle(50% at 50% 50%);
            }

            100% {
                clip-path: polygon(100% 0%, 100% 100%, 0% 100%);
            }
        }

        .element {
            width: 100px;
            height: 100px;
            background-color: red;
            animation: clipPathAnimation 3s infinite;
        }
    </style>
</head>

<body>

    <div class="circleBox">圆形</div>
    <div class="ellipseBox">椭圆形</div>
    <div class="polygonBox">随机点位形成图形</div>
    <div class="insetBox">不规则矩形</div>


    <div class="image-container">
        <img src="https://profile-avatar.csdnimg.cn/4c7665966b61478aadd11d0ffa4b15df_weixin_50559423.jpg!1"
            alt="Sample Image" class="circular-image">
    </div>

    <div class="element"></div>

</body>

</html>

效果:
在这里插入图片描述

以上就是针对 clip-path 属性所作的介绍,多种用法等你去发现,欢迎点赞收藏!谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb--纯小白笔记04:Tomcat整合IDEA

IDEA整合Tomcat 1.点击Idea的导航栏里的Run&#xff0c;选择Edit Configurations 2.点击左上角的""&#xff0c;向下翻找到Tomcat Server 选择里面的Local 3.创建一个web工程&#xff0c;点击IDEA的File-->new-->project 然后选择Java Enterprise&#xff0c;…

【网络安全】网络基础第一阶段——第一节:网络协议基础---- OSI与TCP/IP协议

从今天起&#xff0c;我们正式进入第二部分——网络基础。继续学习网络基础、网络协议等相关内容&#x1f31f;&#x1f31f;&#x1f31f; 目录 一、OSI模型 1.1 分层思想 1.2 OSI参考模型 1.3 数据封装与解封装 1.3.1 数据的封装过程 1.3.2 数据的解封装过程 二、TCP/…

实现信创Linux桌面录制成MP4(源码,银河麒麟、统信UOS)

信创国产化已是大势所趋&#xff0c;在国产操作系统上的应用开发的需求越来越多&#xff0c;比如&#xff0c;有客户需要在银河麒麟和统信UOS上实现录制桌面生成一个mp4文件。那么这个要如何实现了&#xff1f; 一. 技术方案 要完成这些功能&#xff0c;具体来说&#xff0c;…

初写MySQL四张表:(4/4)

进度条很喜人&#xff0c;你是否已经修炼到这一步了呢&#xff1f; 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)_数据库表样例-CSDN博客 初写MySQL四张表:(3/4)-CSDN博客 若现在你已经有了前面的基础&#xff0c;那就正式开始吧。 四张表&#xff1a; 这次在实现…

JavaScript 基础 - 第20天_Node.js入门

文章目录 Day01_Node.js入门提前安装软件目录学习目标01.什么是 Node.js目标讲解小结 02.fs模块-读写文件目标讲解小结 03.path模块-路径处理目标讲解小结 04.案例-压缩前端html目标讲解小结 05.案例-压缩前端JS目标讲解小结 06.认识URL中的端口号目标讲解小结 07.http模块-创建…

花生壳、神卓互联等主流内网穿透技术分享

目录 贝锐花生壳 PHTunnel技术 神卓互联WanGooe Tunnel 技术 贝锐花生壳 PHTunnel技术 贝锐花生壳内网穿透服务商&#xff0c;(使用技术&#xff1a;底层采用自研 PHTunnel技术)除了具备无需公网IP&#xff0c;无需搭建专线、3步创建映射等优势&#xff0c;还拥有可靠、稳定的…

JAVA开源项目 图书馆管理系统 计算机毕业设计

本文项目编号 T 044 &#xff0c;文末自助获取源码 \color{red}{T044&#xff0c;文末自助获取源码} T044&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

Go 语言框架接入阿里云的报警通知与日志实时追踪与监控

在现代应用开发中&#xff0c;实时监控和报警是确保系统稳定性和高可用性的重要组成部分。 本文将介绍如何使用 Go 语言框架接入阿里云的报警通知与日志追踪。 ## 1. 环境准备 ### 1.1 安装 Go 确保你的开发环境中已经安装了 Go 语言。可以从 [Go 官网](https://golang.org/d…

使用 Docker 部署 RStudio 的终极教程

一.介绍 在现代数据科学和统计分析领域&#xff0c;RStudio 是一个广受欢迎的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为用户提供了强大的工具来编写、调试和可视化 R 代码。然而&#xff0c;传统的 RStudio 安装可能面临环境配置复杂、版本兼容性等问题。Docker…

SpringCloud Alibaba之Seata处理分布式事务

&#xff08;学习笔记&#xff0c;必用必考&#xff09; 问题&#xff1a;Transactional 的9种失效场景&#xff1f; 1、介绍 1.1、简介 官网地址&#xff1a;Apache Seata 源码地址&#xff1a;Releases apache/incubator-seata GitHub Seata是一款开源的分布式事务解决…

Redis面试真题总结(四)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ AOF 持久化&#xff1f; AOF&#xff08;Append Only File&#x…

基于机器学习的区域能源生产与消费的分析与预测系统实现,前端layui,后端flask,可视化echarts

1 绪论 1.1选题的意义 基于机器学习的区域能源生产与消费的分析与预测研究具有重要意义。随着能源需求不断增长和资源供给压力加大&#xff0c;能源生产与消费的合理规划和管理成为当务之急。通过机器学习技术&#xff0c;可以对大规模的能源数据进行深入挖掘和分析&#xff…

Qt-QTextEdit的输入类控件(30)

目录 描述 相关属性 相关信号 使用 文本内容改变时触发 选中内容时发生改变 光标位置发生改变时触发 可复制&#xff0c;可撤销&#xff0c;可恢复发生改变时触发 undo撤销 redo恢复 copy复制 描述 这是一个多行输入框 有两个很像的&#xff0c;需要注意一下&…

【软件工程】实体联系图

一、数据模型 二、实体联系图&#xff08;E-R图&#xff09; 例题 选择题

CSS-Grid布局详解

前言 Grid 栅格布局 是 CSS 语言中非常强大的种布局&#xff0c;它提供了丰富的工具属性&#xff0c;可以轻松实现复杂且灵活的布局设计&#xff0c;因此想要完美使用CSS Grid 也有一定的难度和复杂性&#xff0c;我自己也是花了不少时间才真正掌握它的使用&#xff0c;在这篇…

【软件造价咨询】工程活动工作量分布占比的统计分析

在软件项目管理中&#xff0c;准确估算工程活动的工作量是确保项目按时、按预算完成的关键。工程活动工作量分布基准数据明细提供了一种量化工作量的方法&#xff0c;可以帮助团队成员更好地预测和把控不同工程活动所需的工作量。本文将探讨工程活动工作量分布基准数据明细的意…

offsetX、offsetY...

文章目录 offsetX & offsetYclientX & clientYpageX & pageYscreenX & screenYinnerHeight & innerWidthoffsetHeight & offsetWidthoffsetTop & offsetLeftscrollHeight & scrollWidthscrollTop & scrollLeft:与scrollHeight和scrollWidt…

图为科技大模型一体机,智领未来社区服务

当AI与边缘计算相遇&#xff0c;一幅关于智慧生活的宏伟蓝图正缓缓展开。 今天&#xff0c;让我们一同探索&#xff0c;如何通过图为大模型一体机&#xff0c;为物业服务插上智能的翅膀。 通过整合采集物业数据&#xff0c;大模型一体机可全方位为物业行业赋能&#xff0c;实…

Vue3实现类ChatGPT聊天式流式输出(vue-sse实现)

1. 效果展示 流式输出 直接输出 2. 核心代码 找了一些示例与AI生成的代码&#xff0c;或多或少有些问题&#xff0c;搞了好久&#xff0c;郁闷~&#xff0c;在此记录下 2.1 依赖安装 npm install vue-sse2.2 改写main.ts import VueSSE from vue-sseconst app Vue.cre…

ubuntu+MobaXterm+ssh+运行Qt(成功版)

点击上方"蓝字"关注我们 01、ubuntu连接SSH >>> 通过串口工具连接ubuntu 登录 解决连接不上的问题 检查 SSH 服务:确保目标机器上 SSH 服务已启动。你可以在目标机器上运行以下命令: sudo systemctl status ssh 如果没有运行,可以使用以下命令启动 SSH …