1.场景
下面有两张卡片,每张卡片上有文字描述以及背景图,从背景可以看出是渐变色
和 logo 图片的结合。实现下面这两张卡片样式,一般都会想到让 UI 直接给出去掉文字背景的切图,这样也没毛病,那还有没有其它方法呢?
2.实现方案
上面卡片中除了图片我们很难实现出来,只能通过切图实现外,其它的都可以通过代码实现。我们可以将背景拆分出颜色和图片两部分,然后分别实现,而不是整体的切图,只需要让 UI 给出上述卡片中的对勾和感叹号切图,这样也能缩减切图的大小,再用渐变背景色和背景图片叠加起来显示即可。
注:因为使用到渐变色,所以要结合 background-blend-mode 属性来实现与背景图片叠加显示,否则只通过 background: linear-gradient(); background-image: url(); 设置不会生效,这样只能显示图片。
图标切图1:
图标切图2:
注:这里是 React 项目中的代码实现,有用到 CSS Modules 技术。
HTML代码如下:
<ul> <li className={styles.card1}> <h3>能力说明</h3> <p> <span className={styles.circle}></span>由 WPS AI 提供的模型能力,包括知识搜索、内容创作、智能对话等功能 </p> <p> <span className={styles.circle}></span> 能记住用户近段时间的提问内容,支持用户进行追踪提问 </p> <p> <span className={styles.circle}></span> 对于一些恶意的、敏感性的问题,能自动识别,并拒绝回复 </p> </li> <li className={styles.card2}> <h3>对话局限</h3> <p> <span className={styles.circle}></span> 在一些特定场景下,可能会产生错误的回答,回答正确度需用户自行判断 </p> <p> <span className={styles.circle}></span> 偶尔会出现模型性能问题,可能会出现加载超时、回复加班等问题 </p> <p> <span className={styles.circle}></span> 模型的训练集是有限的且是逐步补充的,对最新出现的事件可能认知有限 </p> </li> </ul>
复制
CSS代码如下:
.card1, .card2 { display: inline-block; max-width: 612px; padding: 24px 36px 32px; // ---------渐变背景色和背景图片叠加显示处理(start)--------- background-position: right bottom; background-repeat: no-repeat; background-image: linear-gradient(101.59deg, #F0FBFF 0%, #E1F7FF 58.51%), url('./images/tick.svg'); background-blend-mode: color-burn; // ---------渐变背景色和背景图片叠加显示处理(end)--------- border-radius: 12px; text-align: left; font-size: 16px; line-height: 24px; color: rgba(13, 13, 13, 0.66); .circle { display: inline-block; width: 8px; height: 8px; margin-right: 10px; background: #00BEFF; border-radius: 50%; } p { display: flex; align-items: center; font-weight: 400; font-size: 16px; line-height: 24px; color: rgba(13, 13, 13, 0.66); } >p:not(:last-child) { margin-bottom: 10px; } } .card2 { // ---------渐变背景色和背景图片叠加显示处理(start)--------- background: linear-gradient(101.59deg, #FDF9F0 0%, #FDF3E1 58.51%) /*渐变背景色*/ , url("./images/sigh.svg") /*图片背景*/ no-repeat; background-position: right bottom; background-blend-mode: color-burn; // ---------渐变背景色和背景图片叠加显示处理(end)--------- }
复制
上面设置渐变色背景和背景图片核心代码只有这几行:
background: linear-gradient(101.59deg, #FDF9F0 0%, #FDF3E1 58.51%) /*渐变背景色*/ , url("./images/sigh.svg") /*图片背景*/ no-repeat; background-position: right bottom; // 背景图片位置 background-blend-mode: color-burn; // 背景层的混合模式
复制
也可以用这种写法:
background-image: linear-gradient(101.59deg, #F0FBFF 0%, #E1F7FF 58.51%), url('./images/tick.svg'); background-repeat: no-repeat; background-position: right bottom; background-blend-mode: color-burn;
复制
需要注意的几点:
-
如果背景色不是渐变色,可以直接使用
background-color: ; background-image: url();
-
background-blend-mode 具体取什么值,可以再浏览器控制台调试该属性,找到符合 UI 设计稿的样式值即可。
-
background-blend-mode 属性定义了元素背景层的混合模式(background-image图片与background-color颜色)。
background-blend-mode 常见属性值如下所示:
值 | 描述 |
---|---|
normal | 默认值。设置正常的混合模式。 |
multiply | 正片叠底模式。 |
screen | 滤色模式。 |
overlay | 叠加模式。 |
darken | 变暗模式。 |
lighten | 变亮模式。 |
color-dodge | 颜色减淡模式。 |
saturation | 饱和度模式。 |
color | 颜色模式。 |
luminosity | 亮度模式。 |