如何更改 React Material-ui Drawer 菜单项间距?

Posted

技术标签:

【中文标题】如何更改 React Material-ui Drawer 菜单项间距?【英文标题】:How can I change React Material-ui Drawer menu items spacing? 【发布时间】:2017-08-04 02:13:48 【问题描述】:

我第一次尝试在 React 项目中使用 Material-UI。我已经将 AppBar 放在一起来调用 Drawer,并且从侧边栏中显示菜单项列表。我面临的问题是它们的边距顶部间距很大。

间距示例

Close (X)








About









Contact

我希望这些都一个接一个。

Close (X)
About 
Contact

我不确定是什么导致了额外的间距。我将一个与我现在使用的设计类似的模型放在一起,并且间距是正常的。我在下面包含了完整的组件。

代码

import React,  Component  from 'react'
import  Router, Route, Redirect, IndexRoute, Link, hashHistory  from 'react-router'; 
import AppBar from 'material-ui/AppBar'
import Menu from 'material-ui/Menu'
import MenuItem from 'material-ui/MenuItem'
import Drawer from 'material-ui/Drawer'
import FlatButton from 'material-ui/FlatButton'

class AppBars extends Component 
    constructor(props) 
        super(props) 
            this.state = 
                open: false
            
    

    //toggleDrawer = () => this.setState(open: !this.state.open);

    toggleDrawer() 
        this.setState(
            open: !this.state.open,
        );
    

    render() 
        return(
            <div>
                <AppBar
                    title="Advanced Surface Innovations"
                    onLeftIconButtonTouchTap=this.toggleDrawer.bind(this) 
                />
                <Drawer open=this.state.open onToggleDrawer=this.toggleDrawer.bind(this)>
                    <MenuItem onTouchTap=this.toggleDrawer.bind(this)>
                    CLOSE ( X )
                    </MenuItem>
                    <MenuItem onTouchTap=this.toggleDrawer.bind(this)><Link to="/"> 
                        <FlatButton label="Home" primary=true />
                    </Link>
                    </MenuItem>
                    <MenuItem onTouchTap=this.toggleDrawer.bind(this)><Link to="/About"> 
                        <FlatButton label="About" primary=true />
                    </Link>
                    </MenuItem>
                    <MenuItem onTouchTap=this.toggleDrawer.bind(this)><Link to ="/Contact"> 
                        <FlatButton label="Contact" primary=true />
                    </Link>
                    </MenuItem>
                </Drawer>
            </div>
        )
    


class NavBar extends Component 
    constructor(props) 
        super(props)
        this.state = 
            nav: ''
        
    

    handleScroll(event) 
        console.log('handleScroll invoked');
    

    componentDidMount() 
        console.log('componentDidMount invoked');
        window.addEventListener('scroll', this.handleScroll);
    

    componentWillUnmount() 
        console.log('componentWillUnmount invoked');
        window.removeEventListener('scroll', this.handleScroll);
    

    render() 
        return (
            <div>
                 <AppBars />
            </div>
        )
    


export default NavBar;

【问题讨论】:

我做了一个快速测试,看看抽屉是否会以你提到的方式呈现菜单项,但我无法重现那个大间距问题。 【参考方案1】:

我在查找如何使用 MenuIcon 完成密集的 MenuItem 列表时遇到了一些问题。查看 MenuItem 源显示我可以 使用“lineHeight”影响间距。但是由“minHeight”确定的间距有一个最小限制。因此,通过将 minHeight 设置为小于或等于所需的 lineHeight,外观将适应我的需求。

const denseStyle = 
  minHeight:"10px",
  lineHeight: "25px",      // Smaller: Height of menu item row
  fontSize: "12px",        // Smaller font
  // color:"#0000ff"
;

所以对于每个菜单项都有一个样式:

&lt;MenuItem style=denseStyle onClick=.......

另外,在我的情况下,IconMenu 的三点图标在我略微降低高度的表格列表中仅部分可见,

&lt;TableRow style=height:"20px"&gt;......

但使用负的上边距它完全显示:

&lt;IconMenu style= marginTop: "-12px" .......

【讨论】:

这非常接近。至少我可以控制链接之间的行间距的高度。到目前为止仍然没有好的解决方案【参考方案2】:

您可能希望将您的 MenuItems 包含在 Menu 块中:

<Drawer open=this.state.open onToggleDrawer=this.toggleDrawer.bind(this)>
  <Menu onItemTouchTap=this.toggleDrawer.bind(this)>
    <MenuItem >
      CLOSE ( X )
    </MenuItem>
    …
  </Menu>
</Drawer>

这也使您不必在每个项目上重复 onTouchTap 代码。

另外我会使用路由链接作为MenuItem 的道具,而不是作为孩子。这样整个项目将是可点击的(否则它将只是链接文本)并且您不需要将其设置为按钮:

<MenuItem primaryText="Home" containerElement=<Link to="/"> />

【讨论】:

以上是关于如何更改 React Material-ui Drawer 菜单项间距?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Material-ui 更改 nowrap 文本

使用 React material-ui 更改 OutlinedInput 的大纲

酶不模拟 React Material-UI v1 上的更改事件 - 选择组件

更改自定义主题 Material-UI

如何更改 Material-UI AppBar 的明暗主题颜色?

更改 Material-UI 日期选择器的标题颜色