无法从“材质UI”对话框中删除滚动条

时间:2018-03-13 13:21:54

标签: javascript css reactjs material-ui

我有一个带键盘的模态窗口。一切都很好,除了我无法删除滚动条。我尝试将overflow:'hidden'添加为内联css,但仍然没有。

此外,即使在引导程序中使用container-full padding-0,组件仍然不会一直到屏幕边缘。所以我想这就是问题所在。

这是我渲染组件的地方

<div className="container-full padding-0">
    <div className="row">
        <div className="col-sm-3">
            <ButtonsGrid list={this.state.list} clicked={this.clicked}/>
        </div>
        <div className="col-sm-3" style={{paddingLeft:0, paddingRight:0}}>
            <ButtonsGrid list = {this.state.list} clicked={this.clicked}/>
        </div>
        <div className="col-sm-6" style={{paddingRight: 0, paddingLeft: 0}}>
           <Keyboard search={this.search}/>  <-------------- HERE
        </div>
     </div>
 </div>

组件的render看起来像这样:

render() {
    return(
        <div>
            <Paper 
             onClick={this.toggleKeyboard}>
                <p 
                 style={{
                   fontSize:40, 
                   overflow:'hidden'}}>
                   {this.state.input !== '' ? 
                     this.state.input : 'Search...'}
                </p>
            </Paper>
            <br />

            {this.state.showKeyboard ? 
              <Dialog 
               open={this.state.showKeyboard} 
               maxWidth='md'fullWidth>
                <GridList 
                 cellHeight={50} 
                 cols={11} 
                 style={{overflowX:'hidden'}}>
                    {this.state.keyboard.length > 0 ? 
                     this.state.keyboard.map(key => {
                      return(
                        <Button 
                          disabled={key.value === ''} 
                          key={Math.random()*13} 
                          style={{minWidth: '30px', border: '1px solid'}} 
                          color="default" 
                          onClick={key.value !== 'Enter' ? 
                           () => this.onInputChanged(key.value) : 
                           () => this.search(key.value)}>
                            <div 
                             style={{fontSize:'15px', 
                                     display: 'flex', 
                                     justifyContent: 'center', 
                                     textAlign:'center'}}
                             >
                                {key.value}
                            </div>
                        </Button>
                        )
                    }):null}
                </GridList>
              </Dialog>:''}

            </div>
        );
    }

此外,here's是视觉效果。

如果我在浏览器中检查元素,我可以取消选中溢出并removes

我尝试将overflow:'hidden'添加到组件获得呈现的div但仍然无效。

有什么想法吗?

7 个答案:

答案 0 :(得分:4)

只需在DialogContent上设置溢出:

<Dialog
        fullWidth={true}
        maxWidth="xl"
        open={this.state.isChartOpen}
        onClose={() => this.setState({ isChartOpen: false })}
      >
        <DialogContent style={{ overflow: "hidden" }}>
          <ContractPriceChart contracts={this.props.contracts} />
        </DialogContent>
      </Dialog>

答案 1 :(得分:1)

我在下面的代码中解决了功能组件中的这个问题。

您应该操纵“ ”标记的溢出属性。

当isOpen为true时,它将向html标签添加“隐藏隐藏”类。

当isOpen为false时,它将从html标记中删除“隐藏溢出”类。

import React, { useEffect } from 'react';
import Dialog from '@material-ui/core/Dialog';
import DialogContent from '@material-ui/core/DialogContent';

const MyDialog = (props) => {
  const { isOpen } = props;

  useEffect(() => {
    const htmlElement = document.querySelector('html');
    if (isOpen && !htmlElement.classList.contains('overflow-hidden')) {
      htmlElement.classList.add('overflow-hidden');
    } else {
      htmlElement.classList.remove('overflow-hidden');
    }
  }, []);

  useEffect(() => {
    const htmlElement = document.querySelector('html');
    if (isOpen && !htmlElement.classList.contains('overflow-hidden')) {
      htmlElement.classList.add('overflow-hidden');
    } else {
      htmlElement.classList.remove('overflow-hidden');
    }
  }, [isOpen]);

  return (
    <div>
      <Dialog
        open={isOpen}
        maxWidth="xl"
      >
        <DialogContent>
    Content 1
    Content 2
        </DialogContent>
      </Dialog>
    </div>
  );
};

并将此类添加到您的全局样式中。

.overflow-hidden {
  overflow: hidden !important;
}

答案 2 :(得分:0)

你有没有试过添加!重要吗?像这样:溢出:'隐藏!重要'

答案 3 :(得分:0)

将所有对话框元素放入<Dialog><DialogContent>.....</DialogContent></Dialog>

答案 4 :(得分:0)

将所有对话框元素放入<Dialog><DialogContent>.....</DialogContent></Dialog>这里的代码:

render() {
return(
    <div>
        <Paper 
         onClick={this.toggleKeyboard}>
            <p 
             style={{
               fontSize:40, 
               overflow:'hidden'}}>
               {this.state.input !== '' ? 
                 this.state.input : 'Search...'}
            </p>
        </Paper>
        <br />

        {this.state.showKeyboard ? 
          <Dialog 
           open={this.state.showKeyboard} 
           maxWidth='md'fullWidth>
            <GridList 
             cellHeight={50} 
             cols={11} 
             style={{overflowX:'hidden'}}>
                <DialogContent>
                {this.state.keyboard.length > 0 ? 
                 this.state.keyboard.map(key => {
                  return(
                    <Button 
                      disabled={key.value === ''} 
                      key={Math.random()*13} 
                      style={{minWidth: '30px', border: '1px solid'}} 
                      color="default" 
                      onClick={key.value !== 'Enter' ? 
                       () => this.onInputChanged(key.value) : 
                       () => this.search(key.value)}>
                        <div 
                         style={{fontSize:'15px', 
                                 display: 'flex', 
                                 justifyContent: 'center', 
                                 textAlign:'center'}}
                         >
                            {key.value}
                        </div>
                    </Button>
                    )
                }):null}
            </GridList>
           </DialogContent>
          </Dialog>:''}

        </div>
    );
}

答案 5 :(得分:0)

尝试使用伪元素-webkit-scrollbar将其删除:

.MuiDialog-paper::-webkit-scrollbar {
  display: none;
}

如果它不起作用,您可以尝试:

.MuiDialog-root::-webkit-scrollbar {
  display: none;
}

缺点是您不能内联使用它,但是我在这里进行了测试。

答案 6 :(得分:0)

你可以试试这个:

<DialogContent className={classes.hiddenScroll}>

和他们的风格:

const useStyles = makeStyles(theme => ({
hiddenScroll: {
    overflow: 'hidden',
  },