CSS3中clip-path属性和元素使用方法

根据她的以往经验,这个网站的HTML和CSS是完全在她的能力范围以内,于是我帮助她完成了这个效果。显示nav被裁减的效果是一个不简单的任务,我看到图片的第一反应是创建一个相匹配的背景被部分裁剪的图像,然后把它设置为一个after元素。问题是,至少要解决响应式问题,并且响应式并不完全可控的。

了解CSS属性:clip-path
clip-path 是工作草案的一部分,它是一个通过屏蔽和裁减来隐藏元素的一部分的工具。尽管clip-path没有被主流的浏览器支持(包括IE和Firefox),但在webkit浏览器中,它仍然是一个实现时尚效果的小工具。

注意,在现代浏览器中需要使用-webkit-前缀。

clip-path 简单的工作原理是提供一系列的X和Y值来创建路径。当使用这些值创建一条完整路径时,就会把图像按照路径内部的尺寸进行裁剪。

利用clip-path,我们可以创建圆形、椭圆和多边形等不同的形状,创造力是唯一的限制。

一个简单的三角形裁减

对元素简单地运用clip-path就能实现上面的效果:

.clipClass {
  -webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%);
}

逐步分析

很像定位属性,我们需要考虑X值和Y值。X:0和Y:0表示从元素的左上角开始,并从左上角开始移动。X:100%指的是元素右边,Y:100%指的是元素底部。
对于上面创建的路径,实际是创建了如下的点:

x: 0, y:100%
x: 50%, y: 0
x: 100%, y: 100%

这个简单路径开始于左下角,水平移动50%,并到达顶部位置,然后又水平移动到100%的位置,垂直向下回到底部,到达第三个坐标点。三角形就出来了。

形状
在上面的示例中,我们使用polygon来创建一个图形,并通过多对用逗号(,)分开的X值和Y值定义了一个路径。然后,我们可以通过取不同的值来创建不同的图形。

 

为了创建圆形,需要给circle传入三个值:圆心的坐标(X值和Y值)以及半径。当定义圆的半径时,我们可以用at关键字来定义圆心坐标。

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

椭圆

很多时候,你不需要一个简单的圆,而是一个椭圆。

为了实现椭圆,需要给ellipse提供4个值:椭圆的x轴半径、y轴半径、定位椭圆位置的x坐标和y坐标,后面两个值用at关键字和前面两个值分开。

.clipClass {
  -webkit-clip-path: ellipse(30% 20% at 50% 50%);
}

插图

(在老版本的chrome中有错误) 

因为多边形边缘锐利,所以它可能不是你想要的东西,你想创建的是圆角矩形,所以我们来看看Inset的值。Inset使用四个值(对应“上 右 下 左”的顺序)来设置圆角半径。

.clipClass {
  -webkit-clip-path: inset(25% 0 25% 0 round 0 25% 0 25%);
}

上面的各个值分别对应为:

inset(<top> <right> <bottom> <left> round <top-radius> <right-radius> <bottom-radius> <left-radius>)
其简写形式:

.clipClass {
  -webkit-clip-path: inset(25% 0 round 0 25%);
}

快速参考

Circle: circle(radius at x-axis y-axis)
Ellipse: ellipse(x-rad y-rad at x-axis y-axis)
Polygon: polygon(x-axis y-axis, x-axis y-axis, … )
Inset: inset(top right bottom left round top-radius right-radius bottom-radius left-radius)

创建形状

正如你看到的,原型和圆角图形被少数几个值限制了,因而Polygons是创建复杂图形的最好选择。Polygons能定义多组点,允许我们用各种方式去裁图形。

Comic Textbox

.clipClass {
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
}
Star
Star
View the code on codepen

.clipClass {
  -webkit-clip-path: polygon(50% 0%, 63% 38%, 100% 38%, 69% 59%, 82% 100%, 50% 75%, 18% 100%, 31% 59%, 0 38%, 37% 38%);
}

动画

现在我们已经了解了各种图形和怎么创建它们,那怎么利用这些图形创建我们想要的效果呢?
给形状应用一个hover,并用过渡属性来创建平滑的效果。但是需要记住,我们创建的初始默认状态,必须同所有的hover状态都使用相同的坐标系。 

.animateClass {
  -webkit-clip-path: polygon(20% 0%, 0% 0%, 0% 50%, 0% 80%, 0% 100%, 50% 100%, 80% 100%, 100% 100%, 100% 50%, 100% 0, 80% 0, 50% 0);
}
.animateClass:hover {
  -webkit-clip-path: polygon(50% 0%, 0% 20%, 30% 50%, 0% 80%, 20% 100%, 50% 70%, 80% 100%, 100% 80%, 70% 50%, 100% 20%, 80% 0%, 50% 30%);
}

时间: 2024-09-08 18:05:08

CSS3中clip-path属性和元素使用方法的相关文章

解析CSS3中的Box-Sizing属性

在重构移动端页面的时候,我们经常会遇到两个框架并排的情况,并且需要宽度自适应.等宽,有边框这样的情况,我平时的方法就是用定位来处理,然后用负值定位来解决,但是后来发现可以用CSS3中的Box-Sizing属性来搞定.好吧,立马推荐出来给大伙. 语法: box-sizing: content-boxborder-boxinherit; 定义: box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素. 例如,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 "

去除arraylist容器中的相同的对象元素的方法_Android

<span class="keyword" style="background-color: rgb(250, 250, 250); font-size: 1em; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;">boolean</span><span style="

去除arraylist容器中的相同的对象元素的方法

<span class="keyword" style="background-color: rgb(250, 250, 250); font-size: 1em; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;">boolean</span><span style="

CSS3中的opacity属性使用教程

  RGBA和opacity 语法: R:红色值.正整数 | 百分数 G:绿色值.正整数 | 百分数 B:蓝色值.正整数| 百分数 A:透明度.取值0~1之间 CSS Code复制内容到剪贴板 /* IE6 - 8 */ filter: alpha(opacity=80); /* 其他 */ opacity: 0.8; RGBA比元素设置CSS的透明度更好,因为单独的颜色可以在不影响整个元素的透明度,他不会影响到元素其他的属性,比如说边框,字体同时也不会影响到其他元素的相关透明度. opacit

CSS3中的content属性使用示例

        CSS中主要的伪元素有四个:before/after/first-letter/first-line,在before/after伪元素选择器中,有一个content属性,能够实现页面中的内容插入. 插入纯文字 content:"插入的文章",或者content:none不插入内容 html: XML/HTML Code复制内容到剪贴板 <h1>这是h1</h1> <h2>这是h2</h2> css CSS Code复制内容

讲解CSS3中的border-radius属性

  Border-radius border-radius是一种缩写方法.如果"/"前后的值都存在,那么"/"前面的值设置其水平半径,"/"后面值设置其垂直半径.如果没有"/",则水平和垂直半径相等. CSS Code复制内容到剪贴板 border-radius: 2em 1em 4em / 0.5em 3em; 等价于: CSS Code复制内容到剪贴板 border-top-left-radius: 2em 0.5em;

ZBrush中Clip剪切笔刷的使用方法

  Clip剪切笔刷可以对模型网格进行剪切操作,也可以叫做剪切笔刷.接下来看一下Clip切割笔刷在ZBrush中是如何使用的. 步骤一 单击左工具架最上端的雕刻笔刷图标,弹出浮动面板,选择红框内的任意一个笔刷,这时会弹出一个对话框,单击OK按钮即可,如下图所示. 步骤二 按住Ctrl和Shift键,在模型上拖拽鼠标左键绘制剪切区域,如下图所示. 步骤三 按住Ctrl和Shift键的同时,单击左工具架最上端的雕刻笔刷图标,弹出浮动面板,选择笔刷,然后在模型上拖拽鼠标左键绘制选择区域,如下图所示.

为什么Set及子类中没有提供随机取元素的方法

问题描述 在List中提供了get等方法来实现随机取在容器中的元素,但是,为什么在Set中没有提供呢,如果要在Set及子类中实现随机读取元素,该怎么操作,不可能自己去遍历或将Set存到List中去吧. 解决方案 1.可以用Set的一下两个方法获取可以随机访问的数组:引用 Object[] toArray() 返回一个包含 set 中所有元素的数组. <T> T[] toArray(T[] a) 返回一个包含 set 中所有元素的数组:返回数组的运行时类型是指定数组的类型. 2.可以继承Hash

FME中Cass扩展属性转Shp的方法

问题:真受不了CAD中的注记,只能方便显示,难于数据交互.好在Cass把属性信息基本写在扩展属性中,但显示又成问题了.此事难两全!我们通过查看实体属性,需要把宗地界线的扩展属性提取出来.即组码为-3,South中的宗地号.户主名和地类代码提取出来. 分析:曾写过一个标注写入面属性的程序,最近又写了操作Cass扩展属性的程序,我想把两者结合起来解决此问题. 但在整理文档时,又发现了FME的安装,我想起了FME可以实现这个吧! 安装FME2014版本,用fmedatainspector打开处理后的C