vue項目中,flexable.js結合muse-ui框架存在的問題

1、前言css

這是在6月份找到工做以來的第一篇博客,前段時間天天都閒的發慌,天天就是接一下小需求而後一天完成,完成後就混幾天,有種混吃等死的生活體驗,可能這就是應屆畢業生都會面臨的問題。過來好幾個月,終於迎來了春天,小組的老大準備帶我參加一個系統的開發,這讓我感到很興奮,畢竟不想一直作個切圖仔。html

2、正言前端

項目是給公司旗下的代理商使用的一款移動端的管理系統,自己系統是存在的,不過是比較老的系統了,並且並無作到先後端分離,我的以爲這樣的系統在維護起來會比較麻煩,前端代碼跟後端代碼混在一塊兒,看的我是頭皮發麻。在vue框架獲得普遍的普及和使用以後,固然咱們也選用了這個框架,因爲是作移動端,爲了節省時間,固然咱們不可能去寫好幾套樣式,因此一開始選用了flexable框架。vue

1.flexable.jsnpm

這是阿里淘寶的前端庫,作到了極好的自適應,全部的px都會幫你轉化成rem。這樣省去了大量的工做。後端

(1)安裝插件前端框架

  npm install lib-flexible --savebabel

(2)在confing文件夾下面的util.js裏面加入app

var px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 75,//設計稿除以10獲得的值
    }
}

//在下面的函數中修改着一句
function generateLoaders(loader, loaderOptions) {
 
const loaders = options.usePostCSS ? [cssLoader, postcssLoader,px2remLoader] : [cssLoader,px2remLoader]

(3)在main.js裏面的頭部中引入js import "lib-flexible"框架

(4)在index.html的頭部中指定meta類型<meta name="viewport" content="width=device-width, initial-scale=1.0">

這樣子基本就可以實現自適應了。

針對與flexable.js的效果我有話要講一下,就是在轉化的爲rem事後,界面看起來的會比設計稿的小。一樣是200px的div,轉成rem後會比原來就是200px的看起來要小。第二就是註解,若是某個元素不想轉化爲rem,那麼就能夠在對應的CSS屬性後面加上/*no */,就能夠了,好比border:1px solid #000; /*no */  ;一樣的咱們可使用/*px*/,這個經常使用於字體大小,能夠生成三套不一樣的像素大小。

2.muse-ui

同時咱們使用谷歌的muse-ui這個前端框架,我的以爲很好看,也用來寫過移動端的聊天室界面,感受仍是挺好的,貼個鏈接。去muse-ui若是要使用這個框架的話上面也有教程。

(1)安裝

npm install muse-ui -S

(2)使用

引入的方式有兩種,一種是全局引入,第二種是按需引入

完整引入的方式
import Vue from 'vue';
import MuseUI from 'muse-ui';
import 'muse-ui/dist/muse-ui.css';

Vue.use(MuseUI);

new Vue({
  el: '#app',
  render (h) {
    return h('mu-button', {}, 'Hello World');
  }
});

  按需引入的話首先須要下載插件

藉助 babel-plugin-import, 咱們能夠只引入須要的組件,以達到減少項目體積的目的。 首先,安裝 babel-plugin-import, less-loader:

npm i babel-plugin-import less less-loader -D

而後,將 .babelrc 修改成:

{
  "plugins": [
    ["import", {
      "libraryName": "muse-ui",
      "libraryDirectory": "lib",
      "camel2DashComponentName": false
    }]
  ]
}

 在mian.js裏面添加你想要使用組件

import Vue from 'vue';
import 'muse-ui/lib/styles/base.less';
import { Button, Select } from 'muse-ui';
import 'muse-ui/lib/styles/theme.less';

Vue.use(Button);
Vue.use(Select);
import Vue from 'vue';
import 'muse-ui/lib/styles/base.less';
import { Button, Select } from 'muse-ui';
import 'muse-ui/lib/styles/theme.less';

Vue.use(Button);
Vue.use(Select);

 3. 存在的問題

muse-ui自己做爲一款適配移動端的UI框架,自己是作了自適應的,在引入flexible.js 後。強行轉化框架的像素,致使組件變形,樣式發生改變,變得很醜,最好的辦法就是不使用flexible.js。而是經過腳原本控制。

 

<script>
      (function(doc, win) {
        var docEl = doc.documentElement,
          resizeEvt =
            "orientationchange" in window ? "orientationchange" : "resize",
          recalc = function() {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            if (clientWidth >= 640) {
              docEl.style.fontSize = "100px";
            } else {
              docEl.style.fontSize = 100 * (clientWidth / 640) + "px";
            }
          };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener("DOMContentLoaded", recalc, false);
      })(document, window);
    </script>

 

 相似的代碼在網上不少。本身百度一下也有一堆。經過rem這種像素單位,能夠再不一樣的手機上縮放,不會由於不用手機像素的不一樣使得樣式亂掉,也省去了寫多幾套樣式的時間,一套要是頂幾套。

前端道路長且阻,遇坑則填!

相關文章
相關標籤/搜索