2017-06-28 5 views
2

Ich verwende Pure JS und Flexbox, um Gitter für mein Projekt zu erstellen.Pairing-Display: Flex mit Display: Block und Display: keine

Teile des Projekts sind ausgeblendet mit display: none beim Laden der Seite, aber nach dem Klicken auf den Button sollte zwischen display none und block umgeschaltet werden.

Leider ruiniert dies entweder komplett: flex oder schaltet nicht um. Gibt es eine Möglichkeit, diese beiden Eigenschaften zusammenzuarbeiten? Hier

ist JSfiddle i zusammen https://jsfiddle.net/c3dw0woa/

<div class="container"> 
<div>Text hello I was hidden</div> 
</div> 

<button class="dis_legend">Click to display</button> 

CSS

.container{ 
display: flex; 
} 

JS

var container = document.querySelector('.container'); 
container.style.display = "none"; 

var legend_button = document.querySelector('.dis_legend'); 

var container_displayed = false; 
container.style.display = "none"; 

legend_button.onmousedown = function(){ 
if(legend_displayed == false){ 
    container.style.display = "block"; 
    container_displayed = true; 
} else { 
    container_displayed.display = "none"; 
    container_displayed = false; 
} 
} 
+0

Wenn Ihr Container display: flex ist, warum schalten Sie ihn zwischen none um und blockieren? Sollten Sie nicht zwischen nichts und Flex wechseln? – BoltClock

Antwort

2

Sie ein immer display= flex in js verwenden, um zu verhindern, das Problem

änderte ich ein paar Dinge in Ihrem JavaScript-Code

See Ergebnis:

var container = document.querySelector('.container'); 
 
var legend_button = document.querySelector('.dis_legend'); 
 

 
var container_displayed = false; 
 
container.style.display = "none"; 
 

 
legend_button.onmousedown = function() { 
 
    if (container_displayed == false) { 
 
    container.style.display = "flex"; 
 
    container_displayed = true; 
 
    } else { 
 
    container.style.display = "none"; 
 
    container_displayed = false; 
 
    } 
 
}
.container { 
 
    display: flex; 
 
}
<div class="container"> 
 
    <div>Text hello I was hidden</div> 
 
</div> 
 

 
<button class="dis_legend">Click to display</button>

+0

Das funktioniert, danke! Ich habe auch gerade gesehen, dass ich im JS-Code ekelhaften Tippfehler gemacht habe. Aber es würde immer noch nicht laufen, weil ich das Display nie realisiert habe: Flex bedeutet auch, dass es tatsächlich angezeigt wird. Gut zu wissen. – BigPaws

+0

Ich bin froh, dass es geholfen hat :) – Chiller

1

Chiller-Lösung sollte funktionieren, aber hier ist eine weitere Option, falls Sie es tun wollen mit einem Ereignis-Listener:

var container = document.querySelector('.container'); 
container.style.display = "none"; 

var legend_button = document.querySelector('.dis_legend'); 

var container_displayed = false; 
container.style.display = "none"; 

legend_button.addEventListener('click', function(){ 
     if (container.style.display == "none"){ 
     container.style.display = "block"; 
      } else { 
     container.style.display = "none"; 
     } 
}) 
+0

getestet, funktioniert auch, aber ich bevorzuge Chillers Version :) Danke trotzdem für Ihre Zeit! – BigPaws

Verwandte Themen