在文章1里,提到了各种可能用到的高宽值,为我们对元素的位置的理解与设置铺垫了基础,现在来看看文档中元素的位置的相关问题。
对于定位元素,我们可以在css中设置其top、left、bottom、right 属性,对元素进行位置的指定。定位,一定要有个相对参照点,把参照点作为原点来对元素进行定位。在此基础上,我们第一想到的是 position:absolute 的元素,因为其定位就是相对于最近的定位祖先元素进行定位,那么我们就可以通过控制其祖先的位置,然后把一个 absolute 元素来相对祖先进行定位,进行一探究竟。
通过实例,我们可以看到,设置 top、left、bottom、right 属性对元素定位,其实是两个元素的最靠近的两条 border 边界线之间的距离。
而 fixed 元素,不过是把相对的定位元素换成 html 元素 罢了(即相对文档定位),计算方式还是一样。
这里有个问题?
需要注意的是,前面都是只设置了定位属性,而没有设置 margin ,默认情况下俩定位元素间 margin 为0(默认情况下body和html间存在margin)。那设置了 margin 又是什么情况呢?从上图可知,在设置了margin情况下,在 margin 计算完成后(边距融合等情况计算后),margin 视为 某一个元素的一部分,即此时 left (或其它) 代表的是完整的两个元素之间的距离,从一个元素的最 靠近另一个元素的border的一条边 到另一个元素的 margin 的外侧的距离。在我们视觉看来,此时两个元素间的距离是大于 left (或其它)的值的,原因是 margin 不可见,而 margin 是算作某一个元素的内部的,不在包含在 left (或其它)。
在对定位有了初步的了解之后,我们来看一下,涉及到位置的地方:
在多种事件对象中,包含了位置相关信息,比如:
TouchEvent 中的 Touch 类对象就包含了
Touch.screenY
、Touch.clientY
、Touch.pageY
等属性,分别指事件发生时的 相对于 屏幕 、 浏览器视口 、 文档 的坐标。
UIEvent 作为 TouchEvent 的父类,也有差不多的属性。
MouseEvent 作为 TouchEvent 的兄弟类,同样有差不多的属性。
getBoundingClientRect() 返回相对于视口坐标