0

さまざまな方法 (絶対、固定、および静的) を介して配置された多数の要素があり、さまざまな z インデックスがあり、一部は他の要素の親です。任意の 2 つの要素について、どちらが前にあるかを判断する簡単で一般的な方法はありますか?

私が考えているアプローチは次のとおりです。

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

これが私が思いついたものです。良くない。一般的に私にはうまくいくが、あなたにはうまくいかないかもしれないいくつかの仮定をします:

  • 子は常に親の前にいると仮定します (相対配置と絶対配置を組み合わせることで、この仮定を破ることができます)。
  • 2 つの兄弟に同じ z-index を与えないことを前提としています。auto を 0 としてカウントします。

コードは次のとおりです(jqueryを使用してcoffeescriptで):

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 に答える