那么包含块是不是也可以嵌套呢,嵌套之后的包含块又有什么关联呢?答案是肯定的,我们继续通过一个示例来进行阐释,请输入下面的结构代码块:
为 div 元素声明 position: relative 样式,即定义所有 div 元素为包含块:
外层的 div 元素(#contain)就为 h2 和内层的 div 元素(.parag)建立了一个包含块,内层的 div 元素(.parag)又为内部的 p 和 span 元素建立了一个包含块。
当定义 p 和 span 元素绝对定位时,它会根据内层的 div 元素(.parag)来确定自己的位置和百分比大小,而不会参照外层的 div 元素(#contain)。
如果内层的 div 元素(.parag)也被定义了绝对定位,它会参照外层的 div 元素(#contain)来进行定位,并确定百分比大小,不过它会间接地影响 p 和 span 元素在屏幕上的显示位置和百分比大小。
但是由于 IE 浏览器在解析多层包含时会存在一些问题,因此在使用时要特别小心:
1、在 IE 浏览器中,只有当绝对定位的包含元素拥有层特征时才能够准确解析。什么是层特征呢?简单地说,具有层特征的元素应该包含下面的声明:
而且绝对定位元素的百分比大小取值参考也很容易出错,这在上面的示例中也可以看到。在 IE 5、IE 6 中都有问题,在 IE 7 中虽然有了很大改善,但是有些小地方还是有错误,如果用 IE 浏览器预览上面的示例就会发现问题。例如,我们看下面这个示例,请输入下面的CSS 布局代码:
然后,输入 XHTML 结构代码:
提示:您可以先修改部分代码再运行
IE 5、IE 6、Firefox 2中的显示结果:
IE 5 IE 6
Firefox 2
通过上面不同浏览器的预览效果,我 们可以看到 IE 5 和 IE 6 浏览器对于上面代码的解析是存在误差的,只有在 Firefox 2 中才是符合标准的解析。
总之,当在定义包含块嵌套时,为了兼容 IE 浏览器,读者就应该定义包含块拥有层特征。假设一个没有层特征的包含元素被相对定位后,应该给它赋予层的特征(显式定义它的高和宽),使被包含的绝对定位元素的偏移能够以包含块为参照物。
3、定义包含块就是绝对定位元素的相邻的父级元素,也就是说包含块元素和绝对定位元素之间没有嵌入其他元素,如下面的代码结构:
安全嵌套:
不安全嵌套:
不安全的嵌套很容易使 IE 浏览器错误地解析绝对定位元素的位置和大小。