頁面底部顯示不全問題且挖掘出的打包問題分析解決

現象:

1)內容多的頁面,頁面底部內容顯示不全;

2)本地環境刷新兩下變正常,測試環境怎麼刷都還是顯示不全;

分析:

下意識對比開發和測試環境表現差異的css, 發現本地刷新min-height, 會沒有然後頁面正常,後來找到min-height僅在登錄頁的style=less下,其他頁面只要刷新就沒了,因爲每個模塊只會加載自己模塊下css。

解決:

1、導致頁面顯示不全問題(min-height屬性):html, body都用了min-height=700px, 子模塊使用的100%繼承,子模塊內容撐不開外層出現滾動條,因此去掉就好了;

2、本地和測試環境表現不一致,找到min-height是在登錄模塊html, body下,其他模塊只要刷新就會沒了

(公共樣式一定要放在所有頁面都引的文件或公共模塊中)

測試爲什麼怎麼刷都有呢,發現打包配置中dev和prod不一致,prod下有個extract對於css拆分使用了vue-style-loader,
因此可以得知,在處理less-loader, css-loader後進入的vue-style-loader, vue-style-loader將vue文件下的style=less scoped保留在style, 但style=less仍被提取到了app.css打包合併的css中去了,
因此將錯誤的min-height永久的用在了所有頁面導致出問題並表現差異;

<style lang="less">
<style lang="less" scoped>

webpack,本地和測試環境差異:

  1. 本地打包沒有合併less=css到app.css使用,每個模塊都會加載自己的less和scoped放到style;
    每個頁面都有自己的style在組件模塊加載後加載;
    單頁面加載過的頁面模塊style一直在那裏;
    點新的頁面追加;
    刷新當前頁面,只會加載當前頁面的style;
    如果是body什麼的全局放到了某個模塊下,但是一刷新可能就丟了,因此body要放到每個頁面都會加載的公共模塊下面去;

  2. 測試環境:
    合併打包將每個頁面的style lang=less,合併到了app.css中
    style lang=less scoped則在每個頁面自己的style下加載

差異原因:

測試環境打包拆出合併了每個頁面的lang=less到app.css,但開發環境只在login模塊下的less,只要跳到其他頁面刷新後login下style就丟了;
vue-style-loader打包插件,在測試環境打包使用extract的vue-style-loader,過濾了vue下面的style的scoped繼續留在style,其他lang=less繼續拆出打到合併到app.css了;

ExtractTextPlugin.extract({
        use: loaders,
        fallback: 'vue-style-loader'
})

總結:

1)如果有公共樣式應放在每個頁面都能加到的css或模塊裏,放到某個頁面下根本不行,只要到其他頁面一刷新就無效了;

2)因此style=less scoped每個頁面自己用就好了;

3)style=less則用於公共模塊下的樣式,測試環境打包可以合併到app.css中;

4)所以單個業務頁面下不要同時用style=less和style=less scoped,即使用style=less也要加名字不加又可能造成樣式衝突,測試環境且會合併到app.css不是公共的就顯得很多餘了;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章