为什么反应组件 CSS 覆盖另一个组件的 CSS
Why does react component CSS override CSS for another component
我的应用程序中有两个模块:-
- main module
- admin module
我想为它们保留不同的样式,但是管理模块的 css 覆盖了 main
App.js
import React, {Component} from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
//styles
import './style/bootstrap/bootstrap.scss';
//apps
import Mainapp from './mainapp/Mainapp';
import Admin from './admin/Admin';
const MainappContainer = () => (
<div className="App">
<Mainapp />
</div>
);
const AdminContainer = () => (
<div className="App">
<Admin />
</div>
);
class App extends Component{
render(){
return (
<Router>
<Switch>
<Route exact path="/admin" component={AdminContainer}/>
<Route component={MainappContainer}/>
</Switch>
</Router>
)
}
}
export default App;
Mainapp.js
import React, {Component} from 'react';
import '../style/custom-style.scss';
class Mainapp extends Component{
render(){
return (
<div>
Main App
</div>
)
}
}
export default Mainapp;
Admin.js
import React, {Component} from 'react';
import '../style/admin-styles/admin-style.scss';
class Admin extends Component{
render(){
return (
<div>
Admin App
</div>
)
}
}
export default Admin;
我在 admin-style.scss 上指定的样式甚至应用到主应用程序。
我做错了什么?
我假设您正在使用 Webpack 来捆绑您的应用程序?如果是,现代模块打包器(例如 Webpack)会将您的所有资产(js、css、图像等)打包到一个巨大的文件中(如果未使用高级 Webpack 技术(例如代码拆分))。这就是您看到应用了两种样式的原因。
一个模块的样式覆盖了另一个的样式,这意味着您有 CSS 全局命名冲突,这意味着您有 CSS 个具有相同名称但应用不同样式的选择器。我建议使用 CSS Modules 来避免全局样式冲突。
我的应用程序中有两个模块:-
- main module
- admin module
我想为它们保留不同的样式,但是管理模块的 css 覆盖了 main
App.js
import React, {Component} from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
//styles
import './style/bootstrap/bootstrap.scss';
//apps
import Mainapp from './mainapp/Mainapp';
import Admin from './admin/Admin';
const MainappContainer = () => (
<div className="App">
<Mainapp />
</div>
);
const AdminContainer = () => (
<div className="App">
<Admin />
</div>
);
class App extends Component{
render(){
return (
<Router>
<Switch>
<Route exact path="/admin" component={AdminContainer}/>
<Route component={MainappContainer}/>
</Switch>
</Router>
)
}
}
export default App;
Mainapp.js
import React, {Component} from 'react';
import '../style/custom-style.scss';
class Mainapp extends Component{
render(){
return (
<div>
Main App
</div>
)
}
}
export default Mainapp;
Admin.js
import React, {Component} from 'react';
import '../style/admin-styles/admin-style.scss';
class Admin extends Component{
render(){
return (
<div>
Admin App
</div>
)
}
}
export default Admin;
我在 admin-style.scss 上指定的样式甚至应用到主应用程序。
我做错了什么?
我假设您正在使用 Webpack 来捆绑您的应用程序?如果是,现代模块打包器(例如 Webpack)会将您的所有资产(js、css、图像等)打包到一个巨大的文件中(如果未使用高级 Webpack 技术(例如代码拆分))。这就是您看到应用了两种样式的原因。
一个模块的样式覆盖了另一个的样式,这意味着您有 CSS 全局命名冲突,这意味着您有 CSS 个具有相同名称但应用不同样式的选择器。我建议使用 CSS Modules 来避免全局样式冲突。