国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > HTML5 > 正文

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

2024-09-05 07:23:11
字體:
供稿:網(wǎng)友

最近在寫移動(dòng)端 H5 應(yīng)用,遇到一個(gè)值得記錄下來的點(diǎn)。現(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)度

使用 viewportremjs 動(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í)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
精品国内一区二区三区免费视频| 亚洲91av| 九九热视频在线观看| 日本在线视频www鲁啊鲁| 天天草天天爽| 天天av综合网| 精品入口麻豆传煤| www.九九热.com| 福利视频在线导航| 国产精美视频| 天天草天天干| 国产免费网址| 中文字幕在线免费看| 国产极品一区二区三区 | 91麻豆福利| 女子免费在线观看视频www| 好男人免费精品视频| 2018中文字幕在线| 高清视频一区二区三区四区| 精品黄色免费中文电影在线播放| 国产中文字幕在线观看| eeuss影院网站免费观看| 国产精品白浆流出视频| 国产乱码在线| www在线免费观看视频| 18加网站在线| av网址在线免费观看| 中文字幕有码在线视频| 三级小说一区| av黄色在线观看| 国产亚洲精品久久久久久移动网络| 在线中文字幕资源| 国产精品作爱| 久精品在线观看| www在线视频| 在线āv视频| 91久久精品国产性色| 最新黄网在线观看| 1区2区3区在线| 国产一二三区在线| 中文字幕视频免费在线观看| 日本福利在线| 亚洲日本伊人| 精品美女在线观看视频在线观看| 国产蜜臀在线| 国产一级黄色片免费| 九九精品九九| 国产在线视精品麻豆| 91福利在线免费| 国产网站av| 国产精品毛片一区二区三区四区| 成网站在线观看人免费| 狠狠干天天爱| 国产秀色在线www免费观看| 国产一二三区精品视频| 国产精品久久久久久久久鸭| 国产精品毛片一区二区三区四区| 国产xxxx做受性欧美88| 日韩中文字幕久久久经典网| 激情亚洲综合网| 狂野欧美性猛交xxxx乱大交| 国内a∨免费播放| 国产经典av| 青青久草在线| 国产亚洲精品久久久久久移动网络 | 日本三级在线视频| 亚洲精品午夜级久久久久| 四虎精品视频| 国产一级电影网| 国产大学生粉嫩无套流白浆| 天堂中文在线观看| 国产在线高清| 在线视频三级| 国产一二三视频| 亚洲91av| 国产精品免费91| 九九精品九九| 伊人影院在线视频| 最新超碰在线| 激情五月色综合亚洲小说| 国产视频资源| 欧美日韩国产亚洲沙发| 国产区视频在线观看| 久久国产情侣| 一本久中文高清| 国产黄色免费看| 最新中文字幕在线| 免费不卡中文字幕视频| 性国产高清在线观看| 2020中文字幕在线播放| 国产理论片免费观看| 青青国产在线| www中文字幕在线观看| v天堂福利视频在线观看| 精品美女在线观看视频在线观看| 最好看更新中文字幕| 四虎成人精品在永久在线观看| 国产91久久久久| 91麻豆精品国产91久久| 国产黄色免费网站| 国产导航在线| 亚洲an天堂an在线观看| 在线免费国产视频| 亚洲第一成人在线视频| 天天操夜夜添| 免费黄网站在线观看| 激情六月丁香| 最新国产在线精品91尤物| 国产农村一级特黄α**毛片 | 国产午夜在线| 国产精品视频一区麻豆| 国产一级在线观看www色| 国产精品一区牛牛影视| 国产秀色在线www免费观看| 最近中文字幕mv免费高清视频8| 99热在线免费播放| 91精品专区| 久草一本av| 国产第一页在线视频| 依依成人在线| 国产在线播放av| 国产欧美在线观看视频| 92国产在线视频| jlzzjlzz欧美| 中文字幕在线资源| 97在线超碰| 九九在线观看免费视频| 国产三区在线观看| 在线一区二区三区精品| 超碰在线网址| 精品成人一区二区三区免费视频| 青青艹在线视频| 国产精品美女一区二区视频| 亚洲人av在线| 国产色婷婷在线| 欧美成人久久电影香蕉| 国产精品免费视频一区一| 亚洲成人av在线影院| 国产永久免费高清在线观看视频| 国产黄色大片在线观看| 麻豆视频在线观看免费网站 | 国产精品视频h| 免费国产在线视频| 夜夜操天天干| 91亚洲天堂| 中文字幕亚洲免费| 免费国产视频| 亚洲精品白浆| 国产成人综合美国十次| 二区三区中文字幕| 91精品国产91久久久久久青草| 欧美精品日韩少妇| 中文av资源在线| 国产精品伦理一区二区三区| 黄色国产网站在线观看| eeuss影院网站免费观看| 精品一区二区三区在线成人| 国产小视频在线播放| 国产九九在线| 国产一卡2卡3卡4卡网站免费| 国产中文字幕在线看| 黄网址在线永久免费观看| xxxxx中文字幕| 久草网在线视频| 丁香花在线电影| 福利资源在线久| 国产精品自产拍在线观看2019| 国内精品不卡| 国产一级性片| 国产91久久久久蜜臀青青天草二| 国产网站免费观看| 国产一二三四| 国产超级va在线视频| wwww在线观看| 久久亚洲天堂| 国产精品伦理一区二区三区| 伊人网在线观看| 欧美日韩不卡中文字幕在线| 久久这里精品| 国产成人综合美国十次| 精品视频vs精品视频| www.色婷婷| 中文字幕在线资源| 中文资源在线网| 九色精品视频在线观看| 国产一二在线观看| 日本在线观看网站| 国产午夜在线观看| 亚洲an天堂an在线观看| √天堂8资源中文在线| 夜色资源网av在先锋网站观看| 激情丁香在线| 亚洲综合在线免费| 国产图片综合| 国产在线资源| av黄色在线观看| 国产一级黄色电影| 九九视频在线播放| av在线免费观看网| 69av二区|