在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>