解决高度坍塌问题(二)

我们了解完高度坍塌问题之后,那么如何去解决高度坍塌问题呢?

解决高度问题的方法一:

解决问题的原理:根据W3C标准,元素都有一个隐含的属性(Block Formatting Context)简称BFC,块级格式化环境,该属性可以设置打开或是关闭,当开启BFC后,元素将会具有如下特性:

1.父元素的垂直外边距不会和子元素重叠。

2.开启BFC的元素不会被浮动元素覆盖。

3.开启BFC的元素可以包含浮动的子元素。

方案一:直接为父元素指定高度,假设子元素是200px,那么就为父元素的高度也设置为200px;以避免塌陷问题的出现。

缺点:一旦指定父元素的高度为一个固定值。父元素的高度不会自动适应子元素的高度,所以这种解决方法不推荐使用。

 如何开启BFC(并没有直接开启BFC的方法,但是在操作的过程中可以通过一些间接的元素设置开启浮动)

1.设置元素浮动

当子元素box1设置了浮动定位的时候,同时也给父元素box也设置浮动定位。结果发现虽然父元素的高度被撑开了,但是如果没有设置宽度,原有的默认占据一行的宽度就失效了(宽度变成被子元素撑开的元素了),而box2盒子依旧往上移动了。不推荐使用

2.设置元素绝对定位

给父元素设置绝对定位后,原有的默认宽度失效(变成被子元素撑开的宽度了),box2盒子依旧向上移动。不推荐使用

3.设置元素inline-block

子元素box1 保持float:left 的浮动定位,为父元素box设置display:inline-block变成行内块元素,box2盒子不再上移,但是原有的默认宽度失效(变成被子元素撑开的宽度)不推荐使用

4.将元素的over-flow(超出部分)设置成一个非visible的值

回忆over-flow属性的值有visible(默认值)、hidden、scroll、auto。非visible的值有hidden、scroll、auto

首先尝试一下把box父元素设置为 overflow:scroll;宽度被保留了下来,高度也被子元素撑开,box2盒子也没有趁机上移,页面布局也很完美。但是scroll属性值带有的滚动条却很碍眼。尝试其他属性值试试。

设置父元素属性overflow: auto;效果完美

父元素overflow: hidden;

 推荐方式:将overflow设置为hidden开启BFC最简便的方式,解决overflow最简便的方式就是设置overflow:hidden;

浏览器兼容:这样设置,Chrome浏览器支持,Firefox浏览器支持,IE浏览器IE6版本及以下的浏览器不支持这种设置。所以使用这种方式不能兼容IE6及其以下的版本。

在IE6中虽然没有BFC,但是有另一隐含属性hasLayout,如果想开启hasLayout,直接设置元素zoom为1即可。(zoom:表示放大,后面跟着放大倍数的数值;zoom:1表示不放大)zoom只在IE浏览器中支持,其他浏览器都不支持。

如果下想同时兼容所有版本的浏览器可以两种方式都写,既有overflow又有zoom。



解决高度塌陷结局方法之二

在了解这个方法之前,先来简单回顾一下clear属性(只能清除兄弟元素的影响,不能清除父元素的影响)

clear清除属性的取值:

none:不清除浮动;

left:左侧不允许出现浮动,清除左侧浮动元素对当前元素产生的影响;

right:右侧不允许出现浮动,清除右侧浮动元素对当前元素产生的影响;

both:清除对元素影响最大的浮动。

清楚了clear属性清除的用法之后,就可以运用到解决高度塌陷。

当为父元素中的子元素设置了向浮动时。为box1设置向左浮动。就会发现子元素的位置没变,但是父元素box发生了高度坍塌

为box1盒子的兄弟元素box2 设置clear属性

解决高度塌陷方案二

优点

可以直接在高度塌陷的父元素最后添加一个空白的div,由于这个div并没有设置浮动,所以他可以撑开父元素的高度的。

再对其进行清除浮动(clear),通过这样可以通过这个空白的div来撑开父元素的高度。

相比于上面的使用overflow属性清除浮动,更加建议使用此方案,副作用相对而言更少(基本没有),而且可以兼容所有的浏览器。

缺点

因为div属于HTML元素,HTML属于结构部分,所以使用这种方式虽然可以解决问题,但是会在页面中添加多余的结构。

假如既不想添加结构,又希望可以解决高度塌陷问题

解决办法通过after伪类,选中box父元素的后边

可以通过after伪类向元素的最后添加一个空白的块元素,然后对其清除浮动。这样做和添加div原理一样,可以达到一个相同的效果。

而且不会在页面添加多余的div(结构),最推荐使用的方式,几乎没有副作用。



使用clearfix属性,清除修复。

给box添加一个clearfix的属性

 设置clearfix属性值,其中最为关键的三点是

这是最推荐使用的一种方式。但是在IE6中不支持 :after伪类。如果想在IE6中显示开启hasLayout,设置zoom:1。

原文地址:https://www.cnblogs.com/nyw1983/p/11374405.html

时间: 2024-11-09 09:20:21

解决高度坍塌问题(二)的相关文章

高度塌陷问题以及如何解决高度坍塌问题

      我们在进行页面布局的时候可以发现元素在脱离文档流后,就会出现高度塌陷问题. 一.什么是高度塌陷? 通过下面的例子了解什么是高度塌陷. 在页面中设置一个盒子box,其中在嵌套一个子元素小盒子box1.box设置边框宽度,而高度不去设置(高度会由内容撑开) 但是当我们向盒子里面添加内容的时候<div class="box1">a</div>,就可以发现父元素被撑开了. 在文档流定位中,父元素的高度默认是被子元素撑开的高度.即子元素的高度就是父元素的高度.

如何解决高度坍塌问题?——BFC模式

来源:那些年我们一起清除的浮动 CSS|Float知多少   学习块格式化上下文 问题引起是2016IFE春季问题的任务三,总的父元素parent包含三个浮动的子元素,容器的高度不能自动伸长以适应内容的高度,出现了高度坍塌问题. 代码如下: <div class="parent"> <div class="left"></div> <div class="center"></div> &

JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题

前言:一年前,博主分享过一篇关于bootstrapTable组件冻结列的解决方案  JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案 ,通过该篇,确实可以实现bootstrapTable的冻结列效果,并且可以兼容ie浏览器.这一年的时间,不断有园友以及群里面的朋友问过我关于固定高度之后,冻结列页面效果不能对齐的问题,奈何博主太忙,一直没有抽空将这个问题优化.最近项目里面也不断有人提过这个bug,这下子不能再推了,必须要直面“惨淡的bug”,于是昨天利用一天的

如何解决高度塌陷

hello 朋友们,我又来了哦!对的没错,今天的话题呢就是高度塌陷. 首先要知道什么是高度塌陷.高度塌陷其实就是指当父元素没有给确定的高度(即父元素高度靠子元素撑起来),并且子元素添加了浮动时,内容无法撑起父元素的高度,即父元素发生高度塌陷. 解决办法: 第一种,开启元素的BFC,元素将会具有如下的特性: 1.父元素的垂直外边距不会和子元素重叠 2.开启BFC的元素不会被浮动元素所覆盖 3.开启BFC的元素可以包含浮动的子元素 开启元素BFC属性的方式: 一.给父元素添加声明,清除浮动 over

高度平衡的二叉搜索树—AVLTree

AVL树 AVL树又称为高度平衡的二叉搜索树,是1962年有俄罗斯的数学家G.M.Adel'son-Vel'skii和E.M.Landis提出来的.它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度. AVL树的性质 左子树和右子树的高度之差的绝对值不超过1 树中的每个左子树和右子树都是AVL树 每个节点都有一个平衡因子(balance factor--bf),任一节点的平衡因子是-1,0,1.(每个节点的平衡因子等于右子树的高度减去左子树的高度 ) AVL树的效率 一棵AVL

微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题

前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios用户的关注用户,ios用户的线上消费水平普遍比安卓的高.现在好了,微信连WiFi上线连网后关注公众号的流程更新了,解决ios微信扫描二维码不关注就能上网的问题. 还在为无法转化到店顾客为粉丝而烦恼吗? 微信连WiFi上线连网后关注公众号的新流程,让顾客在连你的WiFi时感知你的品牌,成为你的粉丝.

IE6不支持min-height如何解决高度自适应问题

IE6不支持min-height如何解决高度自适应问题:建议:尽可能的手写代码,可以有效的提高学习效率和深度.IE6问题多多,给大家带来了诸多烦恼,这里介绍一下因为IE6浏览器不支持min-height属性,从而导致了高度无法自适应的问题.在其他标准浏览器中,我们可以使用min-height属性给容器规定一个最小高度,如果内容超过这个最小高度,容器会自动被撑开以达到高度自适应效果,但是IE6浏览器并不支持这个属性,不过IE6本身就有高度自适应的特点,或许大家会认为只要同时使用height和min

解决float之后容器高度坍塌

在使用float属性的时候,我们经常会遇到这样的问题,当元素的设置了float,而父容器的高度就坍塌了,如下效果 法国球星亨利宣布退役之后,国际足坛大腕们纷纷对他表示敬意,尤其是他以前效力的阿森纳队众球星都称赞他为“传奇人物.” 国际足联主席布拉特也发表推文说:“衷心祝福亨利.很遗憾看到一位世界冠军离开了赛场,但也高兴你仍然距离足球非常近.” 亨利在2007年离开阿森纳后,沃尔科特继承了他的14号球衣,这位17岁就入选英格兰队的边锋在推特上说:“在我的职业生涯中,你一直在激励我.感谢蒂埃里·亨利

float浮动问题:会造成父级元素高度坍塌;

解决办法:清除浮动:clear:both; 给父元素高度:height(不是很可取) 给父元素:display:inline-black:(问题:margin:auto失效) 给父元素:overflow:hidden;( 在IE67需要有宽度); 给父元素添加伪类;:after{content:""; display:block:clear:both;} (万能)