zoukankan      html  css  js  c++  java
  • 试坑不完美的 clip-path (我说的 CSS 的那个)

    需求跟我说,咱们要创新,想做一个蜂巢状的列表,年少无知的我竟然一口答应了,全然因为刚接触了 clip-path;

    But,然而,不幸的是,这只是坎坷路途的开始....

    clip-path 的教程很多了,在此就不赘述了,

    比 clip: rect() 这个弃子不知道高级了多少倍,苦等多年用 CSS 玩 SVG 的感觉已经有了一丢丢(虽然还有很多没有)

    两个参数,一个盒子范围(可选)和 一个剪切形状

    /* 圆形 */
    clip-path: padding-box circle(50px at 0 100px);  /* padding-box 盒模式下剪切成中心在 0 100px,半径 50px 的圆 */
    
    /* 多边形 */
    clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); /* 正六边形 */
    
    /* 椭圆 */
    clip-path: ellipse(65px 30px at 125px 40px);
    
    /* 方形 */
    clip-path: inset(10px, 0, 10rem, 1em); /* 当时老诧异了,为什么 clip:rect() 不是这样算边界的 */
    
    /* 圆角 */
    clip-path: inset(10% 10% 10% 10% round 20%, 20%);
    

    但兼容性就很尴尬了呀,基本只有 -webkit- 能玩了,

    还好公司是做移动端的,测试大部分手机还没发现问题,但老版安卓和各大 app 里面的浏览器怎么样就很难说了...

    虽然神奇的是点击范围也成了剪切后的范围,但依旧有些需求没法达成。(border-radius 可以用 polygon 搞)

    比如 border, box-shadow 的效果不是想象中那样呀子级或内部文本范围并非剪切范围

     但需求还是要完成呀,真是需求和程序的千年虐恋...

    后来又试了些办法...比如 SVG 的 <clipPath> 和 <mask>,border 等,都不能满足需求。

    比如,点击范围,背景图不统一,没法加边框和阴影之类的。

    现在使用的是三个 DIV 的旋转来构成,看一下这冗长的代码:

    .comb {
        position: relative;
    }
    .comb:before {
        content: "";
        padding-top: 86.602%;
        display: block;
        margin: 0 -14.433%;
    }
    .comb-shape {
        position: absolute;
        top: 0%;
        bottom: 0%;
        left: 25%;
        right: 25%;
        z-index: 1;
        opacity: 0.9;
        background-size: 0 0;
    }
    .comb-shape:hover {
        opacity: 1;
    }
    .horn1, .center, .horn2 {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        display: block;
        background-image: inherit;
        overflow: hidden;
    }
    .center {
        background-repeat: no-repeat;
        background-position: center;
        background-size: auto 120%;
    }
    .horn1, .horn2 {
        background-size: 0 0;
    }
    .horn1 {
        transform: rotate(60deg);
    }
    .horn2 {
        transform: rotate(-60deg);
    }
    .horn1:before, .horn2:before {
        content: "";
        position: absolute;
        top: 0;
        bottom: 0;
        left: -50%;
        right: -50%;
        background-image: inherit;
        background-repeat: no-repeat;
        background-position: center;
        background-size: auto 120%;
    }
    .horn1:before {
        transform: rotate(-60deg);
    }
    .horn2:before {
        transform: rotate(60deg);
    }
    .border .center,
    .border .horn1,
    .border .horn2 {
        border-top: 2px solid #000;
        border-bottom: 2px solid #000;
    }
    
    <div class="comb">
        <div class="comb-shape" style="background-image: url(img/lake2.png);">
            <a class="horn1" href="#"></a>
            <a class="horn2" href="#"></a>
            <a class="center" href="#"></a>
        </div>
    </div>
    

    没办法了,先这样吧,现实都不美好,我对新世界充满了期待...

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/foreverZ/p/6101194.html
Copyright © 2011-2022 走看看