亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 CSS 文件適用于每個 React 組件?

為什么我的 CSS 文件適用于每個 React 組件?

喵喔喔 2022-07-21 22:15:49
背景:我正在制作一個具有登錄組件、注冊組件、應用程序組件、食譜組件和 recipe_tile 組件的食譜應用程序。我有三個 CSS 文件:Registration.CSS、Login.CSS 和 APP.CSS。前兩個 css 文件分別用于注冊和登錄組件。而 APP.CSS 文件用于 app、recipe 和 recipe_tile 組件。問題:問題是某些 CSS 選擇器,如背景(包含背景圖像)顯示在每個組件中,盡管相關的 CSS 文件已導入組件。例如,Registration.CSS 是唯一導入注冊組件的 CSS 文件。我知道一個可能的解決方案是在每個組件中使用內聯樣式,但這可能很乏味且難以閱讀。我可以做任何其他可能的解決方案嗎?注冊.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("https://i.imgur.com/9MDiW6B.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%;}登錄.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("https://i.imgur.com/9MDiW6B.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;}這是完整的源代碼:https ://github.com/SibRaza15/recipe_app/tree/master/src
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

我看到了多種反模式。根據經驗,不要*用于樣式,因為您會遇到像這樣的問題。相反,為該類名中的每個組件和樣式創建一個類名,以保持所有內容分開。我看到您Register.css的目標是整個文檔正文,它應該只是在Register.js組件中設置樣式。


我說的是做類似的事情:


Foo.js


import React from 'react'

import './Foo.css'


const Foo = (props) => {

  return (

    <div className="foo">

      <h4>whatever</h4>

    </div>

   )

}


export default Foo;

Foo.css


.foo {

  ... style here

}


.foo h4 {

  ... style other components or tags inside of foo

}

此外,App.css僅保留絕對全局的樣式,例如字體類型和鏈接顏色等。不要嘗試從那里設置單個組件的樣式。


查看完整回答
反對 回復 2022-07-21
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

我不相信 CSS 可以按照您的想法從基本 HTML 文件中動態加載和卸載。一旦它被加載,它就會被加載到 HTML 中。

對于您的問題,我可以想到兩種解決方案:

  1. 為組件指定類名,以便其他 CSS 選擇器不會干擾。

  2. 在 JS 解決方案中使用 CSS,其中一個組件將有自己的樣式,您不必擔心全局范圍的 CSS 選擇器會干擾。最流行的是styled-components。在 JS 解決方案中切換到 CSS 的最大優勢是您可以將 props 直接傳遞給樣式化組件(即樣式化 div),并具有用于動態樣式的 JavaScript 樣式邏輯。


查看完整回答
反對 回復 2022-07-21
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號