在HTML中,要实现区域内容的滚动,只需要设定好元素的宽度和高度,然后设置CSS属性overflow 为auto或者scroll:
![弹性盒子Flex Box滚动条原理,避免被撑开,永不失效第1张](https://upload-images.jianshu.io/upload_images/13052807-395c940131417577.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/369/format/webp)
在Flex box布局中,有时我们内容的宽度和高度是可变的,无法确定下来,这时候设置滚动条,可能会失效。只要记住几个关键要素,就可以解决这个问题。
1、清楚的知道当前元素的flex flow
如果要设置水平滚动条,那么父元素的flex-flow要设置为row,如果要设置纵向滚动条,那么父元素的flex-flow要设置为column。
2、flex设置为1
3、滚动方向的大小(宽度或者高度)设置为0,非滚动方向大小设置为100%或者一个你喜欢的宽度
![弹性盒子Flex Box滚动条原理,避免被撑开,永不失效第2张](https://upload-images.jianshu.io/upload_images/13052807-ba151d8c4814c8be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/296/format/webp)
这样设置,基本就可以愉快的滚动了。
有时嵌套层数太多,可能也会失效,这时候记住另外一个关键点:
4、设置父元素的大小
如果父元素大小不清晰,也会出现滚动条失效的问题,所以需要把父元素的大小设置明白。如果父元素也是可变大小的,那么要保证嵌套的flex-flow全部一直,然后宽度或者高度设置为0,这样就可以正常滚动。像我的这个例子:
![弹性盒子Flex Box滚动条原理,避免被撑开,永不失效第3张](https://upload-images.jianshu.io/upload_images/13052807-77414dc1fb46776e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/729/format/webp)
5、如何横向和纵向全都跟随flex滚动,这个比较麻烦,一个方向用上述方法,另外一个方向用calc函数来计算吧。
我的github上有个例子:https://github.com/vularsoft/studio-ui
里面的html-demo.html文件是一个完全由flex box实现的布局,感兴趣的可以参考。