1. 程式人生 > >移動1畫素的問題

移動1畫素的問題

問題:一般在移動端,由於dpr(裝置畫素比)不為1,在PC端顯示1畫素的邊框,在移動端其實顯示為2px。解決這個問題,主要思想是:使用偽元素設定1px的邊框,然後使用媒體查詢,根據dpr的大小,對邊框進行縮放(scaleY)。詳細程式碼如下所示:
App.vue:

<template>
  <div id="app">
    <div class="tab border-1px"> <!-- !!!!!!! -->
      <div class="tab-items">
        <router-link  to
="/goods">
商品</router-link> </div> <div class="tab-items"> <router-link to="/ratings">評價</router-link> </div> <div class="tab-items"> <router-link to="/seller">商店</router-link> </div> </div>
<div class="content"> <router-view></router-view> </div> </div> </template> <script></script> <style lang="stylus" rel="stylesheet/stylus"> @import "./common/stylus/mixin.styl" @import "./common/stylus/base.styl" #app .tab display: flex width: 100
% height: 40px line-height: 40px border-1px(blue) /*!!!!!!*/ .tab-items flex: 1 text-align: center font-size: 14px & > a display: block width: 100% color: rgb(77, 85, 93) &.router-link-active color: rgb(240, 20, 20) .seller border-bottom: 1px solid blue /*用於對比,在移動端實際顯示2px*/
</style>

mixin.styl:

border-1px($color)
    position: relative
    &::after
        position: absolute
        left: 0
        bottom: 0
        width: 100%
        content: ' '
        border-top: 1px solid $color

//圖片的mixin,根據圖片的不同dpr進行適配下顯示高清問題
bg-image($url) 
  background-image: url($url + "@2x.png")
  @media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3)
    background-image: url($url + "@3x.png")
  • 這裡的border-1px($color) 就是真正處理1畫素邊框問題的關鍵,通過偽元素after重做border,並且支援傳入顏色變數$color來自定義顏色。
  • 這裡的bg-image($url) 是負責處理圖片在不同dpr下顯示的問題,原來跟1畫素邊框問題差不多,不過這裡不需要重做,只是根據不同的media query來呼叫不同的圖片顯示,而這些圖片是需要放在相對應的資料夾的。

base.styl: 進行縮放

<!--這裡是對於使用reset.css之後的一些自定義的預設的css初始化-->
<!--設定一些移動端比較流行的字型-->
<!--其他都是為了方便開發,避免css的屬性繼承影響模組的程式碼-->
body, html
  line-height: 1
  font-weight: 200
  font-family: 'PingFang SC', 'STHeitiSc-Light', 'Helvetica-Light', Arial, sans-serif

<!--根據媒體查詢@media設定不同的縮放比例(transform 的 scale)來修復1畫素邊框的問題-->
@media (-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5)
    .border-1px
        &::after
            -webkit-transform: scaleY(0.7)
            transform: scaleY(0.7)

@media (-webkit-min-device-pixel-ratio: 2),(min-device-pixel-ratio: 2)
    .border-1px
        &::after
            -webkit-transform: scaleY(0.5)
            transform: scaleY(0.5)
  • 這裡的修復1畫素邊框問題會拆分為2個部分,一個部分是這裡的base.styl裡面處理縮放,另外一部分是在mixin.styl裡面處理重做border。
  • 這裡是一個base模組檔案,只保留了基本的共用的css,需要結合其他的css檔案(stylus)來合併理解
  • dpr一般是1或者2,1.5只是為了更精細的去適配1和2之間的手機型號

相關推薦

移動1的問題

問題:一般在移動端,由於dpr(裝置畫素比)不為1,在PC端顯示1畫素的邊框,在移動端其實顯示為2px。解決這個問題,主要思想是:使用偽元素設定1px的邊框,然後使用媒體查詢,根據dpr的大小,對邊框進

stylus 移動端邊框1問題解決方案

借鑑前端移動框架yo 1 border($border-width=1px, $border-color=#ccc, $border-style= solid, $radius= null) { 2 // 為邊框位置提供定位參考 3 position: relative; 4

stylus解決移動1邊框的問題

首先 我是借用了yo框架的border和他的媒體查詢組合 這兩個分別是在yo>lib>core>classes>_border.scss(用來獲取yo框架封裝的border)               &nbs

利用stylus解決移動1邊框的問題

首先 我是借用了yo框架的border和他的媒體查詢組合 這兩個分別是在yo>lib>core>classes>_border.scss(用來獲取yo框架封裝的border)               &nbs

stylus解決移動1線等問題

  引用了yo框架中的_border.scss(用來獲取yo框架封裝的border)   以及   variables.scss(用來獲取媒體查詢的規則) 1 border($border-width = 1px, $border-color =

移動端解決邊框1問題

這是border.css的一段原始碼       先說明為啥會有1畫素這種問題吧 :因為當我們在做移動端 時當適配不同的手機時 每個手機的dpr是不同的 (dpr=物理畫素/邏輯畫素  物理畫素也就是真實呈現在手機螢幕上的大小 邏輯畫素則是開發

餓了麼專案---4、移動端檢視專案及border 1問題

一、如何在手機等移動端檢視頁面 1.1檢視電腦IP地址 $ ipconfig---------->10.2.65.112 1.2 、獲取當前網頁的完整url地址,到草料二維碼網站(http://cli.im/)中講該ip地址轉變成一個二維

移動1邊框問題處理程式碼學習

慕課網餓了麼專案骨架搭建時,關於1畫素邊框處理程式碼如下: App.vue裡面: <style lang='stylus' rel='stylesheet/stylus'> @import './common/stylus/mixin.st

解決移動端border 1變2問題

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <sc

移動1邊框問題的解決方案

自從喬幫主提出retina屏以來。可練就了不少前端兄弟的畫素眼,有強迫症的夥伴們日子可就煎熬了。為了畫出真正的1畫素邊框,前端猿們也是受盡各瀏覽器的虐待了。 關於什麼是移動端1畫素邊框問題,先上兩張圖

移動端(手機)1邊框真正實現

在實際開發中,不知您遇到過這樣的問題嗎?明明寫的是1px,但是在手機上看起來卻是2px,為此深受困擾吧。下面就是我在工作中使用的解決方法哦,希望對大家有所幫助。 移動端上邊框和下邊框的實現: bo

解決手機1問題

<div class="tab"> <div class="tab-item"> <router-link to="/">商品</router-link> </div> <d

解決1線問題

咱們話不多說,直接上程式碼 這是封裝了一個函式 在外面直接 border: 1px 0 0 0 #ccc使用即可   border($border-width = 1px, $border-color = #ccc, $border-style = solid, $radius

如何做1細邊框的table?

#test{border-collapse:collapse;border:1px solid #ddd;} #test th,#test td{border:1px solid #ddd;} <table id="test"> <tr><th>姓名&

1px的border 1邊框

1.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="te

sass 上下邊框1實現

@media(-webkit-min-device-pixel-ratio:1.5), (min-device-pixel-ratio:1.5) { .border-t-1px {&::before {-webkit-transform: scaleY(0.7);transform: scal

深入理解移動知識與Viewport知識

在做移動端網頁開發時,首先要搞清楚三種viewport和三種畫素,只有明白了這些概念,才能更好地開發出適配不同解析度裝置的網頁。 但參閱的部落格越多,對這些概念越是混亂,同樣的一個概念,在一篇部落格中是這種說法,在另一篇部落格中又變成了另外一種說法,

1問題

經常會遇到在iOS手機上寫 border-bottom: 1px solid #eaeaea; 會顯得這一畫素特別的粗。 所以後來採用這麼一個方式來代替: .underline {   width: 100%;   height: 1px;   back

Android之D面試題②程序保活的一般套路(1Activity/賬號同步/Jobscheduler/系統服務捆綁)

       讀到這裡,你或許有一個疑問,假設現在記憶體不足,空程序都被殺光了,現在要殺後臺程序,但是手機中後臺程序很多,難道要一次性全部都清理掉?當然不是的,程序是有它的優先順序的,這個優先順序通過程序的adj值來反映,它是linux核心分配給每個系統程序的一個值,代表程序的優先順序,程序回收機制就是根據這

使用min-device-pixel-ratio媒體功能實現真正的1border

由於裝置畫素比存在的原因,我們在處理設計圖的一些邊框時,對於1px的border,如果在程式碼裡將其寫死,可能在不同裝置畫素比的裝置中,粗細不一樣,尤其是在目前大多數裝置畫素比為2的裝置中,過粗。 那麼利用媒體查詢和”min-device-pixel-ratio