成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 吃透移動(dòng)端 1px的具體用法

吃透移動(dòng)端 1px的具體用法

熱門標(biāo)簽:惡搞電話機(jī)器人 ok電銷機(jī)器人 地圖標(biāo)注軟件打印出來 欣鼎電銷機(jī)器人 效果 如何查看地圖標(biāo)注 電話機(jī)器人技術(shù) 高德地圖標(biāo)注商戶怎么標(biāo) 智能電銷機(jī)器人被禁用了么 黃石ai電銷機(jī)器人呼叫中心

最近在寫移動(dòng)端 H5 應(yīng)用,遇到一個(gè)值得記錄下來的點(diǎn)?,F(xiàn)在從它的由來到實(shí)現(xiàn),我們來聊一下移動(dòng)端 1px,說 1px 不夠準(zhǔn)確,應(yīng)該說成 1 物理像素 。

通過閱讀下面文章,你將會(huì)理解以下問題:

問題

  • 為什么有 1px 這個(gè)問題?
  • 實(shí)現(xiàn) 1px 有哪些方法?這些方法分別有哪些優(yōu)缺點(diǎn)?
  • 開源項(xiàng)目中使用的哪些解決方案?
  • 如何在項(xiàng)目中處理 1px 的相關(guān)問題?

由來

 基本概念

首先,我們要了解兩個(gè)概念,一個(gè)是 像素(pixel) 可以簡(jiǎn)寫為 px ,另外一個(gè)是 設(shè)備像素比(DPR)

像素 :指在由一個(gè)數(shù)字序列表示的圖像中的一個(gè)最小單元,單位是 px,不可再次分割了。

設(shè)備像素比(DPR): 設(shè)備像素比 = 設(shè)備像素 / 設(shè)備獨(dú)立像素。復(fù)制代碼

下面我來簡(jiǎn)單解釋下幾個(gè)概念

  • CSS 像素 (虛擬像素):指的是 CSS 樣式代碼中使用的邏輯像素,在 CSS 規(guī)范中,長(zhǎng)度單位可以分為兩類,絕對(duì)單位以及相對(duì)單位。px 是一個(gè)相對(duì)單位,相對(duì)的是設(shè)備像素。
  • 設(shè)備像素 (物理像素):指設(shè)備能控制顯示的最小物理單位,意指顯示器上一個(gè)個(gè)的點(diǎn)。從屏幕在工廠生產(chǎn)出的那天起,它上面設(shè)備像素點(diǎn)就固定不變了,和屏幕尺寸大小有關(guān)。
  • 設(shè)備獨(dú)立像素 (邏輯像素):可以認(rèn)為是計(jì)算機(jī)坐標(biāo)系統(tǒng)中得一個(gè)點(diǎn),這個(gè)點(diǎn)代表一個(gè)可以由程序使用的虛擬像素(比如: CSS 像素),這個(gè)點(diǎn)是沒有固定大小的,越小越清晰,然后由相關(guān)系統(tǒng)轉(zhuǎn)換為物理像素。 也就是說,當(dāng)邏輯像素是 1pt 時(shí),在 DPR 為 2 的 設(shè)備上顯示為 2px 的物理像素

 參考數(shù)據(jù)

各種類型的 iphone 手機(jī)屏幕設(shè)備的參數(shù)

注:這里的縮放因子呢,就是 DRP 的值

設(shè)計(jì)稿對(duì)比數(shù)據(jù)

會(huì)有人好奇,為什么設(shè)計(jì)稿上顯示是 750x1334 呢,這是因?yàn)樵O(shè)計(jì)稿是顯示的 物理像素

而我們 css 中的像素是 邏輯像素 應(yīng)該為 375x 667,在編寫代碼時(shí)要將自定義寬度設(shè)置成 375px

那么此時(shí)設(shè)計(jì)稿上的 1px 寬度實(shí)際代表的 css 參數(shù)應(yīng)該是 0.5px 對(duì)應(yīng)物理像素 1px,那么怎么實(shí)現(xiàn)這個(gè)物理像素為 1px 呢

實(shí)踐

歸根結(jié)底有兩種方案,一種是利用 css 中的 transfrom:scaleY(0.5) ,另一種是設(shè)置 媒體查詢根據(jù)不同 DPR 縮放

解決方案一

原理

利用 css 的 偽元素 ::after + transfrom 進(jìn)行縮放

為什么用偽元素?因?yàn)閭卧?::after::before 是獨(dú)立于當(dāng)前元素,可以單獨(dú)對(duì)其縮放而不影響元素本身的縮放

偽元素大多數(shù)瀏覽器默認(rèn)單引號(hào)也可以使用,和偽類一樣形式,而且單引號(hào)兼容性(ie)更好些

實(shí)現(xiàn)

<div class="cell border-1px"> cell <div>

<style>
.cell {
    width: 100px;
    height: 100px;
}
<!--全部邊框-->
.border-1px:after {
    content: '';
    position: absolute;
    box-sizing: border-box;
    top: 0;
    left: 0;
    width: 200%;
    height: 200%;
    border: 1px solid #000;
    border-radius: 4px;
    -webkit-transform: scale(0.5);
    transform: scale(0.5);
    -webkit-transform-origin: top left;
}

<!--單邊框,以上邊框?yàn)槔?->
.border-1px-top:before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    border-top: 1px solid red;
    transform: scaleY(.5);
    transform-origin: left top;
}
</style>

解決方案二(升級(jí)方案一)

原理

使用 less 對(duì)公共代碼(方案一)封裝,同時(shí)增加媒體查詢分別對(duì)不同 DPR 的設(shè)備,進(jìn)行不同的縮放

.border(
    @borderWidth: 1px; 
    @borderStyle: solid; 
    @borderColor: @lignt-gray-color; 
    @borderRadius: 0) {
    position: relative;
    &:before {
        content: '';
        position: absolute;
        width: 98%;
        height: 98%;
        top: 0;
        left: 0;
        transform-origin: left top;
        -webkit-transform-origin: left top;
        box-sizing: border-box;
        pointer-events: none;
    }
    @media (-webkit-min-device-pixel-ratio: 2) {
        &:before {
            width: 200%;
            height: 200%;
            -webkit-transform: scale(.5);
        }
    }
    @media (-webkit-min-device-pixel-ratio: 2.5) {
        &:before {
            width: 250%;
            height: 250%;
            -webkit-transform: scale(.4);
        }
    }
    @media (-webkit-min-device-pixel-ratio: 2.75) {
        &:before {
            width: 275%;
            height: 275%;
            -webkit-transform: scale(1 / 2.75);
        }
    }
    @media (-webkit-min-device-pixel-ratio: 3) {
        &:before {
            width: 300%;
            height: 300%;
            transform: scale(1 / 3);
            -webkit-transform: scale(1 / 3);
        }
    }
    .border-radius(@borderRadius);
    &:before {
        border-width: @borderWidth;
        border-style: @borderStyle;
        border-color: @borderColor;
    }
}

.border-all(
	@borderWidth: 1px; 
	@borderStyle: solid; 
	@borderColor: @lignt-gray-color; 
	@borderRadius: 0) {
    .border(@borderWidth; @borderStyle; @borderColor; @borderRadius);
}

其他方案:

使用圖片:兼容性最好,靈活行最差,不能改變顏色、長(zhǎng)度

使用 viewportrem , js 動(dòng)態(tài)改變 viewportscale 縮放,缺點(diǎn)在于不適用于已有的項(xiàng)目,例如:使用 vhvw 布局的

  <meta name="viewport" id="WebViewport" content="initial-scale=1,    maximum-scale=1, minimum-scale=1, user-scalable=no">

使用 css 漸變 linear-gradient 或者 box-shadow

上述 3 種方案均有致命缺陷暫不推薦使用

兼容性

最后看一下兼容性如何,主要是偽元素、 transform:scalemin-device-pixel-ratio 這幾個(gè)關(guān)鍵詞的兼容性

 

 

 

開源庫的解決方案

vant 組件庫

跳去 github 查看相關(guān)代碼

使用 less 寫的

.hairline-common() {
  position: absolute;
  box-sizing: border-box;
  content: ' ';
  pointer-events: none;
}

.hairline(@color: @border-color) {
  .hairline-common();

  top: -50%;
  right: -50%;
  bottom: -50%;
  left: -50%;
  border: 0 solid @color;
  transform: scale(0.5);
}

也是采用第一種解決方案

ant-design-mobile 組件庫

跳去 github 查看相關(guān)代碼

.scale-hairline-common(@color, @top, @right, @bottom, @left) {
  content: '';
  position: absolute;
  background-color: @color;
  display: block;
  z-index: 1;
  top: @top;
  right: @right;
  bottom: @bottom;
  left: @left;
}

.hairline(@direction, @color: @border-color-base) when (@direction = 'top') {
  border-top: 1PX solid @color;

  html:not([data-scale]) & {
    @media (min-resolution: 2dppx) {
      border-top: none;

      &::before {
        .scale-hairline-common(@color, 0, auto, auto, 0);
        width: 100%;
        height: 1PX;
        transform-origin: 50% 50%;
        transform: scaleY(0.5);

        @media (min-resolution: 3dppx) {
          transform: scaleY(0.33);
        }
      }
    }
  }
}

.hairline(@direction, @color: @border-color-base) when (@direction = 'right') {
  border-right: 1PX solid @color;

  html:not([data-scale]) & {
    @media (min-resolution: 2dppx) {
      border-right: none;

      &::after {
        .scale-hairline-common(@color, 0, 0, auto, auto);
        width: 1PX;
        height: 100%;
        background: @color;
        transform-origin: 100% 50%;
        transform: scaleX(0.5);

        @media (min-resolution: 3dppx) {
          transform: scaleX(0.33);
        }
      }
    }
  }
}
.hairline(@direction, @color: @border-color-base) when (@direction = 'bottom') {
  border-bottom: 1PX solid @color;
  html:not([data-scale]) & {
    @media (min-resolution: 2dppx) {
      border-bottom: none;
      &::after {
        .scale-hairline-common(@color, auto, auto, 0, 0);
        width: 100%;
        height: 1PX;
        transform-origin: 50% 100%;
        transform: scaleY(0.5);
        @media (min-resolution: 3dppx) {
          transform: scaleY(0.33);
        }
      }
    }
  }
}

.hairline(@direction, @color: @border-color-base) when (@direction = 'left') {
  border-left: 1PX solid @color;

  html:not([data-scale]) & {
    @media (min-resolution: 2dppx) {
      border-left: none;

      &::before {
        .scale-hairline-common(@color, 0, auto, auto, 0);
        width: 1PX;
        height: 100%;
        transform-origin: 100% 50%;
        transform: scaleX(0.5);

        @media (min-resolution: 3dppx) {
          transform: scaleX(0.33);
        }
      }
    }
  }
}

.hairline(@direction, @color: @border-color-base, @radius: 0) when (@direction = 'all') {
  border: 1PX solid @color;
  border-radius: @radius;

  html:not([data-scale]) & {
    @media (min-resolution: 2dppx) {
      position: relative;
      border: none;

      &::before {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        width: 200%;
        height: 200%;
        border: 1PX solid @color;
        border-radius: @radius * 2;
        transform-origin: 0 0;
        transform: scale(0.5);
        box-sizing: border-box;
        pointer-events: none;

        // @media (min-resolution: 3dppx) {
        //   width: 300%;
        //   height: 300%;
        //   border-radius: @radius * 3;
        //   transform: scale(0.33);
        // }
      }
    }
  }
}

這個(gè)值得研究下,比 vant 和 第一種解決方案有點(diǎn)不同,主要在于處理了 DPR 為 2 和為 3 的兩種情況,相比來說更加完善。

這里 PX 大寫,為了防止插件將 px 轉(zhuǎn)成 rem 等單位

總結(jié)

通過該文,你大概了解 1px 問題的來龍去脈了吧,也明白了如何解決相關(guān)問題,如果這票文章能解決你的疑問或者工作中問題,不妨點(diǎn)個(gè)贊收藏下。

由于技術(shù)水平有限,文章中如有錯(cuò)誤地方,請(qǐng)?jiān)谠u(píng)論區(qū)指出,感謝!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:綏化 聊城 赤峰 中山 盤錦 阿壩 萍鄉(xiāng) 金昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《吃透移動(dòng)端 1px的具體用法》,本文關(guān)鍵詞  吃透,移動(dòng),端,1px,的,具體,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《吃透移動(dòng)端 1px的具體用法》相關(guān)的同類信息!
  • 本頁收集關(guān)于吃透移動(dòng)端 1px的具體用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成人久久久久爱| 亚洲国产成人91精品| 亚洲开心激情| 亚洲无线视频| 亚洲天堂成人av| 国产在线一区二区综合免费视频| 97se综合| 国产一二三在线视频| 9.1成人看片免费版| 亚洲人性生活视频| 日韩精品一区二区三区中文在线| 欧美色欧美亚洲另类| 男女性高潮免费网站| 久久久www成人免费毛片麻豆| 日韩综合在线观看| 精品少妇人妻av一区二区三区| 成a人片亚洲日本久久| 欧美精品色一区二区三区| 91热精品视频| 91成人短视频在线观看| 日韩欧美国产高清| 天天av天天爽| 欧美一级视频| 麻豆一区产品精品蜜桃的特点| 国产在线日韩欧美| 你微笑时很美电视剧整集高清不卡| 国产xxxxx| 国产在线播放一区二区三区| 日韩一级免费观看| 中文天堂av| 国产一区二区三区在线观看免费视频| 神马午夜精品91| 亚洲欧美在线观看| 久久久国产精品x99av| 88xx成人永久免费观看| 国产成人av电影免费在线观看| 精品视频在线观看日韩| 美女又爽又黄免费动漫| 日本aa大片在线播放免费看| 日韩片之四级片| 国产a视频精品免费观看| 久久久久久久久亚洲精品| 91啦中文成人| 日韩精品成人一区| 亚洲精品成人久久久998| 日本精品裸体写真集在线观看| 黄色成人在线网址| 蜜桃国内精品久久久久软件9| 亚洲综合激情在线| 丰满少妇一区二区三区专区| 狠狠爱在线视频一区| 3d动漫一区二区三区在线观看| 欧美手机在线| 天天色天天操综合| 国产精品视频二区三区| 色偷偷免费视频| 大波视频国产精品久久| 精品久久久无码中文字幕| 欧美三级午夜理伦三级老人| 99国产精品久久久久99打野战| 国产av国片精品| 亚洲成av人片一区二区三区| 国产精品111| 狠狠擦狠狠操| 偷拍一区二区三区| 国产一区二区三区视频在线观看| 成人三级黄色免费网站| 91麻豆产精品久久久久久| 麻豆久久久av免费| 538国产精品一区二区在线| 精品香蕉一区二区三区| 激情视频小说图片| 日本视频一二三区中文字幕| 精品视频在线一区二区| 永久免费在线观看| 精品一区二区三区av| 3d动漫精品啪啪一区二区下载| 无人区乱码一区二区三区| 亚洲美女偷拍久久| 日b视频免费观看| 91精品啪aⅴ在线观看国产| 91精品国产91久久久久久密臀| 久久综合九色九九| 无码人妻久久一区二区三区| 日韩专区欧美专区| 国产丝袜在线| 亚洲精品成人久久久| 午夜免费看视频| 一区在线观看免费| 国产传媒在线观看| 黄色日韩在线| 国产日韩精品一区二区三区| 国产三级精品三级在线专区| 欧美日韩亚洲视频一区| 亚洲色图欧美色| 石原莉奈在线亚洲二区| 亚洲成人一级片| h视频在线看| 天天色天天上天天操| 在线观看亚洲视频啊啊啊啊| 欧美黑人xxxx| 欧美大片1688网站| 女同互忝互慰dv毛片观看| 国产永久在线观看| 强伦女教师2:伦理在线观看| 久久视频在线| 国产不卡高清在线观看视频| 久久亚洲国产中v天仙www| 国产精品欧美综合亚洲| 一本到高清视频免费精品| 香蕉成人app免费看片| 日本欧美电影在线观看| 91精品久久久久久久| 久草视频免费在线观看| 最新电影电视剧在线观看免费观看| 欧美激情综合色综合啪啪五月| 亚洲一区二区三区高清不卡| 久久亚洲人体| 91国模少妇一区二区三区| 国模人体一区二区| caoporn超碰国产公开| 久久不射中文字幕| 久久免费区一区二区三波多野| 久久午夜电影网| 超碰在线免费公开| 91精品蜜臀一区二区三区在线| 亚洲在线观看| 美女黄a一级视频| 成人性生活视频免费看| 欧美 日韩 人妻 高清 中文| 精品久久久久久亚洲精品| 中文字幕一区二区三区在线视频| 日韩精品在线一区| 国产精品v日韩精品v在线观看| 国内精品伊人久久| 夜夜爽视频导航| 玖玖玖视频精品| 99视频免费播放| 中文字幕av导航| 久久久久国产精品午夜一区| gogo人体一区| www.91香蕉视频| fc2ppv完全颜出在线播放| 狠狠色丁香久久婷婷综合_中| 亚洲人成亚洲人成在线观看图片| 国产成人精品久久久| 丁香花高清电影在线观看完整版| 国产精品99免视看9| 国产三级精品视频| 国产免费一区二区三区最新不卡| 一区二区三区入口| 日日摸夜夜添夜夜添精品视频| 日韩免费影院| 国产三级精品三级| 亚洲狠狠婷婷综合久久蜜桃| 久久久久久久午夜| 亚洲男人的天堂在线aⅴ视频| 国产成人精品一区二区色戒| 国内精品国产三级国产在线专| 欧洲毛片视频| 处破女av一区二区| 国产激情久久久久| jizz日本| 欧美视频在线免费| 中文字幕在线日韩| 免费精品一区二区| 色欲色香天天天综合网www| 国产极品在线视频| 欧美最猛性xxxxx喷水| 米奇777四色精品人人爽| 麻豆传媒在线观看| 国产精品69av| 美女大黄三级视频在线观看| 91精品久久久久久久久99蜜臂| 亚洲摸摸操操av| 久久久久久青草| 国产精品一区二区婷婷| 日本大胆人体视频| 香蕉视频色版| 久久久久久久久综合影视网| 波多野结衣日韩| 丝袜美腿亚洲一区二区| 五月婷婷在线视频| 天天干天天操天天爱| 国产熟女一区二区三区四区| 国产麻豆视频在线观看| 91九色精品| 美女视频一区二区| 波多野结衣在线观看一区| 国产一区二区日韩精品欧美精品| 国产精品第9页| 小草在线视频在线免费视频| 国产精品天天看| 欧美新色视频| www在线播放| 国产成人jvid在线播放| 欧美综合在线播放| www.精品在线| 福利91精品一区二区三区| 亚洲av无码一区二区乱子伦| 婷婷久久一区| 久久电影一区二区| www.黄色在线观看| 最近2019中文字幕第三页视频| 久久综合久久色| 只有精品亚洲| 久久精品第一页| 在线观看三级网站| 国产丝袜不卡| 亚洲欧美三级在线| 韩国三级hd中文字幕有哪些| 国产又粗又硬又长| 亚洲精品爱爱久久| 777丰满影院| 精品人妻一区二区免费视频| 在线中文av| 成人午夜高潮视频| 欧美 中文字幕| 亚洲不卡在线观看| 久久久久亚洲无码| 欧美最顶级的aⅴ艳星| 在线观看亚洲天堂| 中文字幕天堂av| 国产日韩精品在线看| 欧美成人黑人| 韩国av免费观看| 无套白嫩进入乌克兰美女| 3d欧美精品动漫xxxx无尽| 亚洲jizzjizz妇女| 国产精一区二区三区| 国产91免费在线观看| 色综合久久中文字幕综合网| 奇米影视777在线欧美电影观看| 成全视频全集| 久草在线免费资源站| 国产香蕉视频在线看| 欧美日韩在线播| 不卡中文字幕| 3344国产精品免费看| 黄色片视频在线| 黄网站免费入口| 六月丁香婷婷在线| 亚洲精品美女在线| 日韩制服丝袜av| 麻豆一区二区麻豆免费观看| 丁香花在线电影小说观看| 免费视频久久久| 色999日韩自偷自拍美女| 300部国产真实乱| 久久久精品久久久久特色影视| 国产在线精品一区二区中文| 99国产精品久久久久久久成人| 精品96久久久久久中文字幕无| 国产精品亚洲不卡a| 日本久久伊人| 亚洲免费三区一区二区| 国产视频亚洲色图| 国产大片一区二区| 国产十八熟妇av成人一区| 久久中文字幕免费| 日韩不卡在线播放| 日韩精品www| 黄色的网站在线观看| 99精品国产高清一区二区麻豆| 日韩中文字幕高清在线观看| 国产一区二区精彩视频| 日本黄色成人| 一区二区三区欧美精品| 国产剧情精品在线| 亚洲成人亚洲激情| 国产欧美一区二区三区不卡高清| 日韩欧美一级视频| 国产亚洲一区二区三区啪| 色婷婷亚洲一区二区三区| 亚州欧美一区三区三区在线| 91中文字幕永久在线| 日本在线精品| 免费看a在线观看| 国产丶欧美丶日本不卡视频| 999精品网| 国产精品自拍一区| 日韩亚洲欧美中文高清在线| 中文字幕av免费在线观看| 中文字幕少妇一区二区三区| 久视频在线观看| 亚洲**2019国产| 一区二区在线播放视频| 欧美在线一级va免费观看| 亚洲18私人小影院| 欧美成人免费高清视频| 精品国产乱码久久久久久闺蜜| 澳门永久av免费网站| 青青草原一区二区| 手机在线免费av| 国产91精品一区二区麻豆网站| 亚洲a中文字幕| 国产精品精品久久久| 国产麻豆视频精品| 国产精品三级| 日韩一区二区三区精品视频第3页| 91一区二区三区在线| 亚洲免费资源在线播放| 日韩高清dvd碟片| 91porny九色| 日本美女一区二区| 动漫3d精品一区二区三区乱码| 国产精品五区| 91麻豆一区二区| caoporn超碰97| 午夜影院免费看| 欧美二区在线| 精品国产免费第一区二区| 久久69国产一区二区蜜臀| 少妇影院在线观看| 美女av免费在线观看| 99久久婷婷国产综合精品青牛牛| 国产精品毛片高清在线完整版| 97干com| 欧美剧在线免费观看网站| 中文字幕欧美色图| 国产精品亲子伦av一区二区三区| 国产深夜精品| 欧美一级本道电影免费专区| 欧美一区二区三区精美影视| 亚洲一区二区成人在线观看| 成人黄网大全在线观看| 一级成人黄色片| 欧美成人国产|