为什么我的CSS文件应用于每个React组件?

背景:

我正在制作具有登录组件,注册组件,应用程序组件,食谱组件和recipe_tile组件的食谱应用。

我有三个CSS文件:Registration.CSS,Login.CSS和APP.CSS。前两个css文件分别用于注册和登录组件。而APP.CSS文件用于app,recipe和recipe_tile组件。

问题:

问题是,尽管相关的CSS文件已导入到组件中,但某些CSS选择器(如背景(包含背景图像)仍会为每个组件显示)。例如,Registration.CSS是导入到注册组件中的唯一CSS文件。

我知道一种可能的解决方案是在每个组件中使用内联样式,但这可能很乏味且难以阅读。我还有其他可能的解决方法吗?

Registration.CSS文件:

*{
    margin: 0
}
body{
    font-family: "Open Sans", sans-serif;
    top: 0;
    left: 0;
    background: 
    linear-gradient(
        rgba(0, 0, 0, 0.45), 
        rgba(0, 0, 0, 0.45)
      ),
    url(".jpg") 70% fixed;
  background-size: cover;
}

.box{
    color:#26a69a;
    display: flex;
    align-items: center;
    flex-direction: column; 
    justify-content: center;
    width: 40%;
    height: 600px;
    padding: 100px;
    background: #ffffff;
    margin-left: 30%;
    margin-top: 5%;
}

Login.CSS文件:


.wrap{
    font-family: "Open Sans", sans-serif;
    top: 0;
    left:0;
    background: 
    linear-gradient(
        rgba(0, 0, 0, 0.45), 
        rgba(0, 0, 0, 0.45)
      ),
    url(".jpg") 70% fixed;
  background-size: cover;
}

.wrap{
    color:#26a69a;
    display: flex;
    align-items: center;
    flex-direction: column; 
    justify-content: center;
    width: 40%;
    height: 400px;
    padding: 100px;
    background: #ffffff;
    margin-left: 30%;
    margin-top: 5%;
}

APP.CSS文件:

*{
  margin-left: 15px;
}
h1{
  color:#26a69a
}
.inputs{
  margin-left: 400px;
}
.recipe-input{
  width: 50%;
}
.button-input{
  margin-top: 30px
}
.card{
  display: inline-block;
  margin: 2px 100px 60px 2px;
  text-align: center;
  width: 25%;
  height: 460px; 
}
.card-image{
  display: block;
  margin-left: -15px;

  width: 105%;
  height: 250px;
}
.card-reveal{
  text-align: left;
}

这里是完整的源代码:

回答如下:

我不相信CSS可以按照您的想法从基本HTML文件动态加载和卸载。加载后,将其加载到HTML中。

我可以想到两种解决您的问题的方法:

  1. 为组件提供类名,以免其他CSS选择器干扰。

  2. 使用JS解决方案中的CSS,其中一个组件将具有其自己的样式,您不必担心全局范围的CSS选择器会产生干扰。最受欢迎的是styled-components。在JS解决方案中切换到CSS的最大优势是,您可以将道具直接传递给样式化的组件(即样式化的div),并具有用于动态样式化的JavaScript样式逻辑。

为什么我的CSS文件应用于每个React组件?

背景:

我正在制作具有登录组件,注册组件,应用程序组件,食谱组件和recipe_tile组件的食谱应用。

我有三个CSS文件:Registration.CSS,Login.CSS和APP.CSS。前两个css文件分别用于注册和登录组件。而APP.CSS文件用于app,recipe和recipe_tile组件。

问题:

问题是,尽管相关的CSS文件已导入到组件中,但某些CSS选择器(如背景(包含背景图像)仍会为每个组件显示)。例如,Registration.CSS是导入到注册组件中的唯一CSS文件。

我知道一种可能的解决方案是在每个组件中使用内联样式,但这可能很乏味且难以阅读。我还有其他可能的解决方法吗?

Registration.CSS文件:

*{
    margin: 0
}
body{
    font-family: "Open Sans", sans-serif;
    top: 0;
    left: 0;
    background: 
    linear-gradient(
        rgba(0, 0, 0, 0.45), 
        rgba(0, 0, 0, 0.45)
      ),
    url(".jpg") 70% fixed;
  background-size: cover;
}

.box{
    color:#26a69a;
    display: flex;
    align-items: center;
    flex-direction: column; 
    justify-content: center;
    width: 40%;
    height: 600px;
    padding: 100px;
    background: #ffffff;
    margin-left: 30%;
    margin-top: 5%;
}

Login.CSS文件:


.wrap{
    font-family: "Open Sans", sans-serif;
    top: 0;
    left:0;
    background: 
    linear-gradient(
        rgba(0, 0, 0, 0.45), 
        rgba(0, 0, 0, 0.45)
      ),
    url(".jpg") 70% fixed;
  background-size: cover;
}

.wrap{
    color:#26a69a;
    display: flex;
    align-items: center;
    flex-direction: column; 
    justify-content: center;
    width: 40%;
    height: 400px;
    padding: 100px;
    background: #ffffff;
    margin-left: 30%;
    margin-top: 5%;
}

APP.CSS文件:

*{
  margin-left: 15px;
}
h1{
  color:#26a69a
}
.inputs{
  margin-left: 400px;
}
.recipe-input{
  width: 50%;
}
.button-input{
  margin-top: 30px
}
.card{
  display: inline-block;
  margin: 2px 100px 60px 2px;
  text-align: center;
  width: 25%;
  height: 460px; 
}
.card-image{
  display: block;
  margin-left: -15px;

  width: 105%;
  height: 250px;
}
.card-reveal{
  text-align: left;
}

这里是完整的源代码:

回答如下:

我不相信CSS可以按照您的想法从基本HTML文件动态加载和卸载。加载后,将其加载到HTML中。

我可以想到两种解决您的问题的方法:

  1. 为组件提供类名,以免其他CSS选择器干扰。

  2. 使用JS解决方案中的CSS,其中一个组件将具有其自己的样式,您不必担心全局范围的CSS选择器会产生干扰。最受欢迎的是styled-components。在JS解决方案中切换到CSS的最大优势是,您可以将道具直接传递给样式化的组件(即样式化的div),并具有用于动态样式化的JavaScript样式逻辑。