..
渐变“白色-透明”遮罩边界设计
常见的边界设计
常见的边界设计有两种:
加 border,或者说分割线。简单直接,使用场景多。
加 boxShadow。一般用于悬浮元素,例如在悬浮的 header 上添加一个向下的阴影,以增加立体感。
渐变“白色-透明”边界设计
这种设计,就是在边界处,添加一个从白色向透明过渡的遮罩。同样能起到边界区分的作用,除此之外还有两个好处:
干净。特别适用于整个页面的内容简单、留白多、色系浅的场景。
能透出背后的内容。尤其是用在底部悬浮按钮元素上,自然地让用户知道,下面还有内容,引导用户向下滚动。
CSS 实现样例
这里,直接节选一个 React 的实现。注意:节选代码不能运行!
import React from 'react';
export const ExamplePage: React.FC = () => {
const lines = new Array(30).fill(null);
return (
<div className={classes.page}>
<div className={classes.content}>
{lines.map((_, idx) => <h1 key={idx.toString()}>{`Line ${idx}`}</h1>)}
</div>
<div className={classes.bottomActions}>
<div className={classes.bottomMaskWrapper}>
<OBActionButtonBlock
text={'Next'}
/>
</div>
</div>
</div>
);
};
const classes = createStyleSheet({
page: {
minHeight: '100svh',
display: 'flex',
flexDirection: 'column',
},
content: {
flex: 1,
},
bottomActions: {
position: 'sticky',
bottom: '0',
},
// 需要一个 wrapper,来提供定位支点
bottomMaskWrapper: {
position: 'relative',
paddingBottom: '20px',
background: 'white',
// 白色渐变遮罩
'&::before': {
content: '""',
position: 'absolute',
top: '-32px',
left: '0px',
right: '0px',
height: '32px',
backgroundImage: 'linear-gradient(to top, color-mix(in srgb, rgb(255, 255, 255) 95%, transparent) 0%, transparent 100%)',
display: 'block',
pointerEvents: 'none', // 防止遮罩拦截了用户的点击
},
},
});
效果如图中红框部分:
