可愛的rem

前端開發中,移動端的開發可以說是舉足輕重了,可是又面臨著不同設備尺寸和分辨率的尷尬點。今天[2018-09-16]臺風山竹登陸廣東,來勢洶洶,外出是不可能的了,那就宅著寫寫這篇小文章吧...原文請戳這里-談談rem單位

超長的前奏

說到移動端的響應布局,你也許會想到:

1. 使用CSS3媒體查詢的方法

body {background: yellow;
}
@media screen and (max-width: 400px) {body {background: red;}
}
復制代碼

嗯,這種的樣式的工作量超級大,因為要對圖片和文字等資源針對不同的尺寸進行設置。一種涼涼的感覺從心底飄過~~~

2. 直接使用百分比

這種方法比較適合移動端上,頁面圖片鋪滿寬度屏幕的運營推廣活動的情況。因為在設計的時候會有一個750px的寬等等設計規范,能夠很好的適配到不同手機啦。然后工作就是切圖了...

#percent{width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;
}
#percent .item{flex: 1;
}
#percent .item img{display: block;width: 100%;height: auto;
}
復制代碼

這種切圖比較費力,如果認真看上面的gif圖的話會發現是三張同等寬高的圖片,在chrome上的調試器上看是有白條的,不過不影響。因為在真機上是不存在的。如果不是切圖寬度等分的情況下,那就不建議這種百分比的適配方法了。

3. 固定寬度

這種方法比較適合PC端開發,在移動端是必須不能才去的。因為移動端的寬度足夠,能夠帶來足夠好的體驗,并且最重要的一點是其像素比是1啊。在縮放的時候不會帶來內容變形的體驗。如果到移動端上面,那就呵呵了~

#container{width: 680px;background: yellow;margin: 0 auto;
}
h1{text-align: center;
}
復制代碼

4. 使用viewport

移動設備上的viewport是設備屏幕上用來顯示網頁的那部分區域,再具體一點就是瀏覽器上用來顯示網頁的那部分區域,但viewport又不局限于瀏覽器可視區域的大小,它可能比瀏覽器的可視區域大,也可能比瀏覽器的可視區域小。

這得要在網頁的head標簽上面設置meta,比如:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
復制代碼

嗯,這個知識點還是一丟丟的,詳細的內容參考菜鳥教程:響應式 Web 設計 - Viewport。 本博文的重點不是這個~

是的,我們可以使用REM來進行適配啊:可以說是目前最強的移動端適配方案...

rem是什么

rem和em單位一樣,都是一個相對單位,不同的是em是相對于父元素的font-size進行計算,rem是相對于根元素htmlfont-size進行計算的,這樣一來rem就完美的繞開了復雜的層級關系,實現了類似em單位的功能。默認情況下,瀏覽器給的字體大小是16px,按照轉化關系16px = 1rem

咦,都是固定了根元素是默認16px了,如何設備不同的移動設備呢?

問題提出也是答案所在,我們動態改變根元素html的字體默認大小不就行了嘛!見下:

rem自適應處理方案

使用rem布局的時候,為了兼容不同的分辨率,我們應該要動態的修正根字體的大小,讓所有的用rem單位的子元素跟著一起縮放,從而達到自適應的效果。

嗯,下面就是動態改變根字體的大小了,采取的當然是javascript來進行控制啦,不然怎么知道像素比哦。

一種是獲取像素比【像素比=物理像素/邏輯像素】通過devicePixelRatio,其兼容性在ie上要在11及11+,兼容性良好。罷了,不討論IE瀏覽器了,看者慎用IE...

(function(){var devicePixelRatio = window.devicePixelRatio || 1;
})();
復制代碼

嗯,在移動端上面適配,rem和viewport搭配效果更佳哦!完整代碼片段如下:

<head><meta name="viewport" />
</head>
復制代碼
(function(){var fontSizeMatchDeviceWidth = function(){var deviceWidth = document.documentElement.clientWidth || window.screen.width || 320,devicePixelRatio = window.devicePixelRatio || 1,fontSize = (Math.ceil(deviceWidth * 16 / 320)),scale = 1 / devicePixelRatio; // 默認的縮放document.documentElement.style.fontSize = fontSize + 'px';document.querySelector('meta[name="viewport"]').setAttribute('content','width=device-width,initial-scale='+'scale'+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no,viewport-fit=cover'); // 增加viewport-fit=cover適配iphone x};(function(){var ua = navigator.userAgent;if(/android/i.test(ua) || /ipad|itouch|iphone/i.test(ua)|| /tianqi/i.test(ua)){fontSizeMatchDeviceWidth();} else { // pc端優雅降級document.documentElement.style.fontSize = '24px';}})();
})();
復制代碼

在上面的基礎上,添加點點樣式,完整的一個demo走一下:

#container{background: yellow;margin: 0 auto;
}
h1{text-align: center;
}
復制代碼

如有紕漏,歡迎看到的各位小哥哥小姐姐指正 @~@! 更多內容請前往我的github

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

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

相關文章

kafka直連方式消費多個topic

一個消費者組可以消費多個topic&#xff0c;以前寫過一篇一個消費者消費一個topic的&#xff0c;這次的是一個消費者組通過直連方式消費多個topic,做了小測試&#xff0c;結果是正確的&#xff0c;通過查看zookeeper的客戶端&#xff0c;zookeeper記錄了偏移量 package day04 /…

100個經典的C語言算法

100個經典的C算法 C語言的學習要從基礎開始&#xff0c;這里是100個經典的算法 題目&#xff1a;古典問題&#xff1a;有一對兔子&#xff0c;從出生后第3個月起每個月都生一對兔子&#xff0c;小兔 子長到第三個月后每個月又生一對兔子&#xff0c;假如兔子都不死&#xff0c;…

MySQL常見面試題目詳解

文章目錄1. SQL1.1 介紹一下數據庫分頁1.2 介紹一下SQL中的聚合函數1.3 表跟表是怎么關聯的&#xff1f;1.4 說一說你對外連接的了解1.5 說一說數據庫的左連接和右連接1.6 SQL中怎么將行轉成列&#xff1f;1.7 談談你對SQL注入的理解1.8 將一張表的部分數據更新到另一張表&…

[轉]windows系統激活

原文鏈接主題&#xff1a;使用kms激活&#xff0c;可以直接使用命令來完成。 方法&#xff1a;在win10桌面狀態下&#xff0c;右擊windows徽標或按快捷鍵windowsx&#xff0c;點擊命令提示符&#xff08;管理員&#xff09; 用到的命令是slmgr&#xff0c;手動kms激活命令如下&…

jackson annotations注解詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 官方WIKI&#xff1a;https://github.com/FasterXML/jackson-databind/wiki jackson 1.x和2.x版本的注解是放置在不同的包下的 1.x是在…

JS-for的衍生對象

在js中一般使用方法&#xff1a; 1.常規的for(var i0;i<length;i) 2.for-in:for(var item in list) 3.for of 描述&#xff1a;對應于一個對象的每個屬性&#xff0c;或一個數組的每個元素&#xff0c;執行一個或多個語句。 語法&#xff1a;for (variable in [object | ar…

浮點數在計算機中存儲方式

C語言和C#語言中&#xff0c;對于浮點類型的數據采用單精度類型&#xff08;float&#xff09;和雙精度類型(double)來存儲&#xff0c;float數據占用32bit,double數據占用64bit,我們在聲明一個變量float f 2.25f的時候&#xff0c;是如何分配內存的呢&#xff1f;如果胡亂分配…

操作系統面試題目詳解

文章目錄1.13 什么是協程&#xff1f;1.14 為什么協程比線程切換的開銷小&#xff1f;1.15 線程和進程的區別&#xff1f;1.16 進程切換為什么比線程更消耗資源&#xff1f;1.17 介紹一下進程之間的通信。1.18 介紹一下信號量。1.19 說說僵尸進程和孤兒進程。1.20 請介紹進程之…

(項目)在線教育平臺(六)

八、授課機構功能 1、模板繼承 如果幾個頁面的大體結構相同&#xff0c;可以使用繼承的方式來實現母版的重用性&#xff0c;也就是子版繼承母版的內容&#xff0c;既可以使用模板的內容&#xff0c;也可以重寫需要改變的地地方。 首先完成授課機構的頁面&#xff0c;通過頁面顯…

C語言 socket 編程學習

對于SOCKET在這里我不想究其歷史,我只想說其時它是一種進程通訊的方式,簡言之就是調用這個網絡庫的一些API函數就能實現分布在不同主機的相關進程之間的數據交換. SOCKET中首先我們要理解如下幾個定義概念: 一是IP地址:IP Address我想很容易理解,就是依照TCP/IP協議分配…

dependency 中的 classifier屬性

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 classifier元素用來幫助定義構件輸出的一些附屬構件。附屬構件與主構件對應&#xff0c;比如主構件是 kimi-app-2.0.0.jar 該項目可能還…

PHP超全局變量$_SERVER

$_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器創建。不能保證每個服務器都提供全部項目&#xff1b;服務器可能會忽略一些&#xff0c;或者提供一些沒有在這里列舉出來的項目。 $_SERVE…

VC讀寫XML文件

1、安裝MSXML 4.0 SP2。在VC6中建立一個基于Dialog的工程。如圖&#xff1a; 在界面上放置3個編輯框、1個按鈕控件。其中屬性設置如下。 編輯框&#xff1a; IDCategoryVariable TypeVariable NameIDC_IDValueCStringm_strIdIDC_AUTHORValueCStringm_strAuthorIDC_TITLEValueCS…

XCode10 swift4.2 適配遇到的坑

以下是2018年10月23日更新 經過大約一個月的時間的適配&#xff0c;項目正式使用XCode10(以下簡稱為10 or XC10)大部分庫都升級為Swift4.2&#xff08;以下簡稱為 4.2 or S4.2&#xff09;&#xff0c;下面是適配過程中遇到的一些坑。 1. Swift4、Swift4.2混編 如果你對項目是小…

學生管理系統Java版

簡單的學生管理系統 主界面編寫&#xff1a; 1.用輸出語句完成主界面的編寫 2.用Scanner語句實現鍵盤的錄入 3.用swich語句完成操作的選擇 4.用循環完成再次回到主界面 代碼實現&#xff1a; while (true) {//1.用輸出語句完成主界面的編寫System.out.println("--------…

dubbo 配置文件詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、dubbo常用配置 <dubbo:service/> 服務配置&#xff0c;用于暴露一個服務&#xff0c;定義服務的元信息&#xff0c;一個服務可…

ASP.NET Core 實戰:Linux 小白的 .NET Core 部署之路

一、前言 最近一段時間自己主要的學習計劃還是按照畢業后設定的計劃&#xff0c;自己一步步的搭建一個前后端分離的 ASP.NET Core 項目&#xff0c;目前也還在繼續學習 Vue 中&#xff0c;雖然中間斷了很長時間&#xff0c;好歹還是堅持下來了&#xff0c;嗯&#xff0c;看了看…

學以致用十三-----Centos7.2+python3+YouCompleteMe成功歷程

歷經幾天的摸索&#xff0c;趟過幾趟坑之后&#xff0c;終于完成YouCompleteMe的安裝配置。 今天同樣是個不能忘記的日子&#xff0c;國恥日&#xff0c;勿忘國恥。&#xff08;9.18&#xff09; 服務器安裝好&#xff0c;基本配置配置好后&#xff0c;開始安裝。 一、檢查服務…

VC畫圖用到的主要方法

1。鼠標落下&#xff0c;記錄鼠標的起始位置 void CMyEasyDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息處理程序代碼和/或調用默認值 //graph->m_nTypedlg-> m_bStartDraw true; m_PtPress m_PtLast point; CView::OnLButtonDown…

【最新版】Java學習路線(含B站口碑推薦視頻鏈接)

文章目錄關于如何自學一、計算機網絡二、數據結構與算法三、操作系統四、計算機組成原理五、編譯原理六、設計模式七、MySQL八、實操工具九、JAVA并發與JVM十、Redis十一、Linux十二、Java路線學習尚硅谷黑馬程序員動力節點狂神說十三、Java基礎十四、JavaWeb十五、框架十六、微…