React-responsive-modal:打开模态时更改背景颜色

React-responsive-modal: Change background-color when modal is open

我用react-responsive-modal 在我的 React 应用程序中打开一些模式。当我打开模态时,有一种叠加效果使模态后面的背景变暗。有什么方法可以使背景变暗 100% 或为背景设置任何颜色,这样我就看不到模态打开之前的内容,直到我再次关闭模态?

我在我的 MainComponent 中为模式 ModalComponent 创建了一个新组件,当我点击一个按钮时它会被渲染:

ModalComponent:

render() {
 return (
  <div className="childDiv">
    <Modal
      open={open}
      onClose={this.onCloseModal}
      center
      classNames={{
        transitionEnter: styles.transitionEnter,
        transitionEnterActive: styles.transitionEnterActive,
        transitionExit: styles.transitionExitActive,
        transitionExitActive: styles.transitionExitActive
      }}
      animationDuration={1000}
    >
   ...

主要组件:

<div>
    <div className="outter" onClick={this.openModal.bind(this)}>
//Open Modal when clicking on this div
      <p className="arrival">Ankunft am Ziel: ~ {this.props.arrival} Uhr</p>
      <p className="price">max. {this.props.price} €</p>
      {this.state.open && (
        <BookingModalNew
          open={this.state.open}
          triggerCloseModal={this.closeModal.bind(this)}
          destination={this.props.destination}
          arrival={this.props.arrival}
          price={this.props.price}
        />
      )}
//Whole Stuff should not be visible while Modal is opened

只需将具有 overlay 样式的对象分配给渲染中的变量,例如 bg,然后只需使用 styles 属性在模态中引用该对象像这样:

render() {

 const bg = {
   overlay: {
     background: "#FFFF00"
   }
 };

 return (
  <div className="childDiv">
    <Modal open={open} onClose={this.onCloseModal} center styles={bg} }}>
        <p>Your Modal Content</p>
    </Modal>
  </div>
 )

}


等等。当我们可以直接编写样式而不是像这样时,为什么要创建一个额外的对象:

<Modal open={open} onClose={this.onCloseModal} center styles={background: "#FFFF00"}>
    <p>Your Modal Content</p>
</Modal>

即使上面的方法看起来和我的代码做同样的事情,但上面的方法不会起作用,这是因为你不能直接在 react-responsive-modal 上指定内联样式。您需要先将样式放置在对象中,然后将 styles 属性引用到该对象。


然而,您可以通过这样做在 styles 道具本身中创建对象:

<Modal open={open} onClose={this.onCloseModal} center styles={{ overlay: { background: "#FFFF00" } }}>
    <p>Your Modal Content</p>
</Modal>

但建议你在外面定义对象,然后在 styles prop 内部引用它,如上所示。

您需要定位并覆盖 overlay class,例如

<Modal style={{ overlay: { background: 'black' } }} />

另一种方法是shown in the docs,例如

<Modal classNames={{ overlay: { background: 'black' } }} />

可以通过Modal的styles属性改变overlay的CSS

<Modal animationDuration={1000} styles={{ modal: {}, overlay: { background: "#ccc" } }} closeIconSize={16} open={modalOpen} onClose={this.onCloseModal} center > 
    Your Code Here...
</Modal>

Please see the full documentation of react-responsive-modal here