開啟自定義配置選項
yarn eject
//Are you sure you want to eject? This action is permanent. (y/N)
y
複製程式碼
修改配置
配置使用scss
- 修改
config
資料夾的webpack.config.dev.js
和webpack.config.prod.js
test: /\.css$/ 變成 test: /\.s?css$/
{loader: require.resolve('sass-loader')}
複製程式碼
yarn add node-sass sass-loader -D
複製程式碼
安裝postCss外掛
yarn add postcss-aspect-ratio-mini postcss-px-to-viewport postcss-write-svg postcss-cssnext postcss-viewport-units cssnano -D
複製程式碼
配置postcss
- 在
webpack.config.dev.js
和webpack.config.prod.js
檔案中進行如下修改
// 引入
const postcssAspectRatioMini = require('postcss-aspect-ratio-mini');
const postcssPxToViewport = require('postcss-px-to-viewport');
const postcssWriteSvg = require('postcss-write-svg');
const postcssCssnext = require('postcss-cssnext');
const postcssViewportUnits = require('postcss-viewport-units');
const cssnano = require('cssnano');
// 使用
{
loader: require.resolve('postcss-loader'),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
autoprefixer({
browsers: [
'>1%',
'last 4 versions',
'Firefox ESR',
'not ie < 9', // React doesn't support IE8 anyway
],
flexbox: 'no-2009',
}),
postcssAspectRatioMini({}), // 用來處理元素容器寬高比
postcssWriteSvg({
// 用來處理移動端1px的解決方案
utf8: false,
}),
postcssCssnext({}), // 讓專案使用CSS未來特性 並對其做相容性處理
postcssPxToViewport({
viewportWidth: 375, // 視窗的寬度,對應我們設計稿的寬度,一般是750
viewportHeight: 667, // 視窗的高度,根據750裝置的寬度來指定,一般指定1334,也可以不配置
unitPrecision: 3, // 指定'px'轉換為視窗單位值得小數位數(很多時候無法整除)
viewportUnit: 'vw', // 指定需要轉換成的視窗單位,建議使用vw
selectorBlackList: [
'.ignore',
'.hairliness',
], // 指定不轉換為視窗單位的類,可以自定義,可以無限新增,建議定義一至兩個通用的類名
minPixelValue: 1, // 小於或等於`1px`不轉換為視窗單位,你也可以設定為你想要的值。
mediaQuery: false, // 允許在媒體查詢中轉換`px`
}),
postcssViewportUnits({}), // 給CSS的屬性新增content的屬性 配合viewport-units-buggyfill解決個別手機不支援vw
cssnano({
// 壓縮和清理CSS程式碼
autoprefixer: false,
'postcss-zindex': false,
}),
],
},
},
複製程式碼
VW相容方案