我一直很困惑绝对定位后父盒子的高度会变为0,如何让绝对定位的元素撑开父盒子呢?
我在StackOverflow上找到的高分解决方案如下:
Absolutely positioned elements are completely removed from the document flow, and thus their dimensions cannot alter the dimensions of their parents.
If you really had to achieve this affect while keeping the children as position: absolute, you could do so with JavaScript by finding the height of the absolutely positioned children after they have rendered, and using that to set the height of the parent.
Alternatively, just use float: left/float:right and margins to get the same positioning effect while keeping the children in the document flow, you can then use overflow: hidden on the parent (or any other clearfix technique) to cause its height to expand to that of its children.
翻译:
绝对定位的元素完全从文档流当中移走,所以他们的尺寸无法影响到父元素的尺寸。
如果你真的想实现绝对定位还能撑开父元素,只能通过JavaScript实现:获取到绝对定位的子元素的高度,再设置给父元素。
或者,用 float: left / float:right 还有 margin 来调整位置,子元素再通过父元素设置的overflow:hidden来撑开父元素。
我一直很困惑绝对定位后父盒子的高度会变为0,如何让绝对定位的元素撑开父盒子呢?我在StackOverflow上找到的高分解决方案如下:Absolutely positioned elements are completely removed from the document flow, and thus their dimensions cannot alter the dimensions...
纯粹的
CSS
无法
实现。因为
position
:
absolute
就是脱离文档流,怎么能让
父
元素
不塌陷呢? 目前想到的只能用js和jquery来实现了,用js获取子
元素
的
高度
,赋值给
父
元素
。
<!DOCTYPE
html
>
<meta charset="utf-8">
<meta name...
前段时间写
前端
页面排版的时候又又又遇到了
absolute
导致的
父
元素
高度塌陷
的问题,以前代码写的少所以遇到问题就是查查查,问题解决后了一个漫长的学期后又遇到一样的问题又得重新查查查,所以这次索性总结一下。
什么是
高度塌陷
?
在文档流中,
父
元素
的
高度
默认被子
元素
撑开
的,也就是说子
元素
多高
父
元素
就多高,但是当为我们子
元素
设置浮动以后,子
元素
就会完全脱离文档流,此时会导致子
元素
无法
撑开
父
元素
的
高度
,导致
父
元素
的
高度塌陷
。由于
父
元素
的
高度塌陷
,则
父
元素
下的所有
元素
都会向上移动,导致页面的布局混乱。
PS:因为pos
大家知道
css
的
position
absolute
默认是根据document来设置的,比如
position
:
absolute
后设置left:0;top:0这时候
元素
会显示到页面的左上角。
有时候我们需要在
父
元素
的容器内设置相对的绝对位置
要做到这一点需要把
父
元素
的
position
属性设置为relative,设置为relative之后不设置left和top属性,这时候
父
元素
虽然是relative的,但是还是在原来位置。 然后把子
元素
的位置
position
设置为
absolute
的,并设置其left,top,right,bottom属性,这样就是相对于
父
元素
的绝对位置了。
如下
html
示例代码:
前一阵子上网得时候偶然间看到这样一个题:将一个页面均分成四等分。于是我顺手做了一下。以下是我的代码和效果:
由于好奇心的作用,我把
position
:
absolute
属性删掉了,结果页面上啥也没有了。我不明白其中的原理,就去网上找了找资料并问了问朋友,到目前为止我的理解是这样的:
我们都知道
absolute
属性会使div脱离文档流,但是我没想到
absolute
这个属性脱离文档流能脱离的如此“干
总的
原因
还是对定位的理解错误。
position
:
absolute
是相对
父
元素
进行
绝对定位
的,且该
父
元素
必须定义有
position
的值(relative、
absolute
、fixed),若
父
元素
没有定义有
position
,则是相对于body进行定位。
position
总的来说分为
绝对定位
和相对定位。
CSS
中
父
级
元素
的
高度
一般由子
元素
撑开
,不会特意设置
高度
,但是以下情况会造成
父
级
元素
高度
坍塌,也就是
高度
为零,影响后面
元素
的排版。主要有两个
原因
:
)子
元素
使用
绝对定位
)子
元素
浮动
1)子
元素
使用
绝对定位
,
父
元素
没设置宽高
此时子
元素
已从正常文档流中移除,并且不会在页面布局中为该
元素
创建空间。所以
父
元素
依靠子
元素
撑起其宽高时会为0;
解决方案
:子
元素
的
绝对定位
改为相对定位
改为相对之后页面布局时会为子
元素
创建相应的空间,此时没设置宽高的
父
元素
也会被子
元素
撑起来了。