CSS中的px與物理像素、邏輯像素、1px邊框問題

一直不太清楚CSS中的1px與邏輯像素、物理像素是個什么關系(作為一名前端感覺很慚愧 -_-!),今天終于花時間徹底弄清楚了,其實弄清楚之后就覺得事情很簡單,但也只有在弄清楚之后,才會覺得簡單(語出《禪與摩托車維修藝術》,哈哈哈哈)。

兩種像素

物理像素:設備屏幕實際擁有的像素點。比如iPhone 6的屏幕在寬度方向有750個像素點,高度方向有1334個像素點,所以iPhone 6 總共有750*1334個物理像素。

邏輯像素:也叫“設備獨立像素”(Device Independent Pixel, DIP),可以理解為反映在CSS/JS代碼里的像素點數。

設備像素比(Device Pixel Ratio,?DPR):一個設備的物理像素與邏輯像素之比。

像素還分物理和邏輯?這兩個玩意有啥區別?

其實在很久以前,的確是沒區別的,CSS里寫個1px,屏幕就給你渲染成1個實際的像素點,DPR=1,多么簡單自然~

但是后來事情起了變化,搞事的就是Retina技術,這種技術使用4個乃至更多物理像素來渲染1個邏輯像素,這樣一來,同樣的CSS代碼設置的尺寸,在Retina和非Retina屏幕上看起來大小是一樣的,但在Retina屏幕上要精細得多。

技術分享圖片

在Retian屏上,DPR不再是1,而是大于1,比如2(iPhone 5 6 7 8)或3(iPhone 6 Plus等一系列Plus)或者為非整數(一些Android機),說不定還會漲。

舉個例子,iPhone 6的物理像素上面已經說了,是750*1334,那它的邏輯像素呢?我們只需在iPhone 6的Safari里打印一下screen.width和screen.height就知道了,結果是 375*667,這就是它的邏輯像素,據此很容易計算出DRP為2。當然,我們還可以直接通過window.devicePixelRatio這個值來獲取DRP,打印結果是2,符合我們的預期。

奇葩的iPhone 6 Plus

這里不得不提一下iPhone 6 Plus(以及同尺寸的其他果機),它的實際物理像素點個數是1080*1920,但如果你截個屏,你會發現截屏圖片的寬高是1242*2208;瀏覽器的screen對象會告訴你,6 Plus的邏輯像素是414*736,正好是截屏寬度的三分之一,window.devicePixelRatio值也為3。

所以現在我們有了3種不同的像素值?什么情況?

是這樣的,iPhone 6 Plus系統定義的屏幕像素就是1242*2208,系統會自動把這些像素點塞進1080*1920個實際像素點來渲染,這個過程對于開發者是透明的,無需理會。

所以對于前端來說,可以直接把1242視為6 Plus的“物理像素”,包括UE小姐姐們出圖也是以1242為標準的,因此不妨把1242*2208稱為6 Plus的“設計像素”。

蘋果這是要鬧那樣?

其實,當初蘋果公司在確定6 Plus的DRP時,糾結了半天:選2吧,同樣的字號在6?Plus上看起來比6更小,不好;選3吧,字又顯得太大了,導致一屏能展示的內容還沒有6多;最適合視覺的DRP值是2.46,但這樣一個數字能把設計師和程序員們逼瘋。最后就想出了引入“設計像素”這樣一個兩全其美的方案,既讓開發者開心,又讓用戶爽,豈不美哉?

1px邊框問題

在蘋果的帶動下,Retina技術在移動設備上已經成了標配,所以前端攻城獅必須直面如下事實:

  1. 你想畫個1px的下邊框,但屏幕硬是塞給你一條寬度為2—3個物理像素的線。
  2. 你沒法像安卓或iOS的同事那樣直接操縱物理像素點。

這就是初級前端面試必考題之“1px邊框問題”的由來。

1px邊框問題的解法千奇百怪,各顯神通,但以我的實踐經驗,最推崇的方法還是利用CSS3的transform: scale,因為簡單直接、適用性和兼容性好。

你不是給我兩個物理像素點嗎?加個transform: scale(0.5),只剩一個點了~

三個物理像素點?那就scale(0.33)!

使用CSS的-webkit-min-device-pixel-ratio媒體查詢可以針對不同的DPR做出處理 ,下面以Less代碼為例:

@media (-webkit-min-device-pixel-ratio:2),(min-device-pixel-ratio:2){.border-bt-1px(@color) {position: relative;&::after {position: absolute;bottom: 0;width: 100%;height: 1px;background-color: @color;transform: scaleY(0.5);}}
}

上面介紹的是只有一邊的情景,如果是四面都要有框,咋辦?

那就畫個DPR倍大小的矩形框,再scale一下,完事~

?

至此,本文的關于像素的知識,應是足夠應對一般前端的工作需要了。

CSS中的px與物理像素、邏輯像素、1px邊框問題

標簽:面試???物理???寬高???兩種???藝術???代碼???直接???end???scale???

原文地址:https://www.cnblogs.com/leegent/p/9404572.html

轉載于:https://www.cnblogs.com/xiaocaiyuxiaoniao/p/10156680.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450299.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

平滑數據遷移,不影響服務

為什么80%的碼農都做不了架構師?>>> 轉自:http://www.10tiao.com/html/249/201703/2651959992/1.html 轉載于:https://my.oschina.net/jzgycq/blog/2872104

spring cache相關注解介紹 @Cacheable、@CachePut、@CacheEvict

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Cacheable是用來聲明方法是可緩存的。將結果存儲到緩存中以便后續使用相同參數調用時不需執行實際的方法。直接從緩存中取值。最簡單的格…

layui 渲染select下拉選項 ,日期控件的用法

最近項目中用到關于layui的前端技術&#xff0c;在使用layui 渲染select option下拉復選框時出現了沒有值渲染的問題&#xff0c;還有使用layui日期的過程 &#xff0c;接下來就一起看看吧。 /** *從后臺渲染字段民族數據/<div class"layui-inline"><labe…

CF1082G Petya and Graph(最小割,最大權閉合子圖)

QWQ嚶嚶嚶 感覺是最水的一道\(G\)題了 順便記錄一下第一次在考場上做出來G qwqqq 題目大意就是說&#xff1a; 給你n個點&#xff0c;m條邊&#xff0c;讓你選出來一些邊&#xff0c;最大化邊權減點權 \(n\le 1000\) QWQ 看完這個題和數據范圍&#xff0c;第一感覺就是網絡流啊…

NET Core微服務之路:讓我們對上一個Demo通訊進行修改,完成RPC通訊

最近一段時間有些事情耽擱了更新&#xff0c;抱歉各位了。上一篇我們簡單的介紹了DotNetty通信框架&#xff0c;并簡單的介紹了基于DotNetty實現了回路&#xff08;Echo&#xff09;通信過程。我們來回憶一下上一個項目的整個流程&#xff1a;當服務端啟動后&#xff0c;綁定并…

Centos7防火墻設置

查看防火墻狀態 or rootlocalhost ~]# systemctl status firewalld / firewall-cmd --state 啟動防火墻 [rootlocalhost ~]# systemctl start firewalld 關閉防火墻 [rootlocalhost ~]# systemctl stop firewalld 設置開機啟動 [rootlocalhost ~]# systemctl enable fi…

HTTP協議中POST、GET、HEAD、PUT等請求方法及相應值得含義

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 請求方法是請求一定的Web頁面的程序或用于特定的URL。可選用下列幾種&#xff1a; GET&#xff1a; 請求指定的頁面信息&#xff0c;并…

java面試題文檔(QA)

– 基礎篇 1、 Java語言有哪些特點2、面向對象和面向過程的區別3 、八種基本數據類型的大小&#xff0c;以及他們的封裝類4、標識符的命名規則。5、instanceof 關鍵字的作用6、Java自動裝箱與拆箱7、 重載和重寫的區別8、 equals與的區別9、 Hashcode的作用10、String、String …

第四次軟件工程作業

關于 石墨文檔客戶端 的案例分析 作業地址&#xff1a; https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 第一部分 調研&#xff0c; 評測 1.下載并使用&#xff0c;按照描述的bug定義&#xff0c;找3~5個功能性的比較嚴重的bug。請用專業的語言描述&#xff08;每個…

深入剖析C++中的string類

一&#xff0c;C語言的字符串 在C語言里&#xff0c;對字符串的處理一項都是一件比較痛苦的事情&#xff0c;因為通常在實現字符串的操作的時候都會用到最不容易駕馭的類型——指針。 比如下面這個例子&#xff1a; //example 1: char str[12] "Hello"; char *…

Apple System: Error: ENFILE: file table overflow

2019獨角獸企業重金招聘Python工程師標準>>> 在MAC上跑nodejs&#xff0c;遇到了一個問題&#xff1a;file table overflow 主要意思就是說文件打開太多了&#xff0c;超過了限制&#xff0c;產生這個問題主要是蘋果操作系統的限制。 echo kern.maxfiles65536 | sud…

springboot的緩存技術

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我門知道一個程序的瓶頸在于數據庫&#xff0c;我門也知道內存的速度是大大快于硬盤的速度的。當我門需要重復的獲取相同的數據的時候&a…

深度優先遍歷解決連通域求解問題-python實現

問題描述 在一個矩形網格中每一個格子的顏色或者為白色或者為黑色。任意或上、或下、或左、或右相鄰同為黑色的格子組成一個家族。家族中所有格子的數量反映家族的大小。要求找出最大家族的家族大小&#xff08;組成最大家族的格子的數量&#xff09;并統計出哪些點屬于哪一族。…

字符串進階

C風格字符串 1、字符串是用字符型數組存儲的&#xff0c;字符串要求其尾部以’\0’作為結束標志。如&#xff1a; char string[ ]”C programming language”; 用sizeof來測string長度為25個字節&#xff0c;而實際串本身長度(含空格)為24個字節&#xff0c;多出來的一個就是…

flask上傳excel文件,無須存儲,直接讀取內容

運行環境python3.6 import xlrd from flask import Flask, requestapp Flask(__name__)app.route("/", methods[POST, GET]) def filelist1():print(request.files)file request.files[file]print(file, type(file), file)print(file.filename) # 打印文件名f …

分布式 ID的 9 種生成方式

一、為什么要用分布式 ID&#xff1f; 在說分布式 ID 的具體實現之前&#xff0c;我們來簡單分析一下為什么用分布式 ID&#xff1f;分布式 ID 應該滿足哪些特征&#xff1f; 1、什么是分布式 ID&#xff1f; 拿 MySQL 數據庫舉個栗子&#xff1a; 在我們業務數據量不大的時…

spring boot Redis集成—RedisTemplate

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Spring boot 基于Spring, Redis集成與Spring大同小異。 文章示例代碼均以前篇筆記為基礎增加修改&#xff0c;直接上代碼&#xff1a;…

QtCreator無法編輯源文件

在Qt Creator中新建工程&#xff0c;添加現有C源文件&#xff0c;有的源文件可以編輯&#xff0c;有的源文件編輯不了&#xff0c;發現無法編輯的源文件有一個共同特點&#xff0c;即其中都包含中文&#xff0c;且中文出現亂碼&#xff0c;于是&#xff0c;點擊Qt Creator菜單欄…

Unicode簡介和使用

一、Unicode簡介 在第一章中&#xff0c;我已經預告&#xff0c;C語言中在Microsoft Windows程序設計中扮演著重要角色的任何部分都會講述到&#xff0c;您也許在傳統文字模式程序設計中還尚未遇到過這些問題。寬字符集和Unicode差不多就是這樣的問題。 簡單地說&#xff0c;…

webpack4.x 模塊化淺析-CommonJS

先看下webpack官方文檔中對模塊的描述&#xff1a; 在模塊化編程中&#xff0c;開發者將程序分解成離散功能塊(discrete chunks of functionality)&#xff0c;并稱之為模塊。每個模塊具有比完整程序更小的接觸面&#xff0c;使得校驗、調試、測試輕而易舉。 精心編寫的模塊提供…