父元素不能是position:absolute;或者relative?为什么?

来源:4-4 下拉框定位二三事

yejia

2015-10-05 16:49

老师,您好!有个问题,就是,既然说ul是无依赖的,但是为什么针对其父元素

, 设置position:absolute;或者position:relative;之后,原来可见的ul就不可见了,事实上,位置还是在的,仅仅是看不见内容。请老师答疑解惑。默认的父元素应该是position: static。在其他的position条件下,需要设置一定的高度才能显示ul的内容。请老师再解释一下。

写回答 关注

2回答

  • 慕粉4002810
    2016-10-04 11:28:30

    查阅了很多资料,

    这里其实是 ul元素的包含块(containing block)问题 。

    containing block定义

    一个元素盒子的位置和大小有时是通过相对于一个特定的长方形来计算的,这个长方形就被称之为元素的 containing block。

    如果元素有属性 'position:absolute',containing block 由最近的 position 不是 static 的祖先建立。

    如果没有这样的祖先,则根元素盒子的内容边界确定为 containing block。

    overflow属性

    一个绝对定位的子孙元素,部分内容在盒子外。但超出的部分不是总会被剪裁。子孙元素的内容就不会被子孙元素和其包含块之间的祖先元素的overflow的设置所剪裁。

    现在再看楼主的问题:

    1. 一开始ul的父元素并没有设置position的值,ul元素的包含块为根元素,ul父元素上的overflow:hidden对其不生效。

    2. 当ul的父元素上设置了非默认的position值之后,ul元素的包含块变为ul的父元素,此时overflow:hidden属性对ul生效

    这里有一些overflow属性失效的详尽演示,大家可以对照着看一下

    http://www.cnblogs.com/xiaohuochai/p/5289653.html#anchor3



  • dzxczx
    2016-02-14 16:45:09

    我看糊涂了

CSS深入理解之absolute

理解CSSposition:absolute声明,掌握position:absolute高级应用

51957 学习 · 254 问题

查看课程

相似问题