我正在开发一个Reaction应用程序,并且面临着一个关于CSS呈现的问题.我的应用程序包括两个主要组件<Product /><MainPage />,每个组件都引用它们自己的CSS文件(分别为product.cssmain.css).然而,我遇到了一个问题,这两个CSS文件都是全局应用的,这导致了两个页面之间的样式冲突.

以下是My App组件的简化版本:

import React from 'react';
import ReactDOM from 'react-dom/client';
import Header from './header.js';
import { useState } from "react";
import Product from './product.js';
import MainPage from './main.js';

function App() {
    const [selectedProduct, setSelectedProduct] = useState(null);

    return (
        <div>
            <Header />
            {selectedProduct ? <Product product={selectedProduct} /> : <MainPage onSelectProduct={setSelectedProduct} />}
        </div>
    );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);

每个组件(<Product /><MainPage />)在其各自的JS文件的顶部导入其CSS文件.我试图确保只在呈现组件时应用main.css,并且仅在呈现组件时应用duct.css.我如何实现这种隔离,以便每个页面只使用其各自的CSS,而不影响其他页面?

我曾考虑使用css模块,但我正在寻找一种不同的方法.如能就如何解决这一问题提供任何意见或建议,我们将不胜感激.

推荐答案

你应该亲吻(保持甜蜜和简单)-

Css冲突是痛苦的,所以为了避免这种冲突,您应该确保只将您的css文件导入到如下所示的特定组件中-

主页组件-

   import './main.css';
   function MainPage(){...}

产品组件-

   import './product.css';
   function Product(){...}

根据CSS文件所在的位置,您的导入位置可能会有所不同. 另一种避免冲突的方法是在每个组件上使用唯一的容器名称,并以嵌套格式应用CSS,如下所示

    //MainPage
    <div className="main-container">
      <div className="your-class-name"></div>
    </div>
    //ProductPage
    <div className="product-container">
      <div className="your-class-name"></div>
    </div>

这样,即使容器标签下的子标签具有相同的名称,您也可以创建单个CSS文件并将其导入到App()组件中,而不会发生冲突. App.css-

.main-container > your-class-name{
    background-color: "blue"
}

.product-container > your-class-name{
    background-color: "green"
}

App.js-

import './App.css';
function App() {

Css相关问答推荐

如何在 CSS 中使 Flex 容器内的网格响应,而不 destruct 外部 Flex 容器的布局?

具有水平和垂直滚动的表格上的活动 scss 类

从 React MUI 自定义不同组件的正确方法?

当父元素处于子元素 input 的焦点状态时更改父元素的样式

在不使用 position: fixed 的情况下从 CSS 网格中的自动布局中免除子元素?

CSS 仅过渡背景 colored颜色

整个列的 CSS Grid Margin Top

Tailwind:如何设置网格的自动填充?

为什么 em 不将定义的字体大小加倍?

有没有办法让 mui v5 呈现没有 css-xxx 前缀的类名?

创建一条淡出/在各个方向变得透明的线

我怎样才能在某些区域制作一个单独的文本行,而在其他区域制作一个实心填充?

css3比例周围的空白

如何更改下拉列表的宽度?

包装器内两个跨度之一上的文本溢出省略号

滚动到该 div 后如何使 div 固定?

在 css 中使用 FontAwesome 或 Glyphicons :before

最大宽度与最小宽度

表格溢出时水平滚动

CSS中伪元素前的&是什么意思?