显示裁剪 - CSS clip-path

562 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

基本概念

  • clip-path 属性使用裁剪方式创建元素的可显示区域,区域内的部分显示,区域外的隐藏。
  • clip-path 属性代替了现在已经弃用的剪切 clip 属性。

基本语法

clip-path: <clip-source> | <basic-shape> | <geometry-box>;
属性值说明
clip-source用 URL 表示剪切元素的路径
basic-shape将元素裁剪为基本形状:inset()矩形 circle()圆形 ellipse()椭圆 polygon()多边形
geometry-boxmargin-box / border-box / padding-box / content-box / fill-box / stroke-box / view-box 不支持chrome,且不常用
none默认设置,不裁剪

属性值 clip-source

<style>
    div{
        height: 600px;
        width: 600px;
        outline: auto;
        margin: auto;
        background: repeating-linear-gradient(45deg,black, black 20px,yellow 20px, yellow 40px);
        clip-path: url(#svgClipPath); /* 关键代码,引入svg */
    }
</style>
<body>
    <div></div>
    <!-- 内部svg -->
    <svg height="0" width="0">
        <defs>
            <clipPath id="svgClipPath">
                <text x="0" y="300" font-size="150px">WORLD</text>
            </clipPath>
        </defs>
    </svg>
</body>

clip-path: clip-source ;.png

属性值 basic-shape

inset()

功能:将元素剪裁为一个矩形

语法:clip-path: inset(<top> <right> <bottom> <left> <round num>),括号内的值类似于margin、padding值的写法,可以写一个值,也可以写多个值

示例:

div{
    height: 200px;
    width: 200px;
    outline: auto;
    margin: auto;
    background-color: antiquewhite;
    /*
     裁剪出一个矩形: 
     上面裁剪20px 
     右边裁剪5px 
     下边裁剪30px 
     左边不裁剪 
     四个角设置为圆角15px 
     */
    clip-path: inset(20px 5px 30px 0px round 15px);
}

clip:insett(20px 5px 30px 0px round 15px);.png

circle()

功能:将元素剪裁成一个圆

语法:clip-path: circle([<radius>]? [at <position>]?); radius 圆的半径,position 圆心位置

示例:

div{
    height: 200px;
    width: 200px;
    outline: auto;
    margin: auto;
    background-color: antiquewhite;
    /* 
     200px -> 圆半径
     at 0% 0% -> 圆心位置
     */
    clip-path: circle(200px at 0% 0%);
}

clip:circle(200px at 0% 0%);.png

ellipse()

功能:将元素剪裁成一个椭圆

语法:clip-path: ellipse([horizen-radius]? [vertical-radius]? [at <position>]?); horizen-radius 圆的水平半径 vertical-radius 圆的垂直半径 at position 圆心位置)

示例:

div{
    height: 200px;
    width: 200px;
    outline: auto;
    margin: auto;
    background-color: antiquewhite;
    /* 
     20px -> 椭圆水平半径
     100px -> 椭圆垂直半径
     at 50% 50% -> 圆心位置(正中心)
     */
     clip-path: ellipse(20px 100px at 50% 50%);
}

clip-path:ellipse(20px 100px at 50% 50%);.png

polygon()

功能:将元素剪裁成一个多边形,这里其实就是描点,多点连线,最少三个点,以距离左上角的长度为单位,跟canvas画布很像(Defines a polygon using an SVG fill-rule and a set of vertices)。

语法:clip-path:polygon([<X轴-距离左上角顶点的位置> <Y轴-距离左上角顶点的位置>]+);

示例:

/* 三角形 */
clip-path: polygon(50% 0%,100% 100%,0% 100%);
/* 五角星 */
clip-path: polygon(50% 0,61% 38%, 100% 38%,68% 61%,78% 100%,50% 75%, 19% 100%, 31% 61%,0 38%, 38% 38%);

triangle.png

five-angled star.png

See Also