为何text-shadow在参数全设0或仅指定颜色时仍可见?
关于text-shadow的两个常见疑问解答
嘿,这两个问题其实都和text-shadow的默认行为以及渲染逻辑有关,我来给你掰扯清楚~
问题1:为何text-shadow的所有参数都设为0时仍可见?
你可能以为偏移和模糊都是0的话,阴影就应该“消失”,但实际上,当offset-x、offset-y、blur-radius全为0时,阴影会完全覆盖在原文本的相同位置。这时候如果阴影的颜色和原文本颜色不一样,两者就会发生颜色叠加(或者说混合),视觉上就会呈现出和原文本不同的效果,自然就能看到啦。
举个实际的例子:
.text-demo { color: #000; /* 原文本是纯黑色 */ text-shadow: rgb(250, 190, 0) 0px 0px 0px; /* 阴影是亮黄色 */ }
此时黄色阴影和黑色文本完全重叠,混合后文本会变成偏黄的深色调,和原本的纯黑有明显区别,所以你能看到阴影的存在。如果阴影颜色和原文本完全一致,那确实看不到任何变化。
问题2:为何仅指定颜色、未设置其他参数时仍可见?
这其实是CSS语法规则在起作用——text-shadow的语法里,<offset-x>、<offset-y>、<blur-radius>都是可选参数,它们的默认值都是0。也就是说,当你只写text-shadow: rgb(250, 190, 0);的时候,浏览器会自动补全成text-shadow: rgb(250, 190, 0) 0px 0px 0px;,效果和第一个问题里的情况完全一样:阴影和原文本重叠、颜色叠加,所以自然能看到。
小总结
简单来说,只要阴影颜色和原文本有差异,哪怕它和原文本完全重叠,视觉上也会有变化;而省略参数时,浏览器会用默认的0值补全,本质和全设0是同一个逻辑。
内容的提问来源于stack exchange,提问作者Gardelin
相关产品推荐
相关产品推荐

