數據大屏響應式布局,主要用到rem,涉及一個rem.js文件,需要安裝一個依賴 postcss-px2rem ,此外還用到vw、vh 、百分比相對單位來設置布局寬度。
1、什么是rem?摘自菜鳥教程
rem是CSS3新增的一個相對單位(root em,根em),這個單位與em有什么區別呢?區別在於使用rem為元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優點於一身,通過它既可以做到只修改根元素就成比例地調整所有字體大小,又可以避免字體大小逐層復合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。
2、postcss-px2rem 的作用是把css文件中的px自動轉為rem
寫css樣式時,寫固定的px,通過該插件將自動轉換px為rem。比如設置頭部高度為80px,在瀏覽器中查看 按f12,會看到對應的css變為了5.714286rem,此時根節點的font-size: 11.6375px;,計算出頭部高度為 11.6375 *5.714286=66.5px
3、rem.js文件如下:
1 const baseSize = 14 2 // 設置 rem 函數 3 const setRem=()=> { 4 // 當前頁面寬度相對於 1920寬的縮放比例,可根據自己需要修改。 5 const scale = document.documentElement.clientWidth / 1920 6 // 設置頁面根節點字體大小(“Math.min(scale, 2)” 指最高放大比例為2,可根據實際業務需求調整) 7 console.log(scale); 8 if(scale>=0.46){ 9 document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px' //根據比例計算根節點的font-size大小 10 }else{ 11 document.documentElement.style.fontSize = '6.5px' 12 } 13 14 15 } 16 // 初始化 17 setRem() 18 // 改變窗口大小時重新設置 rem 19 window.onresize = function() { 20 setRem() 21 }
在入口文件main.js中引入rem.js
當改變窗口時,根據當前窗口寬度重新計算根節點的fontsize
頁面中rem的值對應也將重新計算。
4、使用相對單位來設置布局寬度
比如vw,vh (代表窗口的寬和高)
設置100vw 相當於設置百分百窗口寬,10vw相當於設置10%的窗口寬
比如百分比來定義寬高,100% 30%
最外層的div寬高設定好后,內部的div用百分比來定義,相對於外層,多高。
如下所示,
大屏左中右三個div設置樣式如下: 用百分比設置寬度,當調整窗口寬度的時候,div的寬自動變了。
1 #centerBox{ 2 width:48%; 3 height: calc(100% - 100px); 4 min-height: 400px;/*no*/ 5 position: absolute; 6 z-index: 9999; 7 left:26%; 8 top: 100px; 9 }
10 #centerBottomBox{ 11 width: 100%; 12 height: calc(40% - 60px) 13 } 14 19 #rightBox{ 20 width:24%; 21 height: calc(100% - 100px); 22 min-height: 400px;/*no*/ 23 position: absolute; 24 z-index: 9999; 25 right:10px; 26 top: 100px; 27 } 28 #leftBox{ 29 width:24%; 30 height: calc(100% - 100px); 31 position: absolute; 32 min-height: 400px;/*no*/ 33 z-index: 9999; 34 left:10px; 35 top: 100px; 36 }