babel-plugin-import icon indicating copy to clipboard operation
babel-plugin-import copied to clipboard

怎么控制css的打包顺序,自定义的样式不能覆盖and自带的样式

Open zuiidea opened this issue 7 years ago • 7 comments

如图,我自定义的样式放在一个通用的文件里面,card组件在子组件中被引用,编译后自定义通用样式在前面,不能覆盖原有样式

image

zuiidea avatar Nov 24 '16 15:11 zuiidea

我自己配的webpack, 也遇到了这个问题,请问你解决了吗

Jungley8 avatar Jun 22 '17 06:06 Jungley8

需要提升自定义 css 的优先级。

afc163 avatar Jun 22 '17 06:06 afc163

具体怎么做呢?@afc163 最近用懒加载也遇到这个问题

zsg857981535 avatar Jun 30 '17 02:06 zsg857981535

@zsg857981535 百度搜索就行: "css 优先级", 可以在body中加入你项目的作用域, 比如<body class="xxAPP">, 然后复写的样式用 .xxAPP{/*你自己定义的样式*/}, 上面的样式优先级是0,0,2,0, 提升的方法还有很多. 自己想吧

xiangst0816 avatar Jul 30 '17 01:07 xiangst0816

实例化两个ExtractTextPlugin,生成两个资源文件,一个是common,一个自定义的内容,调整先后顺序

例如: webpack.config.js

const commonExtractCss = new ExtractTextPlugin('common.css')
    , projectExtractCss = new ExtractTextPlugin('app.css')

//...

rules: [
    {
        test: /\.less$/,
        include: [path.resolve(__dirname, './src')],
        use: projectExtractCss.extract([...])
    },
    {
        test: /\.less$/,
        exclude: [path.resolve(__dirname, './src')],
        use: projectExtractCss.extract([...])
    }
]

//...

plugins: [
    commonExtractCss,
    projectExtractCss,
   ...
]

html

    <link rel="stylesheet" href="/dist/common.css">
    <link rel="stylesheet" href="/dist/app.css">

rdshoep avatar Oct 24 '17 10:10 rdshoep

在 js 中导入样式文件,比如:

// ComponentA.jsx
import React from 'react'
import ComponentB from '../component-b'

import './index.css'

webpack 打包之后,js 会动态在 header 中插入 script 标签,上述案例中,因为先 import ComponentB,如果 ComponentB 中也有 css 导入,那么 ComponentB 中的 css 会比 ComponentA 的 css 先加载。

注意问题,react 的入口文件中,如果有 css 导入,要注意先导入的组件的 css 会比入口文件中的 css 先导入。

xie-zhichao avatar Jun 09 '20 13:06 xie-zhichao

同样的问题,我是使用babel-plugin-import按需加载了antd组件库的样式,然后在代码中又使用theme-ui自定义了某些antd组件的样式,然后就会出现这样的问题。

目前没有办法控制babel-plugin-import导入组件css和theme-ui生成css两者的顺序。

只能暂时通过类似下面这样的代码来提升css选择器权重。

<Input.Search
       allowClear
        sx={{
              '&&': {
                  width: 200
              }
        }}
 />

image

正常来讲应该是这样写的,但是权重不够

<Input.Search
       allowClear
        sx={{
             width: 200
        }}
 />

image

eeve avatar Jul 01 '22 03:07 eeve