单击图层/ div

时间:2009-05-29 10:52:33

标签: html css

如果我在一个页面上有两个图层,并且第二层与第一个图层的一部分重叠,那么它是否可以“点击”?

我在第一层中有链接,第二层重叠,这会阻止链接被点击。有没有办法让图层显示,但是点击,同时仍然可以点击它自己的链接?

编辑:

这是一个使用html和样式表的例子。

当与第3层中的标题内联时,测试链接变得不可点击,但在下面它们没问题。有没有办法纠正这个问题?

<title>Test</title>
<link rel="stylesheet" href="test.css" type="text/css">
<body>
<div id="Layer0">
<div id="Layer1" class="Layer1">
<h3 align="left">Brands</h3>
</div>
<div id="Layer2" class="Layer2"><h1>TEST</h1>
<div id="rightlayer">
<a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p>
</div>
</div>
<div id="Layer3" class="Layer3"><h1>Ed Hardy Auctions</h1>
</div>
</div>
</body>
</html>

和css

#Layer0 {
    width:100%;
    height:100%;
}
body {
    margin:10px 10px 0px 10px;
    padding:0px;
    color:#999999;
    font-family:"Trebuchet MS",arial,sans-serif;
    font-size:70.5%;
}
#Layer1 {
    position:absolute;
    left:10px;
    width:200px;
    margin-top:17px;
    font-size:1.0em;
    padding-left:12px;
    padding-top:8px;
}
#Layer2 {
    background:#fff;
    margin-left:199px;
    color:#000;
}

#rightlayer {
float:right;
}
.Layer3 {
position:absolute;
top:67%;
padding:20px;
width: 100%;
}

7 个答案:

答案 0 :(得分:28)

以为我会更新这个,因为我几个小时都在努力,并且认为我找到了解决方案。看看使用Jquery但CSS属性:

pointer-events:none;

......完全按照自己的意愿行事。

答案 1 :(得分:5)

如果您希望div保持在当前的x,y,(最重要的是)z,则不可能 - 只有“top”图层可以点击。


OP编辑附录:

将CSS布局想象为您正在使用一些纸张(如果您为所有“图层”div提供不同的背景颜色,则 更容易可视化)。渲染引擎会为您找到的每个元素剪切出一些纸张(或者它可以解决)。它按照它遇到的顺序执行此操作,将每一页纸放在页面上 - 最后一项将位于顶部。

现在你已经告诉渲染引擎将你的第3个div放在与第2个重叠的位置。现在,您希望能够“看到”涵盖的内容。不适用于纸张,不适用于HTML。仅仅因为它透明并不意味着它没有占用空间。

所以你必须改变一些东西。

看看你的CSS和标记(老实说可以清理,但我会假设还有其他标记,你没有向我们展示哪种方法可以证明这一点),有几个简单的胜利方式:

1)。 在Layer3上设置-1的z-index - z-index是如何从默认值(遇到)更改分层顺序的方法。这只会将整个Layer3移动到页面的其余部分下方,这样隐藏的内容就会暴露出来,反之亦然,具体取决于内容。

2)。 将宽度从100%更改为80%,或者更有可能给你使用pos:abs set left:0px and right:199px; (我猜测Layer2上的填充左边是一个预期的列宽?)。这样做的代价是你的Layer3不再是100%宽度

3)。 Google“CSS列布局”,找到一种反映您需要的模式并进行调整。每个可以完成的CSS布局已经完成了一百万次。存在解决您的问题的标准技术。如果你没有积累经验,CSS很难,所以利用他人的经验。不要重新发明轮子。

答案 2 :(得分:4)

这将是一项庞大的工作,但这是可能的 您需要捕获顶层/ div上的click事件,并找到光标x-y位置 然后找到顶层下面的图层/ div中的所有链接,看看它在屏幕上的位置是否落在当前鼠标位置附近。
然后,您可以触发匹配链接的单击 如果遇到麻烦,我会使用jQuery(如果你还没有),然后使用jQuery标签重新发布。

答案 3 :(得分:0)

没有看到一些代码就很难分辨。

您可以尝试在底层设置z-index,但这适用于已使用绝对,相对或固定(位置:绝对)定位的元素。


看到代码后编辑:

添加位置:相对;的z-index:100;到#rightLayer。

或者你可以从.Layer3中删除宽度:100%。


您可能想要重构代码,并为#rightLayer和.Layer3采用两列布局。

CSS

#Layer0 {
    width:100%;
    height:100%;
}
body {
    margin:10px 10px 0px 10px;
    padding:0px;
    color:#999999;
    font-family:"Trebuchet MS",arial,sans-serif;
    font-size:70.5%;
}
#Layer1 {
    width:200px;
    margin-top:17px;
    font-size:1.0em;
    padding-left:12px;
    padding-top:8px;
}
#Layer2 {
    background:#fff;
    margin-left:199px;
    color:#000;
}

#rightlayer {
float:right;
}
.Layer3 {
}

HTML

<div id="Layer0">
    <div id="Layer2" class="Layer2">
        <h1>TEST</h1>
    </div>
    <div id="Layer1" class="Layer1">
        <h3 align="left">Brands</h3>
    </div>
    <div class="content">
        <div id="rightlayer">
            <a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p>
        </div>
        <div id="Layer3" class="Layer3">
            <h1>Ed Hardy Auctions</h1>
        </div>
    </div>
</div>

答案 4 :(得分:0)

我假设从示例中,右侧层中的链接是唯一需要单击的链接,并且您在其他层中没有链接。如果是这样,您可以通过更改div的z-index顺序来解决问题。

Layer1和Layer3具有绝对位置,因此如果向Layer2添加位置样式(绝对或相对),您将能够将该div拉到前面,同时将右层div拉到比Layer3更高的层中

我在CSS中添加了以下内容:

#Layer2 {    
    position: relative;
    z-index: 1;
}

从我所看到的,当前页面设置就像它一样,但是将所有元素(包括带有链接的右层)拉到前面,这样你就可以点击它中的所有链接

出于调试目的,我建议将背景颜色添加到所有不同的层,以了解不同层的z-index顺序。在背景颜色到位的情况下,很容易发现掉落在链接上的图层,但也要验证新的z-index顺序是否可以使链接可用。

希望这有帮助!

答案 5 :(得分:0)

我几年前向Firefox Bugzilla提交了一个错误,说Firefox中存在这个错误。

Mozilla工程师告诉我,这实际上并不是一个错误,而且根据HTML / CSS规范它是正确的行为。 不幸的是,我找不到原始的bug,因为它是在大约6年前。

我提交错误的原因是因为我可以在使用IE时点击顶部div到下面的链接(我认为6)但Firefox不会让我。

与往常一样,事实证明,IE的实施方式不正确,Firefox正按照规范的意图运作。

仅仅因为div是透明的并不意味着你应该能够点击它。

我不确定如何使用JavaScript或CSS解决这个问题。我会退后一步,重新考虑一下你想要达到的目标以及你是如何努力实现它的。

格雷格

答案 6 :(得分:0)

你能不能简单地将div的宽度设置为auto(绝对定位的默认值 - 即只删除宽度:.Layer3的100%)。

这样,div只会在必要时加宽,而不是不必要地重叠链接。