美文网首页让前端飞饥人谷技术博客
CSS像素级还原设计中的33.3%

CSS像素级还原设计中的33.3%

作者: 華方 | 来源:发表于2019-01-15 15:36 被阅读2次

原文发表在我的博客: CSS像素级还原设计中的33.3%

最近我也做了个网易云移动端,我打算用像素级还原的方式练练手,前面的布局一路顺风顺水,但是当到了footer就是和原网页差了一像素,我在footer中怎么找也找不出任何问题,最终发现是上面图片的锅,这篇博客就来记录一下遇到这个问题。

等宽布局

CSS中没有分数的设定,导致我们在需要1/3的时候只能使用33.3%来表示,这在等宽布局的时候就会出现问题,由于剩余了0.1%的宽度,这在1000px宽度以内的网页没有任何影响,因为不足1px显示器会忽略掉这多余的0.1%,当高于1000px就会出现缝隙,当然我们可以33.33%毕竟8K屏的宽度也只有7680px宽,因为移动端的宽度低,通常33.3%就基本观察不到了区别了

等比例块

CSS中最常用且兼容性最好的等比例方式是使用百分比padding,因为padding的百分比是根据宽度来计算的,这样当宽度改变时,高度就会等比例的改变,这中方式在移动端非常常见。

/* 自适应方块 */
div{
    width: 100%;
    padding-bottom: 100%;
}

等宽布局遇上等比例块

等宽布局与等比例块在单独使用的时候都没有什么问题,也可以做到设计稿的像素级还原,但两者相遇就会出现莫名其妙的偏移,如果只是靠像素级的调整来解决偏移问题,那么在不同分辨率下的显示就会出现像素级的偏差。

.parent{
    width: 33.3%;
}
.child{
    width: 100%;
    padding-bottom: 100%;
}

上面的代码的父元素,占屏宽的33.3%他在我的手机上就是占1/3一点缝隙都没有,子元素也是一个方方正正的方形,网易云音乐移动页面的推荐歌单模块也是如此实现的

image

一切都看起来如此的美好,但当真是如此吗?

网易的网页
我的网页

我使用的grid-template-columns: 1fr 1fr 1fr;进行的均分,而原网页使用的width: 33.3%,这导致了我两者图片的细微的高度差异,而且当前模块还肉眼不可见。回到最开始我提到还原稿差得那一像素,当等宽布局时屏幕宽度就那么宽,但是当等宽遇到了等高,高度的积累就不止一个屏幕的宽度了,就是积累的多个0.11px像素爆发了小宇宙变成了1px让眼睛可以观察到,导致了我footer中的内容被挤压而在footer中找不到任何原因

总结

尽量不要使用width: 33.3%width:33.3vw这种写法,使用的时候最好多加几个3,误差会小一点,如果是现代浏览器,能用flexgrid就尽量不要用百分比width

相关文章

  • CSS像素级还原设计中的33.3%

    原文发表在我的博客: CSS像素级还原设计中的33.3% 最近我也做了个网易云移动端,我打算用像素级还原的方式练练...

  • UILabel属性详解

    原文链接文本对齐,如何像素般精确还原设计稿

  • 像素和布局

    像素和布局 像素 设备像素:设备屏幕的物理像素。固定 css像素:web开发时书写在css中的像素。随缩放可变 视...

  • 素描

    某人说自己不会画画,可这素描,惊艳到了,像素级还原

  • dpr

    dpr = 物理像素 / css像素在dpr = 2; 1px的css像素在设备中是2px的物理像素,这会导致在设...

  • 1px边框问题

    设备像素比(dpr):设备物理像素与设备独立像素(CSS像素)的比值。1.如果页面中的DOM元素的CSS样式设置边...

  • 移动端页面的像素计算

    移动端页面的像素计算:设计图的像素 / 2 = 前端css要写的像素 如果使用rem的话:1rem = html设...

  • viewport

    像素 物理像素 (pt) 设备独立像素 (px) dpr = 物理像素/设备独立像素 css中的1px并...

  • 适配

    设备像素和css像素 web前端领域,像素分为设备像素和CSS像素 在缩放比例为1:1的时候一个CSS像素的大小等...

  • 有关viewport的一二三

    一、背景 通俗来讲,css中的1px对应电脑屏幕的1个物理像素,那么css中的像素就是屏幕的物理像素吗?这只是一个...

网友评论

    本文标题:CSS像素级还原设计中的33.3%

    本文链接:https://www.haomeiwen.com/subject/wesydqtx.html