最近做项目做一个弹出框,然后垂直居中定位,发现很模糊,当时还可以是我屏幕问题,然后在同事上看也是一样模糊,然后发现是CSS的transform: translate(-50%,-50%)导致的,英文这种垂直居中会出现小数点像素,像素是基数的时候就会糊掉,偶数的时候不会!其实原理很简单:元素的边缘应该和像素点对齐,但是经过 CSS translate 后,计算的结果并非整数的像素点,导致本来一个像素能渲染的内容,没有完全归纳在其像素点内,导致出现模糊的情况!
方法1:
如果是固定的宽高,你可以把宽高各加0.5或者1px,让它变成偶数就不会模糊!
方法2:
在父元素上改成flex布局,让他水平垂直居中,这种方法简单粗暴(推荐!)
.ngdialog.ngdialog-theme-default {
padding-bottom: 0;
padding-top: 0;
display: flex;
justify-content: center;//水平居中
align-items: center;//垂直居中
}
方法3:
在translate XY方法各加0.5px,用calc函数去计算!
.ngdialog.ngdialog-theme-default .ngdialog-content {
position: absolute;
top: 50%;
left: 50%;
transfrom:translate(calc(-50% + 0.5px),calc(-50% + 0.5px));
}