我正在寻找div
在click
. 目标是只使用纯 CSS,不使用 jQuery。
2 回答
考虑一下你想要这样的东西:
我们尽可能简单地编写我们的标记。一个元素为container
,一个元素为我们link
,另一个元素为popup
:
<!-- [container] -->
<div class="link-with-popup">
<!-- link -->
<div class="link">CSS</div>
<!-- [popup] -->
<div class="popup">
<div class="box">CSS Description</div>
</div>
<!-- [/popup] -->
</div>
<!-- [/container] -->
这是图中我们的层结构:
容器
让我们为我们的容器编写 CSS。
.link-with-popup {
/* for visualizing */
background: yellow;
/* we need relative, because childs are absolute */
position: relative;
margin-bottom: 10px;
height: 30px;
width: 400px;
}
[!]
请注意,我们制作了我们的容器relative
。因为孩子们将处于absolute
模式中。
关联
我们从左边创建我们link
的绝对元素,如上图所示。
.link {
background: blue;
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100px;
z-index: 10;
}
弹出
popup
元素的尺寸与容器相同,因此我们将所有top
, left
, right
,bottom
属性设置为0
。
.popup {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: green;
z-index: 20;
}
[!]
注意z-index
ofpopup
element 必须大于link
element。
.popup {
/* we won't show the popup yet */
display: none;
}
现在,我们将得到这个结果(在 jsFiddle 上查看):
现在我们想要click
我们的链接。这必须通过:active
CSS 中的伪选择器来完成。但是我们必须如何展示poup
呢?我们必须通过link
. 我们+
在 CSS 中使用选择器:
.link:active + .popup {
display: block;
}
在jsFiddle上查看结果。但问题是当用户意识到鼠标时,弹出窗口会消失(因为它display
设置为none
)。因此,我们:hover
为 the 设置规则popup
并制作它block
。
.popup:hover {
display: block;
}
检查jsFiddle 演示。现在我们已经足够接近了。唯一的问题是popup
元素,隐藏我们的link
. 但这没关系,因为我们不会background
为我们的popup
(它将是transparent
)设置。
文本
对于想要text
的popup
元素,我们设置了以下规则:
.popup .box {
position: absolute;
/* note that we make a gap from left to don't hide the link */
left: 130px;
top: 0;
right: 0;
bottom: 0;
background: #505050;
}
检查jsFiddle 演示。现在我们拥有了我们需要的所有东西。
现在是时候制作我们的popup
元素了transparent
(通过设置background
astransparent
或简单地删除background: green;
规则):
.popup {
background: transparent;
}
这是最终的jsFiddle 结果。如果你给它添加一些额外的 CSS,它会更时尚。我创造了这样的东西。
需要记住的一些重要注意事项:
link
在最终结果中, (蓝色)和popup
(灰色)之间存在差距。但事实是,灰色元素不是我们的popup
。它是容器的popup
子元素,我们的弹出窗口是容器上的 100% 宽度和高度元素。
另一种方法是使用 :target 属性(仅适用于现代浏览器)。
这是一个 qucik DEMO,其中我通过应用隐藏了 div,opacity: 0;
当您单击链接时,div 更改为opacity: 1;
链接和 div 使用 url 中的哈希匹配。
这是我的示例中的代码。
HTML
<a href="#pop">Click me</a>
<br />
<div id="pop"></div>
CSS
#pop {
width: 100px;
height: 100px;
background: #000;
opacity: 0;
}
#pop:target {
opacity: 1;
}
不过也有一些副作用。浏览器将跳转/向下滚动(不确定是否可以防止这种情况发生?)到匹配的 div,由于我们在 url 中使用哈希,它会影响浏览器历史记录,如上所述,它仅适用于现代浏览器.
编辑如果您想研究纯 CSS 点击事件的其他黑客/技巧,这是一个很好的帖子 - http://tympanus.net/codrops/2012/12/17/css-click-events/