了解css中px、em、rem的區別並使用Flexible實現vue移動端的適配


  本人java菜鳥一名,若有錯誤,還請見諒。

  1、px和em和rem的定義和區別

  px:px像素,是相對單位,相對於屏幕的分辨率而言,也就是說,當屏幕的分辨率不同那么px相同,實際看到的大小也會不同。

    例如:當一台手機的分辨率為1024*768來說,也就是說,這屏幕由縱向的1024個像素點和橫向的768個像素點組成,所以當一個組件的width為200px的時候在這台手機上會占據200個橫向的像素點;那么當同樣大小的手機只有800*600的分辨率,那么該組件在同樣的大小手機中也占據了200個橫向像素點,所以看到的組件大小實際上會比分辨率大的要大。

  em:是相對長度單位,是相對於當前對象內文本的尺寸,但要注意,em會繼承父級元素的字體大小。

    例如:任意瀏覽器的默認字體高度都是16px,所以未經調整的瀏覽器都符合16px = 1em。那么假設當根元素的大小為1.2em,子元素也要為1.2em,那么子元素大小應該設為1em,因為em會繼承父元素的字體大小,若子元素也設計為1.2em那么實際大小會變為1.44em。

    注意:當瀏覽器的默認字體高度改變時,em和px的轉換比例也隨之改變,比如當font-size = 65%的時候,那么實際的轉化率為:16px * 65% = 10px = 1em。

  rem:rem是css3新增的一個相對單位,所有的組件相對於的是html根元素的大小,那么可以做到的是,只修改根元素的大小就可以修改所有元素的大小。

    例如:當根元素的大小為16px的時候,16px = 1rem ,若有組件大小為2.5rem,則其實際的大小為 2.5 * 16 = 40px。若根元素的字體大小改變,所有組件的大小也隨之改變。

  2、使用Flexible實現vue移動端的適配

  lib-Flexible是一個制作h5的開源庫,通過添加這個js文件之后動態的改變mate標簽,從而給html標簽添加data-dpr和font-size兩種屬性並動態改寫他們的值。而當給font-size添加值之后會以這個值做相應的計算,從而達到屏幕適配的效果。

  導入lib-Flexible:

    在index.html中添加相應的路徑  <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>

<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
原文: https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html © w3cplus.com
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
原文: https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html © w3cplus.com

     在main.js中添加相應的引用     import 'lib-flexible/flexible.js';

  3、使用px2rem 插件方便的將px單位轉為rem

  引入Flexible之后可以使用rem來編寫代碼,但是對於已經使用了px來編寫的程序來說又該怎么辦呢。這里我們引入px2rem插件,來自動轉換px單位。

    具體步驟:

      1、下載插件   npm install px2rem-loader lib-flexible --save

      2、在main.js中引入lib-flexible  import 'lib-flexible/flexible.js'

      3、在build下的 utils.js中,找到generateLoaders 方法,添加以下代碼

        const px2remLoader = {
          loader: 'px2rem-loader',
          options: {
          remUnit: 75,
          }
        }

        function generateLoaders (loader, loaderOptions) {
          var loaders = [cssLoader, px2remLoader]
          if (loader) {
          loaders.push({
          loader: loader + '-loader',
          options: Object.assign({}, loaderOptions, {
          sourceMap: options.sourceMap
          })
          })
        }

    使用方法,通過改變remUnit的值來自動按比例轉化為rem。

 

 

  參考文章: https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html

        https://www.cnblogs.com/leejersey/p/3662612.html

        https://blog.csdn.net/qq_33485463/article/details/80454326

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM