chrome控制臺如何把vw顯示成px_【CSS】rem,em,px的區別和使用場景

7f54f8cbebbcad06d8fc1120dd2a5991.png

前端潮咖

點擊上面藍字,關注我們!

關注

關注前端潮咖,每日精選好文

52922dec639d77cda4c210dae53fa070.png

作者:大前端小菜鳥

來源:cnblogs.com/hyns/p/12380944.html

作rem布局原理深度理解(以及em/vw/vh)

一、前言

我們h5項目終端適配采用的是淘寶那套《Flexible實現手淘H5頁面的終端適配》方案。主要原理是rem布局。最近和別人談彈性布局原理,發現雖然已經使用了那套方案很久,但是自己對rem的理解很含糊, 包括vw、vh等。所以打算寫博客總結一下,以加深理解。

二、幾個概念

這里就不講那些,物理像素、設備像素比了,可以自己查閱。要去理解rem/em/vw/vh等,首先要直觀的去理解他們到底是什么?理解好了,后面就好辦了。其實這幾個都是css單位,就像我們常用的px一樣,只不過他們都是相對單位。我平時使用的百分比單位如:width:100%;就是相對單位。

2.1、em

em作為font-size的單位時,其代表父元素的字體大小,em作為其他屬性單位時,代表自身字體大小——MDN

比如父元素font-size:12px;

自身元素如果寫成:font-size:2em;則自身元素用px表示就是24px(相對父元素字體大小);

但是自身元素設置:width:2 em,那么自身元素用px表示就是48px(相對自身字體大小);

2.2、rem

rem作用于非根元素時,相對于根元素字體大小;rem作用于根元素字體大小時,相對于其出初始字體大小——MDN

比如根元素(html)設置font-size=12px; 非根元素設置width:2rem;則換成px表示就是24px;

如果根元素設置成font-size=1rem;則根元素換成px就是相對于初始字體大小,一般是12px;

2.3、vw/vh

vw :視口寬度的 1/100;vh :視口高度的 1/100 —— MDN

在pc端,視口寬高就是瀏覽器得寬高;

在移動端,這個還不太一樣,不過一般設置:

<meta?name="viewport"?content="width=device-width,?initial-scale=1,?maximum-scale=1">

代碼以顯示網頁的屏幕寬度定義了視窗寬度。網頁的比例和最大比例被設置為100%。

三、剖析rem布局原理

其實好好理解上面的概念,rem的原理也就很簡單了。

假設我們將屏幕平局分為10份,每一份寬度用一個a表示,即a=屏幕寬度/10;那么:

div{width:?5a}?/*?屏幕寬度的50%?*/

但是css中沒有a這個單位啊?那怎么辦呢?對,css不是有相對單位rem么?我們全可以實現借助rem代替上面的a。如:

html?{font-size:?12px}
div?{width:?2rem}?/*?24px*/
?
html?{font-size:?16px}
div?{width:?2rem}?/*?32px*/

那么問題來了?怎么讓html元素字體大小恒等于屏幕的1/10呢?如ipone6寬是375px,font-size:37.5px;

html?{fons-size:?width?/?10}
div?{width:?5rem}?/*?5rem?=?5a?=?屏幕寬度的50%?*/

我們用js很容易動態的設置html的font-size恒等屏幕的1/10;我們可以在頁面dom ready、resize和屏幕旋轉中設置:

document.documentElement.style.fontSize?=?document.documentElement.clientWidth?/?10?+?'px';

如何把設計稿的像素單位換成以rem為單位呢?可以用一個比例來計算:如設計稿寬度為750px,某個元素量得75px,那么:

75px/750px = 計算所得rem/10rem,所以計算所得rem=75px;所以我們在樣式中寫width:1rem;實際寬度是75px;同理,如果設計稿總寬度是640px,則1rem=64px。

預處理函數可以簡化:

$ue-width: 750; /* 設計稿圖的寬度 */

@function?px2rem($px)?{
??@return?#{$px/$ue-width*10}rem;
}
?
div?{
??width:?px2rem(100);/*編譯后:? p{width:1.5625rem}*/
}

四、rem萬能嗎?

rem是一種彈性布局,它強調等比縮放,100%還原。它和響應式布局不一樣,響應式布局強調不同屏幕要有不同的顯示,比如媒體查詢。

字體并不合適使用rem, 字體的大小和字體寬度,并不成線性關系,所以字體大小不能使用rem;由于設置了根元素字體的大小,會影響所有沒有設置字體大小的元素,因為字體大小是會繼承的,難道要每個元素都顯示設置字體大小?

我們可以在body上做字體修正,比如把body字體大小設置為16px,但如果用戶自己設置了更大的字體,此時用戶的設置將失效,比如合理的方式是,將其設置為用戶的默認字體大小:

html?{fons-size:?width?/?10}
body?{font-size:?16px}??

那字體咋整?我們可以用媒體查詢和em來實現:


@media?screen?and?(min-width:?320px)?{
????body?{font-size:?16px}
}
@media?screen?and?(min-width:?481px)?and?(max-width:640px)?{
????body?{font-size:?18px}
}
@media?screen?and?(min-width:?641px)?{
????body?{font-size:?20px}
}
?
div?{font-size:?1.2em}

在制作H5的頁面中,rem并不適合用到段落文本上。所以在Flexible整個適配方案中,考慮文本還是使用px作為單位。只不過使用[data-dpr]屬性來區分不同dpr下的文本字號大小。

.selector?{
????width:?2rem;
????border:?1px?solid?#ddd;
}
[data-dpr="1"]?.selector?{
????font-size:?14px;
}
[data-dpr="2"]?.selector?{
????font-size:?28px;
}
[data-dpr="3"]?.selector?{
????font-size:?42px;
}

當然你也可以給非根元素設置合適的字體。

五、rem布局方案

從上可以看出最好的彈性布局方案就是rem+js的方案,《Flexible實現手淘H5頁面的終端適配》就是采用rem+js實現的。flexible主要做了幾點。

動態改寫標簽給元素添加data-dpr屬性,并且動態改寫data-dpr的值。給元素添加font-size屬性,并且動態改寫font-size的值

六、em可以用來做彈性布局嗎?

上面知道,一旦某個節點的字體大小發生變化,其他節點也隨之變化,所以不合適,但是用來處理字體還是絕妙的。

七、vw/wh用來做彈性布局怎么樣?

根據上面說,vw —— 視口寬度的 1/100;vh —— 視口高度的 1/100;感覺已經不用多說了。

/* rem方案 */

html?{font-size:?width?/?10}
p?{width:?1.5625rem}
?
/*?vw方案?*/
p?{width:?15.625vw}

如果rem方案中使用設置font-size=width/100就和vm意思一樣, 但是比如font-size:640px/100;瀏覽器不會識別6.4px這么小的字體的。

如果不考慮兼容性問題,可以大膽使用vw/vh做彈性的布局。


》聲明:文章著作權歸作者所有,如有侵權,請聯系小編刪除。

關注公眾號「前端潮咖」,公眾號后臺回復「加群歡迎關注討論前端知識,每日分享最新前端文章進入公眾號教程章節60fd0b6e2308f6d4369ad5cb553f3719.gif213a486377247a5402e58f6a62b9bada.png

前端潮咖

一個專注技術學習與分享的公眾號

長按識別二維碼關注我們

輕點“在看”支持作者

be815d0d04aedc46493085cf2295d2e1.png

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

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

相關文章

php7對象轉換成數組,php 如何把對象轉換成數組對象

php把對象轉換成數組對象的方法&#xff1a;首先打開相應的PHP代碼文件&#xff1b;然后通過“function array_to_object($arr){...}”方法把對象轉換成數組即可。本文操作環境&#xff1a;windows7系統、PHP7.1版&#xff0c;DELL G3電腦php-對象(object) 與 數組(array) 的轉…

python中的線程之semaphore信號量

semaphore是一個內置的計數器 每當調用acquire()時&#xff0c;內置計數器-1 每當調用release()時&#xff0c;內置計數器1 計數器不能小于0&#xff0c;當計數器為0時&#xff0c;acquire()將阻塞線程直到其他線程調用release()。 來看下面的代碼&#xff1a; import time imp…

用什么代碼可以改變鍵盤_為什么我改變了對代碼質量的看法

用什么代碼可以改變鍵盤by John Cobb約翰科布(John Cobb) 為什么我改變了對代碼質量的看法 (Why I changed the way I think about Code Quality) What do you think about when you think about code quality?當您考慮代碼質量時&#xff0c;您會怎么看&#xff1f; Is it …

建模:建模清單

ylbtech-建模&#xff1a;建模清單1.返回頂部 2.返回頂部3.返回頂部4.返回頂部5.返回頂部 6.返回頂部作者&#xff1a;ylbtech出處&#xff1a;http://ylbtech.cnblogs.com/本文版權歸作者和博客園共有&#xff0c;歡迎轉載&#xff0c;但未經作者同意必須保留此段聲明&#xf…

獲得picker選項的當前年月值_如果你用OPPO手機!千萬記得開啟開發者選項,手機性能大幅度提升...

如果你用OPPO手機&#xff01;千萬記得開啟開發者選項&#xff0c;手機性能大幅度提升用過OPPO手機的用戶都知道&#xff0c;手機使用1-2年都會出現卡頓的情況。這也是安卓手機的通病&#xff0c;但也有很多朋友手機使用3年也不會出現卡頓的現象&#xff0c;都是因為打開了手機…

imageset matlab,如何以imageSet或imageDataStore的形式向MATLAB中的BagOfFeatures()函數提供輸入?...

我想使用MATLAB的bagOfFeatures()函數。但它需要以imageSet或imageDataStore的形式輸入。我想運行的代碼如下&#xff1a;如何以imageSet或imageDataStore的形式向MATLAB中的BagOfFeatures()函數提供輸入&#xff1f;Dataset D:\dsktop\kinect_leap_dataset\acquisitions;thre…

Django運維后臺的搭建之四:用bootstrap模板讓運維前臺變得更漂亮

我對于PHP和ajax是屬于二把刀的水平&#xff0c;所以做網頁前端肯定是比上天還難&#xff0c;但是我又想把網頁做的漂亮可愛&#xff0c;怎么辦呢&#xff1f;我就只好去download別人的模板&#xff0c;在這里我使用了bootstrap框架做的模板。各位可以去https://wrapbootstrap.…

codeigniter_如何在瀏覽器中查看CodeIgniter日志文件

codeigniterby Seun Matt通過Seun Matt 如何在瀏覽器中查看CodeIgniter日志文件 (How to View CodeIgniter Log Files in the Browser) Just like any other page, it is now possible to read CodeIgniter log files in the browser. My Sweet Goodness!與其他頁面一樣&#…

小程序強制自動更新

(3)強制更新官方版 微信團隊2018-03-2315987瀏覽背景 此前有開發者反饋小程序發布新版本后&#xff0c;新版本覆蓋率比較慢&#xff0c;因為小程序的更新機制是異步的&#xff0c;部分用戶不會馬上應用上新版本。 小程序啟動會有兩種情況&#xff0c;一種是「冷啟動」&#xff…

聯想m7400pro更換墨粉盒怎么清零_佳能打印機怎么換墨水 佳能打印機換墨水注意事項【詳解】...

佳能打印機是我們辦公室用品中比較常見的一個品牌&#xff0c;作為國際知名品牌&#xff0c;其質量也是非常有保障的。在使用的時候打印機沒有墨是經常會遇見的。這時候我們就需要更換墨水盒了。但很多不知道具體步驟&#xff0c;或者沒有注意相關細節&#xff0c;導致換墨水盒…

oracle數據庫連接數超了,oracle數據庫當前和最大連接數

1、查詢oracle的連接數select count(*) from v$session;2、查詢oracle的并發連接數select count(*) from v$session where statusACTIVE;3、查看不同用戶的連接數select username,count(username) from v$session where username is not null group by username;4、查看所有用戶…

MySQL Workbench導出數據庫

步驟&#xff1a; 1. 打開mysql workbench&#xff0c;進入需要導出的數據庫&#xff0c;點擊左側欄的【Management】tab鍵。 2. 點選要輸出的數據庫 點擊【Data Export】選在要輸出的數據庫選擇是否輸出存儲過程和函數&#xff0c;事件&#xff0c;觸發器 點擊Start Export3. …

django 傳遞中文_如何在Django中建立消息傳遞狀態

django 傳遞中文by Ogundipe Samuel由Ogundipe Samuel 如何在Django中建立消息傳遞狀態 (How to Build a Message Delivery Status in Django) Today, we will make a real-time message delivery status framework with Django and Pusher.今天&#xff0c;我們將使用Django和…

軟鏈接與硬鏈接

文件引用模型 在linux中&#xff0c;一切皆文件&#xff0c;而文件包含元數據&#xff08;metedata&#xff09;和用戶數據&#xff08;user data&#xff09;。元數據中的inode號是系統標識和獲取用戶數據的唯一憑證&#xff0c;而文件名僅是為了方便用戶記憶和使用。為了管理…

c++ 數組的輸入遇到特定字符停止輸入_C語言 第4章-字符串和格式化輸入/輸出

#include 用數組name儲存字符串&#xff0c;name數組有40個字節&#xff0c;每個字節儲存一個字符值。在scanf()函數中&#xff0c;輸入字符串name沒有&前綴。C預處理器把字符常量DENSITY定義為62.4。strlen()獲取字符串長度。1. 字符串1.1. char類型數組雙引號標記字符串&…

vue3+typescript引入外部文件

vue3typescript中引入外部文件有幾種方法 &#xff08;eg:引入echarts&#xff09; 第一種方法&#xff1a; 1 indext.html中用script引入 <div id"app"></div><script src"https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts-en.common.min.js…

在哪能找到陌生人聊騷_如何說服陌生人幫助您找到工作

在哪能找到陌生人聊騷by Alex Lacey通過亞歷克斯萊西 找工作嗎&#xff1f; 這是說服陌生人幫助您找到一個人的方法 (Looking for a job? Here’s how to convince strangers to help you find one) 我過去獲得40個推薦的7個步驟 (The 7-step process that I used to get 40 …

Python基礎 day2

Python基礎 一、Python的數據類型 1、int(整型) 在32位機器上&#xff0c;整數的位數為32位&#xff0c;取值范圍為-2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647&#xff0c;而.在64位系統上&#xff0c;整數的位數為64位&#xff0c;取值范圍為…

matlab 文件指針回到開頭,[c/c++] 文件指針位置回到文件開頭(rewind)及行開頭(ftell+fseek)...

待讀入文件1.greenteemo2.csdn3.blog代碼&#xff0c;詳細說明見注釋#include #define LENGTH_OF_LINE 1024int main(){FILE *fp fopen("file.txt", "r"); // 打開文件char line[LENGTH_OF_LINE];while( fgets(line, LENGTH_OF_LINE, fp) ){printf("…

python全棧開發優勢_Python全棧開發多少錢?學Python價格貴嗎?

Python全棧開發培訓多少錢?學習Python是大家進入編程世界的理想之選&#xff0c;而且Python也是一門非常受歡迎的編程&#xff0c;可以從事的領域有很多。 從目前市場上的行情來說&#xff0c;一般情況下Python培訓的費用在一萬五到兩萬元之間的&#xff0c;以后可能會更高&am…