我尚未找到重复的内容,但有很多博客文章建议使用box-shadow
来代替outline
作为元素焦点状态的样式,因为它在样式方面更加灵活,并且它也遵循所修饰元素的border-radius
,而不像outline
始终保持矩形。
用box-shadow
替代outline
被认为是一种良好的做法吗?这样做有什么注意事项吗?
我尚未找到重复的内容,但有很多博客文章建议使用box-shadow
来代替outline
作为元素焦点状态的样式,因为它在样式方面更加灵活,并且它也遵循所修饰元素的border-radius
,而不像outline
始终保持矩形。
用box-shadow
替代outline
被认为是一种良好的做法吗?这样做有什么注意事项吗?
在使用box-shadow
作为焦点指示器时,有一个严重的注意事项——它无法在Windows高对比度主题中工作。
当启用Windows高对比度主题时,支持此主题的Web浏览器将覆盖某些CSS属性。Firefox、IE和Edge都会这样做,但基于Chromium的浏览器不会(至少目前还没有)。
transparent
关键字是一种颜色值,在此处也被覆盖了。透明边框变得可见。box-shadow
未被应用,因此它不能作为焦点指示器使用。以下焦点样式在Windows高对比度主题生效时将不可见:
a:focus {
box-shadow: 0px 0px 5px 5px rgba(0,0,255,1);
outline: none;
}
然而有一种方法可以实现。不是完全移除轮廓,而是使其透明,同时保留轮廓的样式和宽度。当 Windows 高对比度主题生效时,盒子阴影不会出现,但轮廓会出现,因为透明颜色被覆盖。
a:focus {
/* Visible in the full-colour space */
box-shadow: 0px 0px 5px 5px rgba(0,0,255,1);
/* Visible in Windows high-contrast themes */
outline-color: transparent;
outline-width: 2px;
outline-style: dotted;
}