shape-outside url图片列表环绕iPhone X

展示

回到相关文章 »
  • 为了防止看花眼
  • 我就手动敲下面的文字
  • 原本我偷懒
  • 直接就是列表1,列表2
  • 后来测试发现不行
  • 内容太接近
  • 滚动时候
  • 无法准确感受到靠近效果
  • 这样是不行的
  • 做东西就要精益求精
  • demo页面也应如此
  • 然后这里的刘海形状只是近似
  • 两个圆角要模拟
  • 需要更细致的shape-outside设置
  • 这里直接使用了PNG图片
  • 会自动沿着非alpha透明区域排列
  • 为了不至于列表靠得太近
  • shape的url图右侧
  • 刻意填充了6像素实色
  • 现在看到的刘海
  • 是覆盖上面的一个图
  • 实际生效的是后面浮动的shape
  • 然后此功能需要JS配合
  • 主要控制margin-top值
  • 只能对内联信息进行跟随控制
  • 理论上还可以使用CSS region实现
  • 但没有这个方法容易理解

代码

CSS代码:
.box {
    max-width: 414px;
    height: 480px;
    border: solid #000;
    margin: auto;
    overflow: auto;
}
.shape {
    float: left;
    width: 30px; height: 180px;
    margin-top: 150px;
    -webkit-shape-outside: url(liu-outside.png);
    shape-outside: url(liu-outside.png);
    transition: margin-top .15s;
}
.liuhai {
    width: 24px; height: 180px;
    background: url(liu.png) no-repeat left center;
    position: absolute;
    margin-top: 150px;
}
.content ul {
    list-style: none;
    padding: 0;
    margin: 0;
}
.content li {
    border-bottom: 1px solid #eee;
    padding: .5em;
}
            
HTML代码:
<div id="box" class="box">
    <i id="shape" class="shape"></i>
    <i class="liuhai"></i>
    <div class="content">
        <ul>
            <li>为了防止看花眼</li>
            <li>我就手动敲下面的文字</li>
            <li>原本我偷懒</li>
            ...
            <li>理论上还可以使用CSS region实现</li>
            <li>但没有这个方法容易理解</li>
        </ul>
    </div>
</div>  
            
JS代码:
var eleShape = document.getElementById('shape');
var eleBox = document.getElementById('box');

var funShape = function () {
    var scrollTop = eleBox.scrollTop;
    // 滚动偏移应用在margin-top上
    eleShape.style.marginTop = (150 + scrollTop) + 'px';
};
// 滚动时候实时改变shape形状
eleBox.addEventListener('scroll', funShape);
funShape();