移動端基于視窗適配解決方案 postcss-px-to-viewport 配置及說明

postcss-px-to-viewport

將px單位轉(zhuǎn)換為視口單位的 (vw, vh, vmin, vmax) 的 PostCSS 插件.

簡介

如果你的樣式需要做根據(jù)視口大小來調(diào)整寬度理盆,這個腳本可以將你CSS中的px單位轉(zhuǎn)化為vw肌厨,1vw等于1/100視口寬度旗扑。

輸入
.class {
 margin: -10px .5vh;
 padding: 5vmin 9.5px 1px;
 border: 3px solid black;
 border-bottom-width: 1px;
 font-size: 14px;
 line-height: 20px;
}

.class2 {
 padding-top: 10px; /* px-to-viewport-ignore */
 /* px-to-viewport-ignore-next */
 padding-bottom: 10px;
 /* Any other comment */
 border: 1px solid black;
 margin-bottom: 1px;
 font-size: 20px;
 line-height: 30px;
}

@media (min-width: 750px) {
 .class3 {
   font-size: 16px;
   line-height: 22px;
 }
}
輸出
.class {
  margin: -3.125vw .5vh;
  padding: 5vmin 2.96875vw 1px;
  border: 0.9375vw solid black;
  border-bottom-width: 1px;
  font-size: 4.375vw;
  line-height: 6.25vw;
}

.class2 {
  padding-top: 10px;
  padding-bottom: 10px;
  /* Any other comment */
  border: 1px solid black;
  margin-bottom: 1px;
  font-size: 6.25vw;
  line-height: 9.375vw;
}

@media (min-width: 750px) {
  .class3 {
    font-size: 16px;
    line-height: 22px;
  }
}
安裝
// npm
$ npm install postcss-px-to-viewport --save-dev
// yarn
$ yarn add -D postcss-px-to-viewport
參數(shù)配置vue-cli2.0
// https://github.com/michael-ciniawsky/postcss-load-config
// .postcssrc.js
module.exports = {
  'plugins': {
    'postcss-import': {},
    'postcss-url': {},
    // to edit target browsers: use "browserslist" field in package.json
    'autoprefixer': {},
    'postcss-px-to-viewport': {
      unitToConvert: 'px', // 要轉(zhuǎn)化的單位
      viewportWidth: 750, // UI設(shè)計稿的寬度
      unitPrecision: 6, // 轉(zhuǎn)換后的精度,即小數(shù)點位數(shù)
      propList: ['*'], // 指定轉(zhuǎn)換的css屬性的單位,*代表全部css屬性的單位都進行轉(zhuǎn)換
      viewportUnit: 'vw', // 指定需要轉(zhuǎn)換成的視窗單位稼虎,默認vw
      fontViewportUnit: 'vw', // 指定字體需要轉(zhuǎn)換成的視窗單位,默認vw
      selectorBlackList: ['wrap'], // 指定不轉(zhuǎn)換為視窗單位的類名骤公,
      minPixelValue: 1, // 默認值1像捶,小于或等于1px則不進行轉(zhuǎn)換
      mediaQuery: false, // 是否在媒體查詢的css代碼中也進行轉(zhuǎn)換上陕,默認false
      replace: true, // 是否轉(zhuǎn)換后直接更換屬性值
      exclude: [/node_modules/], // 設(shè)置忽略文件,用正則做目錄名匹配
      landscape: true, // 是否處理橫屏情況
      landscapeUnit: 'vw', // (String) 橫屏時使用的單位
      landscapeWidth: '1334' // (Number) 橫屏時使用的視口寬度
    }
  }
};

參數(shù)配置vue-cli3.0-4.0
// vue.config.js
module.exports = {
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-px-to-viewport')({
                        unitToConvert: 'px',  // 需要轉(zhuǎn)換的單位拓春,默認為"px"
                        viewportWidth: 750, //  設(shè)計稿的視口寬度
                        unitPrecision: 5, // 單位轉(zhuǎn)換后保留的精度
                        propList: ['*'], // 能轉(zhuǎn)化為vw的屬性列表
                        viewportUnit: 'vw', //  希望使用的視口單位
                        fontViewportUnit: 'vw', // 字體使用的視口單位
                        selectorBlackList: [], // 需要忽略的CSS選擇器
                        minPixelValue: 1, // 最小的轉(zhuǎn)換數(shù)值释簿,如果為1的話,只有大于1的值會被轉(zhuǎn)換
                        mediaQuery: false, // 媒體查詢里的單位是否需要轉(zhuǎn)換單位
                        replace: true, // 是否直接更換屬性值硼莽,而不添加備用屬性
                        exclude: /node_modules/, // 忽略某些文件夾下的文件或特定文件
                        include: undefined,  // 如果設(shè)置了include庶溶,那將只有匹配到的文件才會被轉(zhuǎn)換,例如只轉(zhuǎn)換 'src/mobile' 下的文件 (include: /\/src\/mobile\//)
                        landscape: false, // 是否添加根據(jù) landscapeWidth 生成的媒體查詢條件 @media (orientation: landscape)
                        landscapeUnit: 'vw', // 橫屏時使用的單位
                        landscapeWidth: 568 // 橫屏時使用的視口寬度
                    })
                ]
            }
        }
    }
}

參數(shù)說明

1懂鸵、unitToConvert (String) 需要轉(zhuǎn)換的單位偏螺,默認為"px"
2、viewportWidth (Number) 設(shè)計稿的視口寬度
3矾瑰、unitPrecision (Number) 單位轉(zhuǎn)換后保留的精度
4砖茸、propList (Array) 能轉(zhuǎn)化為vw的屬性列表傳入特定的CSS屬性;可以傳入通配符""去匹配所有屬性殴穴,例如:['']凉夯; 在屬性的前或后添加"",可以匹配特定的屬性. (例如['position'] 會匹配 background-position-y) 在特定屬性前加 "!"货葬,將不轉(zhuǎn)換該屬性的單位 . 例如: ['', '!letter-spacing'],將不轉(zhuǎn)換letter-spacing "!" 和 ""可以組合使用劲够, 例如: ['', '!font*']震桶,將不轉(zhuǎn)換font-size以及font-weight等屬性
5、viewportUnit (String) 希望使用的視口單位
6征绎、fontViewportUnit (String) 字體使用的視口單位 selectorBlackList (Array) 需要忽略的CSS選擇器蹲姐,不會轉(zhuǎn)為視口單位,使用原有的px等單位人柿。 如果傳入的值為字符串的話柴墩,只要選擇器中含有傳入值就會被匹配 例如 selectorBlackList 為 ['body'] 的話, 那么 .body-class 就會被忽略 如果傳入的值為正則表達式的話凫岖,那么就會依據(jù)CSS選擇器是否匹配該正則 例如 selectorBlackList 為 [/^body$/] , 那么 body 會被忽略江咳,而 .body 不會
7、minPixelValue (Number) 設(shè)置最小的轉(zhuǎn)換數(shù)值哥放,如果為1的話歼指,只有大于1的值會被轉(zhuǎn)換
8、mediaQuery (Boolean) 媒體查詢里的單位是否需要轉(zhuǎn)換單位
9甥雕、replace (Boolean) 是否直接更換屬性值踩身,而不添加備用屬性
10、exclude (Array or Regexp) 忽略某些文件夾下的文件或特定文件社露,例如 'node_modules' 下的文件
如果值是一個正則表達式挟阻,那么匹配這個正則的文件會被忽略 如果傳入的值是一個數(shù)組,那么數(shù)組里的值必須為正則
11呵哨、include (Array or Regexp) 如果設(shè)置了include赁濒,那將只有匹配到的文件才會被轉(zhuǎn)換,例如只轉(zhuǎn)換 'src/mobile' 下的文件 (include: //src/mobile//) 如果值是一個正則表達式孟害,將包含匹配的文件拒炎,否則將排除該文件 如果傳入的值是一個數(shù)組,那么數(shù)組里的值必須為正則
12挨务、landscape (Boolean) 是否添加根據(jù) landscapeWidth 生成的媒體查詢條件 @media (orientation: landscape)
13击你、landscapeUnit (String) 橫屏時使用的單位
14、landscapeWidth (Number) 橫屏時使用的視口寬度

exclude和include是可以一起設(shè)置的谎柄,將取兩者規(guī)則的交集丁侄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朝巫,隨后出現(xiàn)的幾起案子鸿摇,更是在濱河造成了極大的恐慌,老刑警劉巖劈猿,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拙吉,死亡現(xiàn)場離奇詭異潮孽,居然都是意外死亡,警方通過查閱死者的電腦和手機筷黔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門往史,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佛舱,你說我怎么就攤上這事椎例。” “怎么了请祖?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵订歪,是天一觀的道長。 經(jīng)常有香客問我肆捕,道長陌粹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任福压,我火速辦了婚禮,結(jié)果婚禮上或舞,老公的妹妹穿的比我還像新娘荆姆。我一直安慰自己,他們只是感情好映凳,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布胆筒。 她就那樣靜靜地躺著,像睡著了一般诈豌。 火紅的嫁衣襯著肌膚如雪仆救。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天矫渔,我揣著相機與錄音彤蔽,去河邊找鬼。 笑死庙洼,一個胖子當著我的面吹牛顿痪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播油够,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蚁袭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了石咬?” 一聲冷哼從身側(cè)響起揩悄,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鬼悠,沒想到半個月后删性,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亏娜,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年镇匀,在試婚紗的時候發(fā)現(xiàn)自己被綠了照藻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡汗侵,死狀恐怖幸缕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晰韵,我是刑警寧澤发乔,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站雪猪,受9級特大地震影響栏尚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜只恨,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一译仗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧官觅,春花似錦纵菌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至功氨,卻和暖如春序苏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捷凄。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工忱详, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跺涤。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓踱阿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钦铁。 傳聞我的和親對象是個殘疾皇子软舌,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351