我尝试只使用Grid
来创建SPA。我已经习惯了material-ui Grid
,并且经常使用它,但是在我的新项目中,我不确定我做错了什么。
现在的问题是:
在右侧有一个边距和一个水平滚动条。
我知道负边距限制,但如果我对父元素应用填充(如文档所述),那么我的Grid
元素将失去全宽功能:
水平滚动条消失了,但是我在元素上有一个填充,如果我在其中一个元素中设置background color
,它不会应用于整个宽度,因为有一个填充。
使用overflow-x: hidden
增加了第二个垂直滚动条,似乎我必须垂直滚动两次才能滚动页面。
唯一的解决方案是使用Grid spacing={0}
,但是这样我就不能得到节之间的间距,并且节内的Grid
容器也不能使用spacing
。
我正在实现的示例在这个codesandbox中:https://codesandbox.io/s/competent-volhard-e5yls?file=/src/App.js
我的疑问是,什么是最好的解决方案,只有一个单一的页面,和部分分隔它。理想情况下使用material-ui组件之一。
多谢了!
2条答案
按热度按时间yfwxisqw1#
将此添加到根样式中以删除水平滚动条和边距。Material UI添加了额外的元素来实现其样式,因此使用开发人员工具来找出可能混淆css规则的内容可能是一个好主意。在本例中,根目录下的div需要删除其边距并使其为全宽。
https://codesandbox.io/s/blue-dew-gpxy2?file=/src/App.js:279-318
也许可以阅读更多关于MUI样式API以及如何使用嵌套样式和规则的信息。
r7xajy2e2#
MUI React Grid如果你使用了“间距”属性,那么它会对弹性项应用负边距。目标是使项目和间隙的总宽度小于Flex容器的宽度。
这会导致一些额外的副作用,给项目带来复杂性,例如计算的CSS宽度超过100%,例如
width: calc(100% + 24px)
。如果可能的话,我不会使用MUI React Grid。尝试使用CSS flexbox,并使用
Box
组件进行自己的布局。FYI MUI React Grid是使用flexbox实现的。恕我直言,在90%的情况下,这将完成这项工作,给你更多的控制和更少的意外行为。我创建了一个示例函数,它计算类似于使用12列系统的MUI React Grid拆分的flex基础。例如,网格项4实际上是4/12 = 1/3 ~ 33.33%。所以你需要一个简单的函数来考虑间隙的数量,并通过减少flex项的宽度来移除这些额外的空间(返回
flex-basis
字符串值):希望这对你有帮助。
最好的问候M