CSS学习:overflow:hidden解决溢出,坍塌,清除浮动

摘要:
溢出:隐藏是溢出属性的一种神奇用法,它可以帮助我们隐藏溢出元素、清除浮动和移除塌陷。要解决父子div中上边距折叠的问题,需要为父div设置以下设置:添加边框,当然可以将边框设置为透明;为父DIV添加填充,或者至少添加顶部填充;此外,可以通过为父div:container{background color:black;overflow:hidden;}添加overflow:隐藏来解决此问题经验:overflow:hidden的用法主要区分父div在溢出和浮动消除方面是否具有固定的高度。

overflow:hidden是overflow属性的一个神奇用法,它可以帮助我们隐藏溢出的元素,清除浮动和解除坍塌。

CSS样式:

 1 .container{
 2       background-color: black;
 3            }
 4 
 5 .div1{
 6       background-color: aqua;
 7       width: 100px;
 8       height: 100px;
 9       }
10 .div2{
11        background-color: red;
12        width: 100px;
13        height: 100px;
14      }

html内容:

1 <div class="container">
2     <div class="div1"></div>
3     <div class="div2"></div>
4 </div>

A.父级固定高度,使用overflow:hidden隐藏溢出

父div拥有固定的高度时,比如height:500px,我们使用overflow:hidden来隐藏溢出

溢出定义:

当使用div+css布局时,会出现很多的div嵌套——父div内嵌套一个或多个的子div,默认情况下,父div的高度是auto——它可以被子div任意的撑大。

然而父div也可以有固定的高度(或宽度),比如height:500px,那么如果子div的高度超过了这个值,在默认情况下,子div会超出父div的束缚,这就是溢出。

B.父级高height:auto时,使用overflow:hidden清除浮动

父元素的高height:auto时,我们使用overflow:hidden清除浮动.

当我们为div1和div2加上一个属性:float:left后,我们会发现:背景色为黑色父div消失了,这是因为: 浮动的元素脱离文档元素 不占据空间不浮动的元素会直接无视掉这个元素父div无视了自己的两个孩子,其高度为0(因为我们没有设置父div的高度),所以父div没有显现。
想让父div“宽容的”接受自己的两个孩子有两个办法:
 
方案一: 第一个就是让父亲也浮动起来,我们试着给父div添加一个CSS属性:float:right,会发现两个颜色块出现在了屏幕的右边,依然没有父div的身影,然而通过开发人员工具不难看出父div已经包容子div。
 
这是因为浮动父级的div已经失去了其“独霸一行”的能力,我们需要手动为父div设置一个宽度,比如500px,之后可以看到:
 
方案二: 为父亲添加overflow:hidden属性用以清除浮动
.container{ background-color: black; overflow:hidden;}

总结:

(方案一和方案二)一个使用了都浮动的战略,一个使用了清除浮动的战略使父div宽容的接受了子div,两者的区别在于都浮动需要额外设定父div的宽度,因为浮动起来的div失去了div独占一行的特性,而清除浮动的父div仍然霸道。

C.解除坍塌

我们为div1添加一个属性:margin-top:50px,我们想象中效果是这样的:
CSS学习:overflow:hidden解决溢出,坍塌,清除浮动第1张

但实际上是这样的(这是开发人员工具下的效果):

CSS学习:overflow:hidden解决溢出,坍塌,清除浮动第2张

CSS中存在一个margin collapse,即边界塌陷或者说边界重叠。对于上下两个并列的div块而言,上面div的margin-bottom下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值
所以从这个意义上说:CSS及浏览器的设计者们希望我们在布局时,如果遇到上下两个并排内容块的安排,最好只设置其中每个块上或下margin的一处即可。
 
但对于父块DIV内含子块DIV的情况,就会按另一条CSS惯例来解释了,那就是:对于有块级子元素的元素(父元素)计算高度的方式,如果父级元素元素没有上下边框和填充,那其高度就是第一个子元素顶部和底部边框边缘之间的距离
 

解决父子DIV中顶部margin cllapse的问题,需要给父div设置:

(1)添加边框,当然可以设置边框为透明;

(2)为父DIV添加padding,或者至少添加padding-top;

此外,还可以通过为父div添加overflow:hidden解决这个问题:

.container{
    background-color: black;
    overflow: hidden;
}

 


经验:

overflow:hidden的用法在溢出和清除浮动上主要针对父div是否有固定的高度加以区分。它还额外肩负了解除坍塌的重任
 

免责声明:文章转载自《CSS学习:overflow:hidden解决溢出,坍塌,清除浮动》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VirtualBox共享文件夹失败java四舍五入下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CSS命名规范

1 前端开发命名规范 1.1 为什么要制定CSS命名规范 统一的命名规范,便于多人开发维护时代码统一,减少项目沟通和交接的成本,增加代码的语义化。 1.2 CSS命名规则 样式类名全部用小写,首字符必须是字母,禁止数字或其他特殊字符。由以字母开头的小写字母(a-z)、数字(0-9)、中划线 (-)组成。 可以是单个单词,也可以是组合单词,要求能够描述清...

Android 4.0设计规范 优先导读 十大改变

在拜读和翻译了 Android design 设计指导后,对比 Android 4.0 与 Android2.3 及之前版本的 app 设计指导,总结了 Android 4.0 设计的 10 大改变: 1. 导航栏(详见模式 PATTERNS>导航 Navigation) 由之前的物理按键导航(返回、菜单、搜索、主页)变成了嵌入屏幕的虚拟按键(返回、主...

webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css、js等资源,路径都是绝对的。 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static文件夹当成了根路径,那么要解决这种问题,就得引用相对路径。 解决办法 打开webpack.prod.conf.js 找到output:增加publicPat...

css position 属性

position属性 这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。 JavaScript 语法: object.style.position="absolute" 值 描述 absolute 生成绝对定位的元素,相对...

巧用CSS属性visibility与opacity代替鼠标经过的jQuery事件

一直使用jQuery的hover()函数来写鼠标经过事件,这几天发现其他同行直接使用CSS就搞定了。自己在线下也试了试: 当然也并不是没有前提条件,需要配合一些定位属性来使用(position/top/left)。代码如下: <!DOCTYPE html> <html lang="en"> <head> <...

flex自适应高度内容高度超出容器高度自动出现滚动条的问题

在容器中设置 flex-grow:2; overflow-y:auto;overflow-x:hidden;容器高度自适应。 内容高度不固定,无法出现滚动条,然后在容器中添加height:0,出现滚动条,个人猜想为设置height:0后,将默认的盒子模型高度设置为空,让flex设置的高度生效; //TODO 实验,查资料...