衆所周知,在weex開發中,CSS的書寫一直是一個痛點。主要表現以下:javascript
margin: 10px 0
,必須要分開寫上下左右四個方向的margin
;750px
自動縮放,而web頁面不會,形成視覺效果不一致;對於問題1,受限於weex底層的實現,目前並無辦法可以解決。css
對於問題2,只須要分開寫便可,可是分開寫多多少少會有些不便,同時由於前端開發人員一般都已經習慣了簡寫的方式,很容易忘記分開寫。若是有一個工具可以對寫好的CSS作自動轉換,那麼問題就解決了。html
對於問題3,能夠聯想到weex中的佈局方案其實與手淘的flexible
佈局方案一模一樣,所以只須要一個工具實現同等轉換,將CSS中的px
轉成rem
便可。前端
對於問題4,weex支持一個未在文檔中說起的單位wx
,使用wx
單位的尺寸不會進行縮放,可是須要一個工具對web頁面進行等同處理,不然仍是沒法達到一致。vue
由上可知,其實只須要對CSS做一些轉換,就能夠完美解決問題二、三、4。而最簡單地實現方式,就是基於postcss
去製做插件。由於postcss
除了將CSS文件抽象成AST
,還提供了對AST
的遍歷,咱們只須要傳入一個回調函數來對接收的內容做簡單的處理便可。同時postcss
還提供了一些實用的API
來操做AST
,因而基於postcss
的插件postcss-weex便應運而生了。java
所以,你只須要在你的webpack
配置文件中添加postcss-weex的相關配置便可。webpack
對於webgit
var prefixer = require('autoprefixer'); var weexCSS = require('postcss-weex'); { test: /\.vue(\?[^?]+)?$/, loader: `vue-loader`, options: { /** * important! should use postTransformNode to add $processStyle for * inline style normalization. */ compilerModules: [ { postTransformNode: el => { el.staticStyle = `$processStyle(${el.staticStyle})`; el.styleBinding = `$processStyle(${el.styleBinding})`; } } ], postcss: [ weexCSS({env: 'web'}), prefixer({ browsers: ['last 20 versions'] }) ] } }
對於weexgithub
var weexCSS = require('postcss-weex'); { test: /\.vue(\?[^?]+)?$/, loader: `weex-loader`, options: { postcss: [ weexCSS({env: 'weex'}) ] } }
最後,爲了正確生成meta
,你還須要在html
模板中引入flexible。web