关于Position定位问题,在这里给出一些补充说明。
书中第10.3.2节正文的第二段中谈到,通过Position属性对DIV块进行定位,一共有4种方式:static、absolute、relative和fixed。
其中,statics(静态)为默认值,表示DIV块呆在他原本应该在的位置;relative(相对)表示DIV块以它自己的位置为基础,移动一定的偏移量,从而形成实际显示位置;fixed(固定)表示一个DIV快固定在浏览器窗口的指定位置,不随页面滚动而变化。上述三项,没有需要补充说明的。
现在来说说absolute(绝对)方式的定位。书中谈到,使用absolute方式时,DIV块会脱离它原本应该在的位置,而以页面body为基准,移动一定的偏移量,从而形成实际显示位置。这里要补充的是,这个说法实际上是对CSS2的规范进行一定的化简以后的说法。严格的说法是,如果一个DIV块使用absolute定位方式,那么他是相对于距离它最新的“包含块”(或者叫“包含盒”)进行定位的。
这里有个两个概念需要解释:
1:什么叫“包含块”呢?“包含块”就是设置了非static值的position属性的DIV块。
2:什么叫作“最近”呢?最近是指从需要定位的DIV开始,查找它的父DIV,如果它不是包含块,在查看它的祖父DIV,如果它也不是包含块,再向上寻找,如果一直到body标记,都没有找到设置了非static值的position属性的DIV块,那么就以body作为它的定位基准DIV。
根据上面的定义,检查书中第246页,实例10.20的源代码,在#father的CSS中,没有设置position属性,因此它不是包含块,再向上,已经没有其他DIV块了,因此根据上面说的第二条解释,#blcok这个DIV的定位基准就是body标记,也就是书中说的,是相对这个页面来进行的定位的。
现在可以来做一个实验,如果在#father的CSS定义中,增加一条 position:relative ,然后再在浏览器中查看效果,就会发现,#block这个DIV会右移了,其中的原因就是#father这个块成为“包含块”了,并且是#block这个DIV的祖先,因此,#blcok就会以它为定位基准,而不是以body为定位基准了。
好了,上面的道理都讲完了,下面给读者朋友出一个题目,看看您是否真的理解了上面的说明。
题目:下列哪一项最好地描述了绝对定位?
选项:A. 后面的文本相对于盒子左边或者右边位置,围绕定位的盒子流动。
B. 即使页面滚动,盒子也保持在相对于定位的位置上。
C.相对于盒子原本的位置,偏移一定的距离。
D.盒子相对于包含盒放置。
请大家思考一下吧?答案应该是哪一个?