当前位置:   article > 正文

深入理解浏览器最小渲染单位以及border设置0.5px_浏览器渲染的最小像素

浏览器渲染的最小像素

# 首先我们讨论一下关于border最小的值的问题

上边这张是在安卓手机中的效果,下边这张是在浏览器中的效果

明明相同的代码却导致不同的效果,那么老规矩上测试代码,很简单就是暴力测试,可以自己复制试一下,ios中和浏览器的效果一样就不贴图了

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>demo exame</title>
  5. <style type="text/css">
  6. .box1{
  7. position: relative;
  8. width: 100px;
  9. height: 100px;
  10. overflow: hidden;
  11. }
  12. .box2{
  13. position: relative;
  14. width: 100px;
  15. height: 100px;
  16. overflow: hidden;
  17. }
  18. .child1{
  19. position: relative;
  20. width: 1px;
  21. height: 100px;
  22. border-left-width: 0.5px;
  23. border-right-width: 0.5px;
  24. border-style: solid;
  25. border-color: green;
  26. float: left;
  27. background-color: red;
  28. }
  29. .child2{
  30. position: relative;
  31. width: 1px;
  32. height: 100px;
  33. border-left-width: 1px;
  34. border-right-width: 1px;
  35. border-style: solid;
  36. border-color: yellow;
  37. float: left;
  38. background-color: blue;
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="box1">
  44. <div class="child1"></div>
  45. <div class="child1"></div>
  46. <div class="child1"></div>
  47. <div class="child1"></div>
  48. <div class="child1"></div>
  49. <div class="child1"></div>
  50. <div class="child1"></div>
  51. <div class="child1"></div>
  52. <div class="child1"></div>
  53. <div class="child1"></div>
  54. </div>
  55. <div class="box2">
  56. <div class="child2"></div>
  57. <div class="child2"></div>
  58. <div class="child2"></div>
  59. <div class="child2"></div>
  60. <div class="child2"></div>
  61. <div class="child2"></div>
  62. <div class="child2"></div>
  63. <div class="child2"></div>
  64. <div class="child2"></div>
  65. <div class="child2"></div>
  66. </div>
  67. </body>
  68. </html>

那么由上数据得出结论当安卓设置border小于1px的时候会自动将宽度转为1px,而浏览器似乎是当小于0.3的时候直接让border的宽度消失不显示

而为什么安卓会有这个限制,首先我猜测是因为和浏览器的最小宽度有关,最初我以为浏览器的最小渲染宽度是1px但是后来实例发现不是这个样子的毕竟我们的height值是可以渲染出0.5px的宽度的,所以我去探究了浏览器的最小渲染单位是多少

总结多个博客发现1/64的可能性最大,那么我们来验证

老规矩上测试代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>demo exame</title>
  5. <style type="text/css">
  6. .box{
  7. position: relative;
  8. width: 100px;
  9. height: 0.1px;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div class="box"></div>
  15. </body>
  16. </html>

其实很简单,就是让height值为1px那么我们去看浏览器中的盒模型实际渲染出的高度

这时候我们发现它渲染出来的值是0.094而不是0.01,这时候用1/64的这个点来解释其实是可以解释的痛的,按理0.1px为6.4/64px但是浏览器渲染单位为1/64px所以就会有0.4/64的多余,而根据四舍五入的办法自然会被取掉,计算0.4/64我们发现值大约为0.0062刚好相当于失去的0.006

如果还不相信可以自己去多测试几组按理会发现确实是1/64的单位,那么这时候我觉得安卓不让boder单位小于1px的原因可能就是因为害怕出现类似的这种单位不准确的问题,至于丢失的0.006去了哪里目前还没有好的解释,又看一篇博客是他会各个之间四舍五入舍去的高度会和下个元素加起来,然后依次往下,丢失最后一个元素的1/64px大小范围内的像素

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号