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>
    

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

  • 相关阅读:
    Eclipse配置Maven私服
    ubuntu下使用Nexus搭建Maven私服
    Ubuntu系统的Redis安装配置
    centos7.6安装dpdk-stable-19.11.10
    微软的分布式应用框架 Dapr Helloworld
    Caddy源码阅读(二)启动流程与 Event 事件通知
    Caddy源码阅读(一)Run详解
    Caddy 源码全解析
    假装前端工程师(一)Icework + GitHub pages 快速构建可自定义迭代开发的 react 网站
    caddy & grpc(3) 为 caddy 添加一个 反向代理插件
  • 原文地址:https://www.cnblogs.com/foreverZ/p/6101194.html
Copyright © 2011-2022 走看看