花潮论坛

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

offset-path ray 函数演示(一)

[复制链接]
  • TA的每日心情
    奋斗
    2026-7-30 18:10
  • 签到天数: 1885 天

    [LV.Master]伴坛终老

    3291

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-7-30 18:11 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    CSS 属性 offset-path 可以通过 ray() 函数创建由里往外发射的射线路径。射线路径的发起点默认在包含块即容器的中心(50% 50%);射线方向由射线角度决定,0deg 为正上方向;射线终止点在包含块内部、边界或以外。ray() 函数可支持多个参数:angle(射线角度)、size(射线尺寸)、contain(约束在包含块内)、at(射线发起位置)。这些参数,角度必须,其余可选。本演示仅使用 ray() 函数的角度参数,辅以 offset-distance 属性帮助查看射线路径信息:

    <style>
        @import 'https://638183.freep.cn/638183/web/css/hl.css';
        .pa {
            margin: 20px auto;
            width: 200px;
        }
        .pa:nth-of-type(1) {
            height: 200px;
            border: 1px solid gray;
            margin-top: 100px;
        }
        .pa:nth-of-type(2) {
            width: 400px;
            border-width: 0;
        }
        .son {
            width: 60px;
            height: 40px;
            background: purple;
            clip-path: polygon(50% 60%,0 60%,0 40%,50% 40%,50% 0,100% 50%, 50% 100%);
            offset-path: ray(0deg);
            transition: offset-distance .7s;
        }
    </style>
    
    <div class="pa">
        <div id="son" class="son"></div>
    </div>
    <div class="pa">
        <p class="hlCode">offset-path: <output id="outputCode">ray(0deg);</output></p>
        <p>
            <label for="rangeAngle">射线角度 :</label>
            <input id="rangeAngle" type="range" max="360" min="-360" step="5" />
            <output id="outputAngle">0deg</output>
        </p>
        <p>
            <label for="rangeDistance">元素在路径上的偏移位置 :</label>
            <input id="rangeDistance" type="range" max="100" min="0" value="0" />
            <output id="outputDistance">0%</output>
        </p>
    </div>
    
    <script>
        rangeAngle.oninput = () => {
            outputAngle.value = rangeAngle.value + 'deg';
            outputCode.value = `ray(${rangeAngle.value}deg);`
            son.style.offsetPath = `ray(${rangeAngle.value}deg)`;
        }
        
        rangeDistance.oninput = () => outputDistance.value = rangeDistance.value + '%';
        
        rangeDistance.onchange = () => son.style.offsetDistance = rangeDistance.value + '%';
    </script>
        

    核心要点:CSS 函数 ray() 为 offset-path 属性创建的射线路径,最简单时只需要一个参数,角度参数,具体代码参见 21 行,在预览页面也会动态提供代码。ray() 函数仅设置角度参数时,其余参数为缺省默认,此时,正上、正右、正下和正左四个方向的射线路径的终点正好处在容器边界之上。演示中应该会看到运动元素(子元素)越界,那是因为运动元素的偏移锚点(由 offset-anchor 属性设置)默认设在元素的中心点,而偏移锚点是元素在 offset-distance(元素在路径上的偏移距离)为 100% 时的抛锚点;若不希望子元素整体突破容器边界,可设 offset-anchor: 100% 50%;offset-anchor: right center;,即将偏移锚点设在元素X轴的右侧、Y轴的中心。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-7-30 20:02 , Processed in 0.073947 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

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