Scrollable drop down lists in react-bootstrap

前端 未结 3 1784
遇见更好的自我
遇见更好的自我 2021-01-17 19:53

I am trying to create some simple birth date dropdowns and would like to have scroll bars on the dropdown lists with a fixed number of items shown. How can I do this with re

相关标签:
3条回答
  • 2021-01-17 20:23

    Here's a possible solution that will scale the max height of the element dynamically based on viewport height:

    import React, { Component } from 'react'
    import { Button, Dropdown, MenuItem } from 'react-bootstrap'
    
    export default class CustomDropdown extends Component {
        constructor(props) {
            super(props);
            this.state = {
                open: false,
            };
        }
        toggle = () => {
            this.setState({ open: !this.state.open });
        }
        onToggle = (isOpen, e, source) => {
            //This closes the menu on toggling the dropdown or hitting esc.
            if (source.source === 'click' || source.source === 'rootClose') {
                this.toggle();
            }
        }
    
        render(){
            <div ref={(ref) => this.myRef = ref} className='CustomDropdown'>
                <Dropdown open={this.state.open}
                        onToggle={this.onToggle}
                        id={'Dropdown'}
                    >
                    <Button onClick={this.toggle}
                    >{this.props.myTitle ? this.props.myTitle : 'Click Me'}</Button>
                     <Dropdown.Toggle style={{ textAlign: right, paddingBottom: 5 }} />
                    <Dropdown.Menu style={{overflowY: 'scroll', maxHeight: (window.innerHeight - (this.myRef ? (this.myRef.getBoundingClientRect().top + this.myRef.getBoundingClientRect().height + 100) : 200))}}>
                        ... add menu items here
                    </Dropdown.Menu>
                </Dropdown>
            </div>
        }
    }
    
    0 讨论(0)
  • 2021-01-17 20:31

    use this style for scrollable DropdownButton

    ul.dropdown-menu {
        max-height: 500px;
        overflow-y: scroll;
    }
    
    0 讨论(0)
  • 2021-01-17 20:32

    You can create scrollable dropdown by applying fixed height for the ".dropdown-menu" element and set "overflow-y: scroll;"

    React Code:

    import React, { Component } from 'react'
    import { DropdownButton, MenuItem } from 'react-bootstrap'
    import './QuantityInput.css'
    
    export default class QuantityInput extends Component {
      render() {
        return (
          <DropdownButton
            bsStyle="default"
            bsSize="small"
            style={{ maxHeight: "28px" }}
            title={"Qty"}
            key={1}
            id="dropdown-size-small"
          >
            <MenuItem eventKey="1">Action</MenuItem>
            <MenuItem eventKey="2">Another action</MenuItem>
            <MenuItem eventKey="3" active>
              Active Item
            </MenuItem>
            <MenuItem divider />
            <MenuItem eventKey="4">Separated link</MenuItem>
          </DropdownButton>
        )
      }
    }
    

    QuantityInput.css

    .dropdown-menu {
      height: 70px;
      overflow-y: scroll;
    }
    
    0 讨论(0)
提交回复
热议问题