一、抛出问题
1 | .modal-container { |
以上代码,是做一个模态框,该模态框使用 Hack 方法来垂直竖直两个方向居中,但是在实际操作中,会发现,整个模态框的边缘,会出现模糊的现象,仿佛打了马赛克一样。
马赛克版:
高清版:
可能上传的图片质量不高,但在我的电脑上差异非常明显
二、分析原因
经过查阅资料和一通分析,发现是CSS 的 transform: translate 属性在作元素位移时,极有可能发生像素点无法对其的情况,从而导致显示模糊的问题,画个灵魂示例图:
如图,正常情况下,元素的边缘应该和像素点对齐,但是经过 CSS translate 后,计算的结果并非整数的像素点,导致本来一个像素能渲染的内容,没有完全归纳在其像素点内,导致出现模糊的情况。
翻译成人话: css transform:translate(-50%,-50%) 计算后的结果很可能是 transform: translate( 100.5px, 100.5px),就因为 0.5 所以模糊
三、解决方案
方式有二
第一种: 在 transfrom 时,使用 calc 函数 加上0.5 px ,具体代码 :
1 | .modal { |
第二种,别 transform 了,直接父元素弄成 Flex 布局,两条轴都设置居中,也能达到效果。