在HTML中,要实现区域内容的滚动,只需要设定好元素的宽度和高度,然后设置CSS属性overflow
为auto
或者scroll
:
在Flex box
布局中,有时我们内容的宽度和高度是可变的,无法确定下来,这时候设置滚动条,可能会失效。只要记住几个关键要素,就可以解决这个问题。
1、清楚的知道当前元素的flex flow
如果要设置水平滚动条,那么父元素的flex-flow
要设置为row
,如果要设置纵向滚动条,那么父元素的flex-flow
要设置为column
。
2、flex
设置为1
3、滚动方向的大小(宽度或者高度)设置为0
,非滚动方向大小设置为100%
或者一个你喜欢的宽度
这样设置,基本就可以愉快的滚动了。
有时嵌套层数太多,可能也会失效,这时候记住另外一个关键点:
4、设置父元素的大小
如果父元素大小不清晰,也会出现滚动条失效的问题,所以需要把父元素的大小设置明白。如果父元素也是可变大小的,那么要保证嵌套的flex-flow
全部一直,然后宽度或者高度设置为0
,这样就可以正常滚动。像我的这个例子:
5、如何横向和纵向全都跟随flex
滚动,这个比较麻烦,一个方向用上述方法,另外一个方向用calc
函数来计算吧。
ul 子元素过多时,显示水平滚动条
当手机端排版时,如果 ul
中 li
过多,一行装不下时,希望显示水平滚动条,而不是折行。
flex
实现:
ul
display: flex;
overflow-x: auto;
li
flex: none;
如果不加 flex: none;
所有的 li
会自动压缩宽度,以适配当前容器宽度。而这不是我想要的效果。
overflow-x: auto;
与 overflow-x: scroll;
的区别
auto
: 只有当内容溢出时,才显示滚动条scroll
: 无论是否溢出都显示滚动条。主要是为了布局统一,防止滚动条有无导致布局偏差。
css隐藏移动端滚动条并且ios上平滑滚动的方法
HTML代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>移动端隐藏滚动条解决方案</title>
<style type="text/css">
* {
padding: 0;
margin: 0;
}
.par-type {
height: 50px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
}
.type {
height: 100%;
overflow-x: scroll;
overflow-y: hidden;
background-color: #999;
}
.con {
width: 640px;
height: 100%;
display: flex;
align-items: center;
}
.con>li {
text-align: center;
font-size: 16px;
width: 80px;
color: #fff;
list-style: none;
}
.par-type ::-webkit-scrollbar {
display: none;
}
</style>
</head>
<body>
<div class="par-type">
<nav class="type">
<ul class="con">
<li>推荐</li>
<li>娃娃</li>
<li>日用品</li>
<li>美妆护肤</li>
<li>娃娃</li>
<li>日用品</li>
<li>美妆护肤</li>
<li>娃娃</li>
</ul>
</nav>
</div>
</body>
</html>
设置滚动条隐藏
.par-type ::-webkit-scrollbar {display: none;}
此时内容可以正常滚动,滚动条也已隐藏,但是ios手机上出现滚动不流畅,影响用户的体验,安卓手机上是正常的。此时,加上css代码:-webkit-overflow-scrolling: touch;
即可解决,如下:
.type {
height: 100%;
overflow-x: scroll;
overflow-y: hidden;
background-color: #999;
/*解决ios上滑动不流畅*/
-webkit-overflow-scrolling: touch;
}
但是此时又会出现新的问题,滚动条又出现了!!!
为了用户的体验,最好是能流畅滚动并且滚动条是隐藏的,接下来开始放大招了。。。
滚动条是出现在type
标签上的,所以对type进行如下设置:
.type {
/*width: 100%;*/
height: 100%;
overflow-x: scroll;
overflow-y: hidden;
background-color: #999;
/*解决ios上滑动不流畅*/
-webkit-overflow-scrolling: touch;
/*纵向超出部分将会隐藏,即滚动条部分被挤出可视区域*/
padding-bottom: 20px;
}
ps:
1.type
的外层容器设置了固定高度,并且设置了内容溢出隐藏,所有type
的纵向的超出内容是不可见的,即:overflow:hidden;
2.padding-bottom
等于20px
并非固定值,只要你的设置的值大小足够将滚动条挤出可视区域即可。
完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>移动端隐藏滚动条解决方案</title>
<style type="text/css">
* {
padding: 0;
margin: 0;
}
.par-type {
height: 50px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
}
.type {
height: 100%;
overflow-x: scroll;
overflow-y: hidden;
background-color: #999;
/*解决ios上滑动不流畅*/
-webkit-overflow-scrolling: touch;
padding-bottom: 20px;
}
.con {
width: 640px;
height: 100%;
display: flex;
align-items: center;
}
.con>li {
text-align: center;
font-size: 16px;
width: 80px;
color: #fff;
list-style: none;
}
.par-type ::-webkit-scrollbar {
display: none;
}
</style>
</head>
<body>
<div class="par-type">
<nav class="type">
<ul class="con">
<li>推荐</li>
<li>娃娃</li>
<li>日用品</li>
<li>美妆护肤</li>
<li>娃娃</li>
<li>日用品</li>
<li>美妆护肤</li>
<li>娃娃</li>
</ul>
</nav>
</div>
</body>
</html>