css在节点与伪类同时使用background-color/image多一毫米背景解决(解决多的一丝边框)

问题

由于 css2 和 css3 对 background-color 及 background-image 的范围定义不同,当同时使用在伪类上时,会造成视觉上多一毫米(一丝)边框。

↑ 可以看到当在节点本身和伪类上同时使用了 background-colorbackground-image 后,会造成如上结果。

经测试,在 Safari 上没有此问题,在 2K 显示屏上并不明显,需要放大很多倍才能注意到。但在 1300 分辨率的中屏上多出来的一丝边框十分显眼。

解决

改用 animation 解决。

在我的场景下,设定节点与伪类同时有 background-color/image 是为了满足其中一个背景的放大与缩小时展示另外一个背景,在 去程 和 回程 做两个动画即可:

/* 去程 */
/* 默认不附加动画,当激活时,附加一致颜色的动画 */
@keyframes go {
    from {
        background-color: var(--color-green);
    }
    to {
        background-color: var(--color-green);
    }
}

&:checked {
    & + span {
        /* 保持最后一帧展示 */
        animation: go 0s forwards;
    }
}

/* 回程 */
/* 当激活回程时,颜色切换回和另一个背景颜色一致,避免“多一丝” */
@keyframes back {
    from {
        background-color: var(--color-green);
    }
    to {
        /* 切换回两者一致的颜色 */
        background-color: var(--color-grey);
    }
}

& + span {
	/* 秒数和动画 function 需要和其他动画一致  */
	/* 使用 step-end 进行尾部跳帧 */
    animation: back .3s step-end forwards;
}

这里在回程使用了跳帧,有关 step-end/step-start 的说明可见:

《 css 中 animation 动画的 step-end/step-start 参数作用 》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值