overflow爲什麼無效

問題:爲什麼在display:flex下,overflow不起作用?

解決方法:

使用display:box,display: box是一種古老的寫法,現在基本廢棄,可用display: -webkit-box; 兼容 

使用flex佈局:flex佈局的默認值,子元素有flex-shrink:1,在這個默認值下,子元素的寬是不管用的。將子元素加上flex-shrink:0;

移動端問題:

安卓和iOS瀏覽器都是webkit內核,包括變態UC瀏覽器,對flex支持並不好,但卻都支持古老的display:webkit-box;所以在這種情況下,要使用box佈局。所以移動端的一定要加瀏覽器前綴!!display: -webkit-box; 

 

display: -webkit-box;可伸縮框屬性(Flexible Box)

css3新添加的盒子模型屬性做到真正的流體佈局

更多請參考css3

 

overflow

overflow 屬性規定當內容溢出元素框時發生的事情

 

display 、flex

display 屬性規定元素應該生成的框的類型

flex 屬性用於設置或檢索彈性盒模型對象的子元素如何分配空間

flex 屬性是 flex-grow、flex-shrink 和 flex-basis 屬性的簡寫屬性display:flex 是一種彈性佈局佈局方式。它即可以應用於容器中,也可以應用於行內元素。是W3C提出的一種新的方案,可以簡便、完整、響應式地實現各種頁面佈局。目前,它已經得到了所有瀏覽器的支持

overflow:auto的潛在佈局隱患
1.滾動條會佔用容器尺寸,原本和諧的佈局,可能因爲滾動條出現後發生問題(儘量使用自適應佈局,或者預留滾動條的寬度)
2.水平居中跳動的問題(滾動條出現時,水平居中是內容會發生移動,這樣頁面切換時,會產生內容上的跳動感)

簡單示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
 .boxes{
            width: 500px;
            height: 400px;
            display:-webkit-box;
            overflow-x: auto;
            flex-direction: row;
            border: 1px solid black;
        }
 .boxes>div{
            width: 200px;
            height: 300px;
            border: 1px solid red;
        }
 </style>
</head>
<body>
<div class="boxes" id="boxes">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>
<div id="val"></div>
</body>
<script type="text/javascript">
 //監聽滾動條滾動
    //獲取對象
 var boxes=document.getElementById("boxes");
    boxes.addEventListener("scroll", function (e) {
 console.log(JSON.stringify(e));
        var w=boxes.scrollLeft;
        document.getElementById("val").innerHTML="滾動距離:"+w+"總長度:"+boxes.scrollWidth;
    });
</script>
</html>


 

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