0

我有一堆元素,通过各种方法(绝对、固定和静态)定位,具有各种 z-indexes,其中一些是其他元素的父级。对于任何两个元素,是否有一种简单、通用的方法来确定哪个在另一个之前?

我正在考虑的方法是这样的:

Let A and B be the two elements.  
Let X and Y be two sibling elements such that X is A or an ancestor of A, and Y is B or an ancestor of B.  
If X has a higher z-index than Y, then A is in front of B.

但是,对于一个简单的问题,这似乎有很多代码,而且我还担心可能存在无法给出正确答案的极端情况。有人有更好的主意吗?

4

1 回答 1

0

所以这就是我想出的。不是很好。做出一些通常对我有用但可能对你不起作用的假设:

  • 假设孩子总是在他们的父母面前(你可以通过混合相对定位和绝对定位来打破这个假设)
  • 假设您没有给两个兄弟姐妹相同的 z-index。将 auto 计为 0。

这是代码(在coffeescript中,使用jquery):

is_in_front_of = (div1, div2) ->

    z_index = (d) ->
        z = d.css 'z-index'
        z ?= 0
        if z == 'auto' then z = 0
        return z

    if $.contains div1[0], div2[0]
        return false

    if $.contains div2[0], div1[0]
        return true            

    while div1.parent().length > 0 and not $.contains div1.parent()[0], div2[0]
        div1 = div1.parent()

    while div2.parent().length > 0 and not $.contains div2.parent()[0], div1[0]
        div2 = div2.parent()

    return z_index(div1) > z_index(div2)
于 2012-10-17T18:31:11.757 回答