展示
- 为了防止看花眼
- 我就手动敲下面的文字
- 原本我偷懒
- 直接就是列表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();