彈性盒子Flex Box滾動條原理,避免被撐開,永不失效

在HTML中,要實現區域內容的滾動,只需要設定好元素的寬度和高度,然後設置CSS屬性overflowauto或者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 子元素過多時,顯示水平滾動條

當手機端排版時,如果 ulli 過多,一行裝不下時,希望顯示水平滾動條,而不是折行。

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章