鍍金池/ 問(wèn)答/HTML/ 使用一個(gè)height為0,同時(shí)設(shè)置了border-top和border-bott

使用一個(gè)height為0,同時(shí)設(shè)置了border-top和border-bottom的div作為邊框,解決的是一個(gè)什么樣的問(wèn)題?

如下圖所示:

圖片描述

感覺(jué)像是解決 retina 屏幕 1px 線的問(wèn)題,可以是這border都設(shè)到2px去了,求教

鏈接(在移動(dòng)端下打開(kāi))

回答
編輯回答
咕嚕嚕

我只找到了divider這個(gè),沒(méi)有找到你說(shuō)的那個(gè),這個(gè)的作用只是一個(gè)分割線。

2017年11月4日 22:34
編輯回答
毀了心

看了你給的鏈接,從其中找到了這段代碼

if(/Android (\d+\.\d+)/.test(navigator.userAgent)){
            var version = parseFloat(RegExp.$1);
            if(version>2.3){
                var phoneScale = parseInt(window.screen.width)/640;
                if(/MZ-M571C/.test(navigator.userAgent)){
                    document.write('<meta name="viewport" content="width=640, minimum-scale = 0.5, maximum-scale= 0.5">');
                }else if(/M571C/.test(navigator.userAgent)&&/LizhiFM/.test(navigator.userAgent)){
                    document.write('<meta name="viewport" content="width=640, minimum-scale = 0.5, maximum-scale= 0.5">');
                }else{
                    document.write('<meta name="viewport" content="width=640, minimum-scale = '+ phoneScale +', maximum-scale = '+ phoneScale +', target-densitydpi=device-dpi">');
                }
            }else{
                document.write('<meta name="viewport" content="width=640, target-densitydpi=device-dpi">');
            }
        }else{
            document.write('<meta name="viewport" content="width=640, user-scalable=no, target-densitydpi=device-dpi">');
        }
  1. 其中target-densitydpi 的屬性,查了一下,它的作用的是設(shè)定1px css 像素用多少真實(shí)物理像素來(lái)渲染。

target-densitydpi有啥作用
它的作用就是縮放,跟我們?cè)O(shè)置minimum-scale,maximum-scale的作用是一樣的。而且這個(gè)屬性在高版本的android中是不支持的,ntot support,所以上面的script 標(biāo)簽中的代碼寫(xiě)了,在android 2.3版本以下,用target-densitydpi來(lái)縮放,高于這個(gè)版本的用minimum-scale,maximum-scale來(lái)縮放。本質(zhì)上是用來(lái)解決1px的問(wèn)題的思路。

  1. 為什么要同時(shí)設(shè)置border-top 和border-bottom 為1px?

這個(gè)問(wèn)題我不太確定,我在這里胡說(shuō)一下我的理解和猜測(cè)。
因?yàn)檫@段代碼設(shè)置了viewport的width 為640px,通常情況下,移動(dòng)端的屏幕寬度也就是在360px --- 414px 這個(gè)范圍內(nèi),很明顯這個(gè)視口寬度會(huì)大于device-width,所以這時(shí)候?yàn)g覽器會(huì)先縮放.如果手機(jī)的dpi ratio是2,那么此時(shí)的1px 不是等于2個(gè)物理像素的,而是小于2個(gè)物理像素。
然后后面又設(shè)置了minimum-scale = '+ phoneScale +', maximum-scale = '+ phoneScale +',根據(jù)屏幕dpi 來(lái)進(jìn)一步縮放。這樣子兩次縮放以后,很有可能1px的線被縮放成了不足1個(gè)物理像素來(lái)渲染。所以需要再設(shè)置一個(gè)border-bottom:1px solid #fff來(lái)補(bǔ)償。

2017年3月13日 04:26
編輯回答
爛人

謝謝 @BBQ只有番薯 ,非常詳細(xì)。這確實(shí)是解決1px的問(wèn)題,找到了這個(gè)文章:TAT.tennylv移動(dòng)web適配利器-rem,其rem適配進(jìn)階里面有講到這種方案

2018年4月20日 08:28