【问题标题】:Material-ui drawer width issueMaterial-ui 抽屉宽度问题
【发布时间】:2018-10-10 10:51:46
【问题描述】:

我遇到了 material-ui 抽屉的问题。我更改了导致问题的抽屉容器的宽度。抽屉在页面内保持一点并且可见,但我不想在我没有点击按钮时让它在页面上可见。现在可能是 transform 属性有问题。

所以我将其更改为 transform: translate(350px, 0px) 但随后我遇到了另一个问题,即如果我单击按钮抽屉未显示。 这件事有什么帮助吗??

我得到了解决方案并编辑了代码。

我在这里创建了一个演示 => Have a look

还分享了以下代码:

index.js

import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';
import Drawer from 'material-ui/Drawer';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';

class App extends Component {
  constructor() {
    super();
    this.state = {
      openDrawer: false
    };
  }

  toggleDrawer() {
    this.setState({
      openDrawer: !this.state.openDrawer
    });
  }

  render() {
    return (
      <MuiThemeProvider>
      <div>
        <button onClick={this.toggleDrawer.bind(this)}> Toggle Drawer</button>
        <Drawer 
                  open={this.state.openDrawer}
                  containerClassName={!this.state.openDrawer? "hide-drawer": "show-drawer" }
                  openSecondary={true}
                  docked={true} 
                >
                    <div className="drawer-title-div">
                        <h4 className="drawer-title-text">It's my drawer</h4>
                    </div>
                </Drawer>
      </div>
      </MuiThemeProvider>
    );
  }
}

render(<App />, document.getElementById('root'));

style.css

h1, p {


font-family: Lato;
}

.show-drawer {
  top: 47px !important;
  text-align: left !important;
  width: 80% !important;
  transform: translate(0%, 0px) !important;
}

.hide-drawer {
  top: 47px !important;
  text-align: left !important;
  width: 80% !important;
  transform: translate(100%, 0px) !important;
}

/* .drawer-side-drawer:focus {
  top: 47px !important;
  text-align: left !important;
  width: 350px !important;
  transform: translate(0px, 0px) !important;
} */

.drawer-title-div {
  display: inline-block;
  width: 100%;
  background: #F2F8FB;
  box-shadow: 0 1px 3px 0 rgba(0,0,0,0.24);
}

.drawer-title-text {
  display: inline-block;
  margin-left: 16px;
  margin-top: 16px;
  margin-bottom: 16px;
  color: #484848;
  font-family: Muli;
  font-size: 16px;
  font-weight: 600;
}

【问题讨论】:

    标签: javascript css reactjs material-ui react-component


    【解决方案1】:

    对于 mui 版本 5,您必须像这样使用 PaperProps 道具:

            <Drawer
              PaperProps={{
                sx: { width: "90%" },
              }}
            >{...Child elements here}</Drawer>
    

    【讨论】:

      【解决方案2】:

      你可以简单地将它添加到 index.css

      .MuiDrawer-paper {
      width: 60% !important;
      }
      
      @media (max-width: 1200px) {
          .MuiDrawer-paper {
       width: 100% !important;
       }
      }
      

      【讨论】:

        【解决方案3】:

        Drawer-Material-UI如果你看链接..你会发现抽屉属性..

        width (union: string number) [default : null] Drawer 的宽度(以像素为单位)或 字符串格式的百分比 ex。 50% 填充一半窗口或 100% 等等。默认使用主题中的值。

        所以只需用宽度更新标签就可以了,

        <Drawer width="50%"></Drawer>
        

        查看here..

        抽屉宽度与导致问题的主题抽屉宽度不匹配..不是转换 CSS 属性。

        只是一种不同的方法 ^^

        import React, { Component } from 'react';
        import { render } from 'react-dom';
        import Hello from './Hello';
        import './style.css';
        import Drawer from 'material-ui/Drawer';
        import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
        import Responsive from 'react-responsive-decorator'; // This decorator allows using the library as a decorator.
        
        @Responsive
        class App extends Component {
          constructor() {
            super();
            this.state = {
              openDrawer: false,
              width:350
            };
        
          }
          // Update for kinda media query thing
          componentDidMount() {
            this.props.media({ minWidth: 768 }, () => {
              this.setState({
                width: 350
              });
            });
          this.props.media({ maxWidth: 768 }, () => {
              this.setState({
                width: 150
              });
            });
          }
          toggleDrawer() {
            this.setState({
              openDrawer: !this.state.openDrawer
            });
          }
        
          render() {
            return (
              <MuiThemeProvider>
              <div>
                <button onClick={this.toggleDrawer.bind(this)}> Toggle Drawer</button>
                <Drawer width={this.state.width} //<- Update
                          open={this.state.openDrawer}
                          containerClassName="drawer-side-drawer"
                          openSecondary={true}
                          docked={true} 
                        >
                            <div className="drawer-title-div">
                                <h4 className="drawer-title-text">It's my drawer</h4>
                            </div>
                        </Drawer>
              </div>
              </MuiThemeProvider>
            );
          }
        }
        
        render(<App />, document.getElementById('root'));
        

        【讨论】:

        • 我想在外部css中应用。
        • 因为我还需要不同的移动视图宽度
        • 只需点击此链接 - stackblitz.com/edit/react-vrcysu。我在外部 css 文件 style.css 中使用了宽度百分比,但它不起作用
        • 查看上面的解决方案。那家伙给出了一些解决方案,这是一种在外部 css 中应用样式的不同方法。该解决方案解决了我的问题,也可用于在移动视图上应用样式(在媒体查询中)。你会明白的。
        • ok @Subhojit 任何适合你的...问题已经解决了...
        【解决方案4】:

        您可以尝试添加一个切换类,您可以摆脱转换。

        import React, { Component } from 'react';
        import { render } from 'react-dom';
        import Hello from './Hello';
        import './style.css';
        import Drawer from 'material-ui/Drawer';
        import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
        
        class App extends Component {
          constructor() {
            super();
            this.state = {
              openDrawer: false
            };
          }
        
          toggleDrawer() {
            this.setState({
              openDrawer: !this.state.openDrawer
            });
          }
        
          render() {
            return (
              <MuiThemeProvider>
              <div>
                <button onClick={this.toggleDrawer.bind(this)}> Toggle Drawer</button>
                <Drawer containerClassName={!this.state.openDrawer ? "hide-drawer": "show-drawer"} 
                          open={this.state.openDrawer}
                          openSecondary={true}
                          docked={true} 
                        >
                            <div className="drawer-title-div">
                                <h4 className="drawer-title-text">It's my drawer</h4>
                            </div>
                        </Drawer>
              </div>
              </MuiThemeProvider>
            );
          }
        }
        
        render(<App />, document.getElementById('root'));
        

        【讨论】:

        • 谢谢@Parvinder。你的代码帮助了我。稍微编辑一下。在抽屉里写 containerClassName 而不是 className
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        相关资源
        最近更新 更多