CSS tabindex 单击隐藏主 div

标签 css

我正在尝试用 css 制作一个 tabindex 菜单。

这是我的 DEMO 来自 codepen.io

当您单击演示中的红色 div 时,气泡菜单将打开。但是,当您单击文本时,气泡 div 不会隐藏。

点击.hid类隐藏.eddel怎么办?

我知道我可以用 jquery 做到这一点,但我想了解我是否可以用 CSS 做到这一点。

<div tabindex="0" class="p_change">
    <ul class="eddel">
        <li class="hid">TEXT1</li>
        <li class="hid">TEXT2</li>
    </ul>
</div>

CSS

.p_change {
margin-left:515px;
 position:absolute;
 cursor:pointer;
}
.p_change:before {
    content: "";

}
.p_change:focus {
    pointer-events: none;

}

.p_change:focus .eddel {
    opacity: 1;
    visibility: visible;
}

.eddel {
    pointer-events: auto;
    position: absolute;
    z-index: 1;
    opacity: 0;
    visibility: hidden;
    transition: visibility 0.5s;
}

.p_change.no-pointer-events {
    pointer-events: auto !important;
}

.p_change.no-visibility .eddel {
    visibility: visible !important;
    display: none;
}

.p_change.no-visibility:focus .eddel {
    display: block;
}

.p_change.no-opacity .eddel {
    opacity: 1 !important;
}

.p_change {
outline: 0;
margin-top:10px;
}
.p_change:before {
    padding: 5px 10px;
    background-color: red;
}
.eddel {
  border:1px solid #d8dbdf;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
    background-image: rgba(235,235,235,1);
    background-image: -webkit-linear-gradient(top, #2cbdf2 0%,#fafafa 0%,#f5f5f5 100%);
    background-image: -moz-linear-gradient(top, #2cbdf2 0%,#fafafa 0%,#f5f5f5 100%);
    background-image: -o-linear-gradient(top, #2cbdf2 0%,#fafafa 0%,#f5f5f5 100%);
    background-image: -ms-linear-gradient(top, #2cbdf2 0%,#fafafa 0%,#f5f5f5 100%);
    background-image: linear-gradient(top, #2cbdf2 0%,#fafafa 0%,#f5f5f5 100%);
    -webkit-box-shadow: rgba(128,128,128,1) 0px 0px 0px 0px, inset rgba(255,255,255,1) 0px 0px 0px 0px;
    -moz-box-shadow: rgba(128,128,128,1) 0px 0px 0px 0px, inset rgba(255,255,255,1) 0px 0px 0px 0px;
    box-shadow: rgba(128,128,128,1) 0px 0px 0px 0px, inset rgba(255,255,255,1) 0px 0px 0px 0px;
    padding:0;
    width:80px;
    margin-top: 15px;
    margin-left: -50px;
    padding-top: 4px;
    padding-bottom:4px;
}
.eddel a{
    width:80px;
    height:25px;
    text-decoration:none;
  font-family:'lucida grande',tahoma,verdana,arial,sans-serif;
  font-size:13px;
  color:#000;
    }

/* arrow for the expanding part */
.eddel:after 
{
content: "";
position: absolute;
top: -9px;
left: 47px;
border-style: solid;
border-width: 0 7px 8px;
border-color: #d8dbdf transparent;
display: block;
width: 0;
z-index: 0;
}


.eddel:before {
    content: "";
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 7px 8px;
    border-color: #fafafa transparent;
    display: block;
    position: absolute;
    top: -8px;
    left:47px;
    z-index:1;
}
.eddel li {
    cursor:pointer;
    list-style-type: none;
    white-space: nowrap;
    width:80px;
    height:25px;
    text-align:left;
    line-height:25px;
    text-indent:5px;
    padding:0;
}
.eddel li:hover {
    background:#3b5998;
    width:80px;
    height:25px;
    padding:0px;
    margin:0px;
    cursor:pointer;
    color:#FFF;
    }
.eddel li:hover a {   color: #FFF; }
.p_change {
  text-align: left;
}

最佳答案

问题是 .eddel.p_change 中。然后当你点击它时,.p_change 仍然有 :focus。我建议您的解决方案是稍微更改 HTML 结构,例如:

<h1>Please click the red div</h1>
<div class="container">
    <div tabindex="0" class="p_change"></div>
    <ul class="eddel">
        <li class="hid">TEXT1</li>
        <li class="hid">TEXT2</li>
    </ul>
</div>

然后你可以使用 .p_change:focus + .eddel 而不是 .p_change:focus .eddel 作为选择器。

DEMO

注意:.container 是为了正确处理位置 :)

关于CSS tabindex 单击隐藏主 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31191787/

相关文章:

html - 如何使布局适合任何桌面屏幕?网站 HTML CSS

jquery - 使用 bootstrap tab pills 重叠面板主体中的内容

php - 如何使用 Wordpress 处理这个 CSS 问题?

css - 页脚未拉伸(stretch) 100%

css - 如何在一行中将固定元素和 % 元素并排放置

css - 使用 CSS 制作信息图 SVG 动画(圆环图)

javascript - 提交表单后用文本替换 html 按钮元素

javascript - Internet Explorer 中 style.filter 的默认值

javascript - 如何在所有浏览器上创建相同的 css/js 对象

javascript - ReactJS:文本对齐证明不起作用