2016-07-11 14 views
2

Ich habe eine Seite mit einer Seitenwand, die eine position:fixed auf meiner Seite hat. In der CSS, die folgende @ media Abfrage, um das Panel zu verstecken, wenn die Bildschirmbreite unter 1580px (das ist die meisten Bildschirme).@media Abfragen und regelmäßige CSS-Interaktionen

@media screen and (max-width:1580px) { 
    .sideSection { 
    display: none; 
    } 
} 

Ich habe eine versteckte Checkbox und ein Etikett erstellt, um Sie auf das Panel über den Bildschirm zeigen,

<input type="checkbox" name="showSide" id="showSideSection"/> 
<label for="showSideSection" id="sideSectionButton">Show Side Section</label> 
<div class="sideSection"> 
[...] 

und in dem mit CSS:

#showSideSection:checked + label + div { 
    display: inline; 
} 

Das funktioniert perfekt Theoretisch, aber da @media dynamisch ist, wird das Seitenfeld immer ausgeblendet. Gibt es eine Möglichkeit, die @ media Abfrage überprüfen zu lassen, wenn #showSideSection:checked ist; oder eine bessere Möglichkeit, das Panel insgesamt auf Bildschirmen mit einer Breite> 1580 zu zeigen und durch eine Schaltfläche ersetzt zu werden, die das Feld beim Klicken auf Bildschirme mit einer Breite von < 1580 anzeigen würde?

Edit: Dies ist die CSS für die sideSection:

.sideSection { 
    position: fixed; 
    right: 0; 
    top: 180px; 
    height:calc(100% - 180px); 
    width: 230px; 
    padding-top: 50px; 
    padding-right: 20px; 
    padding-left: 10px; 
    background: #ededed; 
    border-left: 5px solid #e33d3d; 
} 
+0

Warum würden Sie ein verstecktes Kontrollkästchen erstellen? Das ist so falsch/hackisch. –

+0

@JosipIvic Ich benutze den: checked Zustand, um Dinge in der CSS zu tun, aber ich möchte nicht ein hässliches Kontrollkästchen in der Mitte meiner Seite zeigen ... – Saryk

+0

kann mir Ihr genaues Layout zeigen. – Fiido93

Antwort

0

Dies kann nicht mit reinem CSS, Ihre beste Wette eine andere Klasse zu zeigen, die Platte und dann Javascript um diese Klasse hinzufügen verwenden zu erstellen wäre acheived werden in die Seitenleiste, wenn das Kontrollkästchen aktiviert ist.

$('#checkbox').change(function(){ 
if(this.checked){ 
    $('#Section').addClass('checked'); 
} 
else { 
    //do something else 
    $('#Section').removeClass('checked'); 
} 
}) 

http://jsfiddle.net/9UQf8/22/

+0

Und in der Fall von Javascript vs Medienabfragen, welche übertrifft die andere? Ich denke, wenn ich js verwende, um die Panel- und Medienabfragen zu zeigen, um es zu verstecken, bleibt das Problem Art ... Wäre es besser, Medienabfragen zu verwerfen und Javascript zu verwenden, um Bildschirmbreite zu entdecken und es so auch zu ändern? – Saryk

+0

Verwenden Sie die Medienabfragen wie Sie sind - aber erstellen Sie eine neue Klasse außerhalb der Medienabfrage, um das Panel anzuzeigen - verwenden Sie dann JS, um diese Klasse dem Element hinzuzufügen, wenn das Kontrollkästchen aktiviert ist – JT91

+0

@Saryk Ich habe meine Antwort mit einer JS-Fiddle aktualisiert (mit Jquery) – JT91

0

Ich konnte es dank funktioniert dieser https://jsfiddle.net/xhe96kqr/2/, mit freundlicher Genehmigung von Marcos Pérez Gude, den ich danken. Verwenden Sie nichts anderes als css und @Media Queries:

#showSideSection:checked + label + div { 
    display: block; 
} 

@media screen and (max-width:400px) { 
    .sideSection { 
    display: none ; 
    } 
} 
+0

sollte es angezeigt werden: Block nicht inline. – Fiido93

Verwandte Themen