首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过单击按钮打开div,通过仅使用CSS单击外部来关闭div

通过单击按钮打开div,通过仅使用CSS单击外部来关闭div
EN

Stack Overflow用户
提问于 2017-07-28 18:30:32
回答 2查看 78关注 0票数 0

我目前有一个打开和关闭div的按钮。我想改进这个功能:我希望div在按下div时也能关闭。在CSS和HTML中可以做到这一点吗?

它用于按钮'top-bar-btn settings‘:

编辑

代码语言:javascript
复制
<div class="top-bar-btn" id="top-bar-btn">
  <button class="top-bar-btn create"
          title="Créer une nouvelle discussion">
          <!--(click)="onCreateChatWindow()">-->
    <i class="glyphicon glyphicon-edit"></i>
  </button>


  <button class="top-bar-btn settings"
          title="Réglages"
          (click)="onSettingsChatWindow()">
    <i class="glyphicon glyphicon-cog"></i>
  </button>
  <div id="outside" (click)="hide()"></div>

  <button class="top-bar-btn reduce"
          title="Réduire la fenêtre"
          (click) = "onReduceChatThreads()">
    <i class="glyphicon glyphicon-minus"></i>
  </button>
</div>

代码语言:javascript
复制
 <div class="settings-notification"
   id="settings-notification">
<div class="tr triangle">
  <div class="tr inner-triangle">
  </div>
</div>
<div class="sound-signal">
  Signal sonore :
  <input type="radio" name="soundsignal" id="soundsignal1" checked="checked">
  <label for="soundsignal1">Oui</label>
  <input type="radio" name="soundsignal" id="soundsignal2">
  <label for="soundsignal2">Non</label>
</div>

<div class="flash-signal">
  Signal visuel :
  <input type="radio" name="flashsignal" id="flashsignal1" checked="checked" (click)="flashSignal()">
  <label for="flashsignal1">Oui</label>
  <input type="radio" name="flashsignal" id="flashsignal2" (click)="notFlashSignal()">
  <label for="flashsignal2">Non</label>
</div>

代码语言:javascript
复制
#outside{
display:none;
height:100%;
width:100%;
position:fixed;
top:0px;
left:0px;
z-index:1;
}


hide(): void {
    document.getElementById('outside').style.display = 'none';
    document.getElementById('settings-notification').style.display = 'none';
}

onSettingsChatWindow(): void {
    document.getElementById('outside').style.display = 'block';
    document.getElementById('chat-threads').classList.toggle('display-settings');
}

我不明白为什么它不能工作。这只起作用一次,并且在div不再显示之后。你知道为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-28 18:57:17

你不能显示/隐藏,移动...仅使用CSS或HTML的对象。但是你可以使用JavaScript。用display:none;创建两个div一个是你想要显示的div,另一个是z-index ( height100% ),z-index小于div你想要显示/隐藏但比任何其他元素更多的元素,以及position:fixed;)在div中表示背景添加onclick="hide()",当你在你的div之外单击时,它将调用一个函数<代码>D9onclick="hide()">。并且只需添加函数hide(),这将使两个div-s消失。

代码语言:javascript
复制
function myFunction(){
document.getElementById("outside").style.display = "block";
document.getElementById("myDiv").style.display = "block";
}

function hide(){
document.getElementById("outside").style.display = "none";
document.getElementById("myDiv").style.display = "none";
}
代码语言:javascript
复制
#outside{
display:none;
height:100%;
width:100%;
position:fixed;
top:0px;
left:0px;
z-index:1;
}

#myDiv{
background:red;
width:300px;
height:100px;
position:absolute;
top:100px;
left:100px;
display:none;
z-index:2;
}
代码语言:javascript
复制
<button onclick="myFunction()">Show div</button>
<p><span>some text</span></p>
<p><span>some text</span></p>
<p><span>some text</span></p>
<p><span>some text</span></p>
<p><span>some text</span></p>
<div id="outside" onclick="hide()"></div>
<div id="myDiv"></div>

票数 0
EN

Stack Overflow用户

发布于 2017-07-28 19:06:03

只使用超文本标记语言和CSS是不可能的,但是这个JavaScript应该可以做到:

代码语言:javascript
复制
window.onclick = function(event) {
  if (!event.target.matches('#settings-notification')) {
    document.getElementById('chat-threads').classList.toggle('display-
    settings');
  }
}

当用户单击任意位置时,脚本会检查用户是否单击了div或页面的其余部分。如果是页面的其余部分,则关闭div。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45371146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档