搜索
热搜: 活动 交友 discuz
查看: 6|回复: 0

马黑黑《clip-path剪裁的元素如何投射阴影》

[复制链接]
  • TA的每日心情
    开心
    昨天 13:44
  • 签到天数: 481 天

    连续签到: 3 天

    [LV.9]以坛为家II

    560

    主题

    1461

    回帖

    1万

    积分

    社区管理员

    积分
    14363

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理

    发表于 昨天 14:44 | 显示全部楼层 |阅读模式

    使用 clip-path CSS属性剪裁的元素,box-shadowfilter: drop-shadow() 创建的元素外阴影均被裁剪掉。原因是 clip-path 属性只显示裁剪路径、形状等内部的区域,其外区域被彻底舍弃,以此方式将矩形元素改造为所需的任意形状。

    实际应用场景可能希望被 clip-path 裁剪的元素也能具备阴影功能,这需要另辟蹊径。最常见的方法是:保留元素的自然状态,裁剪其伪元素或子元素;主元素使用 filter 属性的 drop-shadow() 滤镜函数投射阴影而不是使用 box-shadow 属性实现,因为后者投射的阴影将会是主元素的矩形轮廓而非伪或子元素的裁剪形状。

    以下例子简单展示上述命题,主元素投射两个阴影:近阴影用于立体化伪元素的形状,远阴影则模拟光照所产生的物体投射在地上的影子——

    <style>
        .pa {
            width: 200px;
            height: 100px;
            /* 双阴影 :立体化 + 影子 */
            filter: drop-shadow(2px 2px 4px black) drop-shadow(5vw 30vh 10px gray);
            margin: 50px auto 0;
            position: relative;
        }
        .pa::before {
            position: absolute;
            content: '';
            width: 100%;
            height: 100%;
            background: linear-gradient(lightseagreen, green, lightseagreen);
            /* 多边形裁剪 */
            clip-path: polygon(0 50%,100% 0, 80% 50%, 100% 100%, 0 50%);
            transform-origin: 0 50%; /* 变换原点设在尖角处 */
            animation: swing 1.5s infinite alternate;
        }
        @keyframes swing {
            from { transform: rotate(-5deg); }
            to { transform: rotate(5deg); }
        }
    </style>
    
    <div class="pa"></div>
        
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|纳兰音画网 ( 蜀ICP备2021011087号-1 )

    GMT+8, 2026-8-3 04:51 , Processed in 0.118041 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2020 Comsenz Inc.

    快速回复 返回顶部 返回列表