如何在 React 中的背景图像上设置线性渐变?

How do I set a linear gradient over a background image in React?

我已经尝试了一个多小时,这是我唯一能想到的。我用 CRA 构建了应用程序,所以我必须将图像保存在 img 文件夹中。我是 React 的新手,有些我不知道该怎么做/

    import NavBar from "./NavBar";
    // import SocialMedia from "../socialmedia/SocialMedia";
    import classes from './MainView.module.css';
    import background from '../../img/pic2.jpg';
    
    
    
    function MainView() {
        const style = {
            backgroundImage: `linear-gradient( rgba(8, 8, 37, 0.85), rgba(0, 15, 80, 0.675)), url("${background}")`
        };
    
        return (
            <>
                <NavBar />
                <section style={{ style }}
                    className={classes.top}>
                    <div>
                        <p>My Name</p>
                        <p>Full Stack Web Developer</p>
                    </div>
                </section>
                {/* <SocialMedia /> */}
            </>
        )
    }
    
    export default MainView;






@import url('https://fonts.googleapis.com/css2?family=Montserrat&family=Trispace&display=swap');

.top {
    background-repeat: no-repeat;
    background-position: center bottom;
    background-size: cover;
    width: 100%;
    height: 100%;
    height: 100vh;
    font-family: 'Montserrat', sans-serif;
}

据我所知,代码大部分 正确。我看到的一个问题是你如何 pass/set style 道具。您正在传递一个带有 style 属性 的对象,其中 CSS 规则嵌套得更深。

<section
  style={{ style }} // <-- style properties nested too deeply!
  className={classes.top}
>
  ...
</section>

这导致 style 看起来更像这样的道具:

{
  style: {
    backgroundImage: `linear-gradient( rgba(8, 8, 37, 0.85), rgba(0, 15, 80, 0.675)), url("${background}")`,
  }
}

当你只想:

{
  backgroundImage: `linear-gradient( rgba(8, 8, 37, 0.85), rgba(0, 15, 80, 0.675)), url("${background}")`
}

解决方案是只传递 style 作为 prop 值:

style={style}

或将 style 对象散布到 style 属性中:

style={{ ...style }}

我建议前者。

完整示例:

import NavBar from "./NavBar";
// import SocialMedia from "../socialmedia/SocialMedia";
import classes from './MainView.module.css';
import background from '../../img/pic2.jpg';

function MainView() {
  const style = {
    backgroundImage: `linear-gradient( rgba(8, 8, 37, 0.85), rgba(0, 15, 80, 0.675)), url("${background}")`
  };

  return (
    <>
      <NavBar />
      <section
        style={style} // <-- pass the style object directly
        className={classes.top}
      >
        <div>
          <p>My Name</p>
          <p>Full Stack Web Developer</p>
        </div>
      </section>
      {/* <SocialMedia /> */}
    </>
  )
}

export default MainView;