CSS2 速查表 - overflow (深入理解)

語義
visible 默認(超出父元素部分顯示)
hidden 隱藏(超出父元素部分隱藏)
scroll 滾動條X,Y(父元素出現滾動條無論是否超出)
auto 智能模式 未超出父元素不顯示滾動條,反相同理
inherit ie8+ 一般不使用,有瀏覽器兼容問題

overflow-x 、overflow-y ie8+(重要)

1. 情況1

 `overflow-x :hidden;`
 `overflow-y :hidden;`
  如果 `overflow-x`與 `overflow-y` 的值相同 = `overflow`
 上面的代碼等同于 : `overflow:hidden;`

2. 情況2

`overflow-x :visible;`
`overflow-y :hidden || auto || scroll;`
 如果 `overflow-x` 與 `overflow-y` 任意一項值是 = `visible`;
 另一項的值 = `hidden || auto || scroll`
 那么值為 `visible` 這一項的值將被重置為 `auto`
上面的代碼等同于 :
                 ` overflow-x :auto;`
                 ` overflow-y :hidden || auto || scroll;`

兼容性

生效 注意
display:inline水平
對應方位的尺寸限制 widthheightmax-widthmax-heightabsoule ie7max-widthmax-height bug
單元格td等,需要tabletable-layout:fixed

body/html與滾動條

1. 無論什么瀏覽器,默認的滾動條均來自<html>而不是<body>

 IE7-瀏覽器默認:`html { overflow-y : scroll ; }`
 IE8+瀏覽器默認:`html { overflow-y : auto ; }`
 所以,如果想要去除頁面默認滾動條,只需要: html { overflow : hidden ; }
 而沒必要把<body>也拉下水:html , **body**  { overflow : hidden ; }

2.js與滾動高度

- Chrome瀏覽器:`document.body.scrollTop`
- 其它瀏覽器:`document.documentElement.scrollTop`
- 建議寫法:`document.documentElement.scrollTop || document.body.scrollTop;`

3. overflowpadding-bottom 缺失現象

- Chrome瀏覽器:有
- 其它瀏覽器:無
- 從而導致了`scrollHeight` 元素內容高度不同

4. 滾動條的寬度 17px

    <style type="text/css">
      .body{
          width: 400px;
          overflow:scroll ;
      }
      .in{*zoom: 1; /*ie7*/}
    </style>
    <body>
      <div class="body">
        <div class="in"></div>
      </div>
      <script type="text/javascript">
          var  cw = 400- document.getElementsByClassName('in')[0].clientWidth;
          console.log(cw); //IE7+、Chrome、FireFox(Win7)  cw = 17  !!!
       </script>
    </body>

5. 水平居中跳動問題

  一般網頁制作采用水平居中,這時候如果出現滾動條則會占用頁面寬度,auto計算的值就會減小。
  發生水平跳動現象
  解決方法:ie9+
  html { overflow : scroll ; }
 .container { padding-left : calc( 100vw - 100% ) ; }
 .container {
      width: 1210px;
      color: #666;
      padding-left: calc(100vw - 100%);  
    /* 100vw : 瀏覽器寬度 ; 100% : 可用內容寬度  */
 }

6.自定義滾動條 - webkit

實際開發就用下面幾個:
/*血槽寬度*/
::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}
/*拖動條*/
::-webkit-scrollbar-thumb {
    background-color: rgba(0, 0, 0, .3);
}
/*背景槽*/
::-webkit-scrollbar-track {
    background-color: #ddd;
    border-radius: 6px;
    }

overflow與BFC

1. 觸發BFC

1. `visible` -
2. `auto*`
3. `scroll*`
4. ` hidden*`

2. 作用

 清除浮動影響

 避免`margin`穿透問題

 兩欄自適應布局 

3. overflow失效

 原因 :絕對定位元素不總是被父級`overflow`屬性裁剪,尤其當`overflow`在**絕對定位元素及其包含塊**之間的時候

包含塊 : 含 position:relative、absolute、fixed聲明的父級元素、沒有則body元素

4. 如何避免失效

overflow 元素自身為包含塊;

overflow 元素的子元素為包含塊;

任意合法`transform`聲明當作包含塊(**new**);
<body>
    <div style="overflow: hidden; margin-top:20px ;  width: 200px; height: 300px;border: 5px   solid saddlebrown;">
        [站外圖片上傳中……(1)]
    </div>
 </body>
圖片設置 position: absolute;  父級元素是body 所以 overflow失效

5. resize拉伸

`ccs3`有個屬性名為`resize`,可以拉伸元素尺寸:
`resize:both` 水平垂直兩邊拉;
`resize:horizontal` 只有水平方向拉;
`resize:vertical` 只有垂直方向拉;
 但是,此聲明要想其作用,元素的`overflow`屬性值不能是 `**visible**`

6. 拖拽的默認像素是 17px 與scroll邊框一致

7. ellipsis文字溢出點點點省略

  必須是 `overflow:hidden` 屬性,否則無法實現效果;
  <button style="width:200px;white-space:nowrap;textoverflow:ellipsis;overflow:hidden;">
        我是一個按鈕,寬度僅200像素
    </button>

妙用

1. overflow-visible 妙用

2. 失效妙用

疑問?

文章中涉及效果示例

overflow 失效、overflow妙用、兩欄布局
錨點選項卡示例1
target實現動畫選項卡示例2
target實現動畫選項卡示例3
target天氣預報示例

參考

錨點定位機制-應用-問題 張鑫旭
慕課網 張鑫旭 深入理解overflow

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Overflow基本屬性 visible(默認) hidden scroll auto inherit 假如ove...
    soojade閱讀 2,619評論 0 1
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,806評論 1 92
  • 1,overflow的基本屬性 overflow作用的前提? (1),不能是內聯元素! (2),對尺寸的限制。(w...
    Bennt閱讀 2,030評論 0 4
  • overflow是個非常神奇的屬性,表面上它只是用來處理超出部分隱藏的元素,實質上它有許多神奇的妙用! 1.ove...
    土豪碼農閱讀 1,861評論 0 1
  • 有位認識不久的朋友H,每次來我這,都會說道他女兒的事。才匆匆忙忙幾次間,我對他的女兒都有了一個大至的了解...
    南飛雨燕閱讀 644評論 5 17