移動端1px邊框問題

解決方案一

  • 使用rem為單位斩祭。
  • 使用js獲取dpr值動態(tài)計算視口縮放,設(shè)置viewport content屬性身笤。
  • 計算得到縮放比后,應(yīng)該對應(yīng)給html的font-size 乘 回縮放比抽莱。
  • 邊框使用px為單位,其余元素均使用rem單位骄恶,這樣視口的縮放就只會影響到px單位食铐。
  • 一勞永逸的解決方案
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>邊框1px</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,user-scalable=no">
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
    </style>
</head>
<body>
<div style="margin-top:1rem;height:5rem;width: 5rem;border: 1rem #f00 solid;">div</div>
<script>
    var dpr = window.devicePixelRatio || 1;
    var viep = document.querySelector('meta[name=viewport]');
    var scal = 1 / dpr;
    document.documentElement.style.fontSize = (document.documentElement.offsetWidth/10)*dpr+'px';
    viep.setAttribute('content','width=device-width,initial-scale='+scal+',maximum-scale='+scal+',user-scalable=no');
</script>
</body>
</html>

解決方案二

  • 使用css3的媒體查詢+transform的scale
  • 單線解決方案
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>邊框1px</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,user-scalable=no">
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
        #level{
            height: 1px;
            background: #f00;
        }
        @media only screen and (-webkit-device-pixel-ratio:2){
            #level{transform: scaleY(0.5);}
        }
        @media only screen and (-webkit-device-pixel-ratio:3){
            #level{transform: scaleY(0.333);}
        }
    </style>
</head>
<body>
    <div id="level"></div>
    <div style="height:100px;width: 100px;background: #ccc">div</div>
</body>
</html>

解決方案三(推薦方案非常靈活)

  • 使用css3的媒體查詢+transform的scale
  • 多邊框?qū)崿F(xiàn),目前較為常見的解決方案
  • 把需要使用到的邊框全部提前定義好僧鲁,使用時只需要寫對應(yīng)的class
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>邊框1px</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,user-scalable=no">
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
        .box{
            width: 200px;
            height: 200px;
            background: #ccc;
            margin-left: 10px;
            margin-top: 10px;
            margin-bottom: 20px;
        }
        .border,.border-left,.border-right,.border-top,.border-bottom{
            position: relative;
            border:none;
        }
        .border:after{
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            border: 1px solid #f00;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
        }
        .border-left:after{
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            border-left: 1px solid #f00;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
        }
        .border-right:after{
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            border-right: 1px solid #f00;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
        }
        .border-top:after{
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            border-top: 1px solid #f00;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
        }
        .border-bottom:after{
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            border-bottom: 1px solid #f00;
            -webkit-box-sizing: border-box;
            box-sizing: border-box;
            width: 100%;
            height: 100%;
        }
        @media only screen and (-webkit-device-pixel-ratio:2){
            .border:after{
                width: 200%;
                height: 200%;
                -webkit-transform: scale(0.5);
                transform: scale(0.5);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-left:after{
                width: 200%;
                height: 200%;
                -webkit-transform: scale(0.5);
                transform: scale(0.5);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-right:after{
                width: 200%;
                height: 200%;
                -webkit-transform: scale(0.5);
                transform: scale(0.5);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-top:after{
                width: 200%;
                height: 200%;
                -webkit-transform: scale(0.5);
                transform: scale(0.5);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-bottom:after{
                width: 200%;
                height: 200%;
                -webkit-transform: scale(0.5);
                transform: scale(0.5);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
        }
        @media only screen and (-webkit-device-pixel-ratio:3){
            .border:after{
                width: 300%;
                height: 300%;
                -webkit-transform: scale(0.33333);
                transform: scale(0.33333);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-left:after{
                width: 300%;
                height: 300%;
                -webkit-transform: scale(0.33333);
                transform: scale(0.33333);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-right:after{
                width: 300%;
                height: 300%;
                -webkit-transform: scale(0.33333);
                transform: scale(0.33333);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-top:after{
                width: 300%;
                height: 300%;
                -webkit-transform: scale(0.33333);
                transform: scale(0.33333);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
            .border-bottom:after{
                width: 300%;
                height: 300%;
                -webkit-transform: scale(0.33333);
                transform: scale(0.33333);
                -webkit-transform-origin: left top;
                transform-origin: left top;
            }
        }
    </style>
</head>
<body>
    <div class="box border">div</div>
    <div class="box border-left">div</div>
    <div class="box border-right">div</div>
    <div class="box border-bottom">div</div>
    <!-- 單線 -->
    <div class="border-bottom" style="width:100%;height: 1px;"></div>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虐呻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寞秃,更是在濱河造成了極大的恐慌斟叼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春寿,死亡現(xiàn)場離奇詭異朗涩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绑改,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門谢床,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厘线,你說我怎么就攤上這事识腿。” “怎么了皆的?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵覆履,是天一觀的道長。 經(jīng)常有香客問我费薄,道長硝全,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任楞抡,我火速辦了婚禮伟众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘召廷。我一直安慰自己凳厢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布竞慢。 她就那樣靜靜地躺著先紫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筹煮。 梳的紋絲不亂的頭發(fā)上遮精,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼本冲。 笑死准脂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的檬洞。 我是一名探鬼主播狸膏,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼添怔!你這毒婦竟也來了湾戳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤澎灸,失蹤者是張志新(化名)和其女友劉穎院塞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體性昭,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拦止,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糜颠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汹族。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖其兴,靈堂內(nèi)的尸體忽然破棺而出顶瞒,到底是詐尸還是另有隱情,我是刑警寧澤元旬,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布榴徐,位于F島的核電站,受9級特大地震影響匀归,放射性物質(zhì)發(fā)生泄漏坑资。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一穆端、第九天 我趴在偏房一處隱蔽的房頂上張望袱贮。 院中可真熱鬧,春花似錦体啰、人聲如沸攒巍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柒莉。三九已至,卻和暖如春沽翔,著一層夾襖步出監(jiān)牢的瞬間常柄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工搀擂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留西潘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓哨颂,卻偏偏與公主長得像喷市,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子威恼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359