美文网首页美工
理解overflow

理解overflow

作者: 可莱恩 | 来源:发表于2017-03-04 17:30 被阅读144次

基本特性

属性

描述
visible 默认值 。内容不会被修剪,会呈现在元素框之外。
hidden 超出的部分会被隐藏,且其余内容是不可见的。
scroll 内容会被修剪,但浏览器会显示滚动条以便查看其余的内容。
auto 若内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 从父元素继承 overflow 属性的值。

在CSS3中有

值(IE8+) 描述
overflow-x : hidden 水平方向被隐藏,垂直方向auto
overflow-y : hidden 垂直方向被隐藏,水平方向auto

要注意的是:
当 x,y 不同,一个值是 visitble,一个是 hidden/scroll/auto,那么 visible 会被重置为 auto 。

兼容性

  1. 滚动条的样式各浏览器不同
  2. 宽度设定机制
    例:
div.box > div.content`
.box{width:400px;height:100px;overflow:auto;}
.content{width:100%;height:200px;background-color:#eee}

IE7 会出现横向滚动条,因为其将.content的宽度直接设为了400px;
随着竖直滚动条的出现,会占用容器的一部分空间,于是出现了横向滚动条。

作用条件

  1. 非 display:inline
  2. 方位尺寸的限制
    width / height / max-widht / max-height / absolute 拉伸
  3. 对于单元格td等,还需要 table 为 table-layout:fixed状态才行

滚动条

出现的条件

  • overflow:auto / overflow:scroll
  • 尺寸超出容器限制
  • 无论什么浏览器,滚动条均来自<html> 而不是<body>
    body:默认有0.5em margin值(约为8像素),但滚动条是紧贴浏览器边缘

默认滚动条

  • IE7
    类似 html { over-flow-y : scroll }
  • IE8+
    html { overflow : auto }
    ====> 因此,html{ overflow:hidden }可以去除默认滚动条

获取滚动高度

//Chrome
document.body.scrollTop
//other
document.documentElement.scrollTop;

var st = document.body.scrollTop || document.documentElement.scrollTop

获取滚动条宽度

  • 滚动条会占用容器的宽度和高度
div.box>div#in
#box{width:400px;overflow:scroll;}
#in{*zoom:1/*for IE7*/}
console.log(400-document.getElementByid("in").clientWidth);

结果:IE7+/Chrome/FireFox(win7) - 17px

自定义滚动条

部位 属性名
整体部分 ::-webkit-scrollbar
两端按钮 ::-webkit-scrollbar-button
外层轨道 ::-webkit-scrollbar-track
内层轨道 ::-webkit-scrollbar-track-piece
滑动滑块 ::-webkit-scrollbar-thumb
边角 ::-webkit-scrollbar-corner

例子

::-webkit-scrollbar{
/*血槽宽度*/
    width:8px;
    height:8px;
}
::-webkit-scrollbar-thumb{
/*拖动条*/
    background-color:rgba(0,0,0,.3)
        border-radius:6px
}
::-webkit-scrollbar-track{
    background-color:#ddd;
        border-radius:6px;
}

插件
jQuery 滚动条自定义插件(IE8+)
项目页面
Github地址

BFC

能形成BFC的 overflow 属性

  • overflow :visible ×
  • overflow : auto √
  • overflow : scroll √
  • overflow : hidden √

应用

  • 清除内部浮动影响
    (overflow:scroll | hidden | auto 父元素高度恢复 --- IE7+)
/*无法整站通用*/
.clearfix{overflow:hidden; _zoom:1;}

.clearfix{*zoom:1;}/*IE6,7*/
.clearfix:after{content:"";display:table;clear:both;}/*IE8*/
  • 避免margin穿透问题
    自身元素BFC化

  • 两栏自适应布局

两栏自适应布局

img.left (左浮动) 
div.right > img*2
div.right {overflow : hidden}

原理:div.right形成了BFC,div.right 的位置不会和 img 重合,故无论div里面的元素怎么样,都跟外面没有任何关系
缺点:但“溢出不可见”,无法广泛应用


仅适用于block元素

<div class="cell">你好</div>
<div class="cell">你好</div>
.cell{
     display:table-cell;  width:2000px;  //IE8+ BFC
    *display:inline-block;              //IE7- 伪BFC
    *width:auto;
}

依赖overflow的样式表现

resize
要在overflow值不是visible时生效

属性值 效果
resize:both 水平垂直两边拉
resize:horizontal 水平方向拉
resize:vertical 垂直方向拉

文本溢出,省略号表示

text-overflow:ellipsis
overflow:hidden;

overflow 与 absolute

absolute 元素不总是被父级 overflow 属性剪裁,尤其当 overflow 在绝对元素及其包含块之间的时候

包含块:指的是含有position:relative / absolute / fixed 生命的父级元素,没有则是 body

body
  div.overflow
     img.absolute

解决办法:

  1. overflow 元素自身为包含块
  2. overflow 元素子元素为包含块
  3. 任意合法 transform 声明当包含块
    overflow 子元素 transform(ie9)
    自身 transform (仅仅ie9+/firefox)

锚点定位

本质

  1. 出发锚点定位
  2. 锚点定位通过scrollTop值改变向上偏移定位
  3. 毛元素的上边缘和可滚动溶气起上边缘对齐

触发

  1. url地址中的锚链与锚点元素
  2. 可focus的锚点元素处于focus状态
div.box > div.list#one*4
div.link > 
    a.click#one
    a.click#two
    a.click#three
    a.click#four
.box {overflow:hidden}

存在的问题

  1. padding-bottom 缺失
.box{width:400px;height:100px;padding:100px 0;overflow:auto;}

Chrome下依旧可以滚动,导致获取的 scrollTop 值不一样

能解决的问题

  1. 水平居中跳动问题
.container{width:1150px;margin:0 auto;}

两种修复方法:

html{overflow-y:scroll;}   //默认显示滚动条

.container{padding-left:calc(100vw - 100%);} //IE9+
100vw - 浏览器宽度;
100% - 可用内容宽度 
  1. 解决 IE7 浏览器下文字越多,按钮两侧padding留白越大问题
/*给按钮增加*/
oberflow : visible

相关文章

  • 理解overflow

    基本特性 属性 在CSS3中有 要注意的是:当 x,y 不同,一个值是 visitble,一个是 hidden/s...

  • 理解overflow

    我一开始接触到的overflow:hidden是为了防止布局被撑开,一直简单的认为当元素A被定义了overflow...

  • 深入理解overflow

    1.重置现象 当overflow-x 与 overflow-y值相同时 ,等同于overflow当overflow...

  • overflow深入理解

    1.如果overflow-x与overflow-y的值相同则等同于overflow;如果overflow-x与ov...

  • css 利用伪类清除浮动

    上代码先 一直用,但是不太理解原理,overflow:hidden overflow的值不为visible会触发b...

  • 深入理解之overflow

    一、overflow的属性 visible 默认值hidden 溢出隐藏scroll 显示滚动条auto 溢出滚动...

  • Flask中'endpoint'(端点)的理解

    Flask中'endpoint'(端点)的理解 翻译整理自Stack Overflow:http://stacko...

  • 关于float和overflow的理解

    我们通常都根据父子元素之间的关系来讨论浮动和overflow,现在我将其进行同级元素之间的效果对比。首先还是先提供...

  • 【译】C++ POD的理解(1):aggregates

    在阅读《深入理解C++11》时对POD的理解有些疑惑,stack overflow上有一篇高分回答写得非常棒,现在...

  • 【译】C++ POD的理解(2):PODs

    在阅读《深入理解C++11》时对POD的理解有些疑惑,stack overflow上有一篇高分回答写得非常棒,现在...

网友评论

    本文标题:理解overflow

    本文链接:https://www.haomeiwen.com/subject/cjcjgttx.html