(1)全局樣式衝突
webpack進行打包時,將全部js文件導入到入口App.js文件中,樣式也會統一加載到入口中,根據css的layout規則,後面的樣式會覆蓋掉前面的樣式聲明,形成全局樣式的覆蓋問題。
(2)嵌套層次過深的選擇器
爲了解決全局樣式的衝突問題,不得不引入一些特意命名namespace來區分,可是每每有些namespace命名得不夠清晰,就會形成要想下一個樣式不會覆蓋,就要再加一個新的命名空間來進行區分,最終可能一個元素的顯示樣式嵌套特別深。css
嵌套特別深會形成的問題: - 根據CSS選擇器的解析規則能夠知道,層級越深,比較的次數也就越多,影響整個頁面的渲染 - 增長了沒必要要的字節開銷 - 語義混亂 可擴展性很差,約束越多,擴展性越差
(1)css預處理器(less/sass) 支持模塊引入webpack
存在問題:不能解決全局樣式衝突問題
(2)BEM(Block Element Modifier)解決命名衝突以及更好的語義化web
Block:邏輯和頁面功能都獨立的頁面組件,是一個可複用單元,特色以下:sass
(1)什麼是css modulesless
經過構建工具來使指定class達到scope的過程
(2)css modules優點模塊化