Toggle sidebar-div mit einem weiteren div mit CSS/Javascript
hier ist meine situation:
So, ich bin versucht zu ändern, sidebar, indem Sie auf anderen div. Es ist ein 100% Höhe sidebar, die ist fest an der rechten Seite des Viewports. Im wesentlichen versuche ich zu wickeln, ein 300px div um die 50px breit toggle-div und der 250px Breite sidebar-div, und ich möchte die Seitenleiste ausblenden Teil mit einem negativen margin-right pixel-Wert. Mit Hilfe der .toggle:active-Selektor (dies tritt auf, wenn der toggle-div geklickt wird), möchte ich zeigen, die sidebar-Teil durch die Einstellung, dass margin-right pixel-Wert wieder auf 0px.
Code so weit:
<div class="wrapper">
<a href="#">
<div class="toggle">Toggle</div>
</a>
<div class="cart">Cart</div>
</div>
CSS so weit:
.wrapper {
position:fixed;
width:300px;
height:100%;
background-color:orange;
top:0;
right:0;
margin-right:-250px;
}
.toggle {
position:relative;
display:block;
width:50px;
height:100%;
background-color:grey;
float:left;
}
.toggle:active .wrapper {
margin-right:0px;
}
.cart {
position: relative;
width:250px;
height:100%;
background-color:red;
float:right;
}
Hier ist meine Frage:
Wie kann ich das Ziel .wrapper zum ändern einer css-Attribut, wenn .toggle:aktiv engagiert ist? Auch, wie kann ich angeben, wenn die Seitenleiste sichtbar ist, und wenn es das nicht?
Ich bin neu in Javascript, aber wie es scheint, ich werde es brauchen, um dies zu tun durch die callback-Funktion. Wenn CSS-only ist möglich, ich würde tendieren zu dieser Lösung. Bitte beachten Sie, dass ich verwenden möchten, margin-right, so dass ich entscheiden, um mithilfe von CSS-transitions später zu animieren, mein element, Schiebetüren Links und rechts.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen die Verwendung von jQuery für diese. Es ist einfacher und weniger Chancen für Fehler.
http://api.jquery.com/toggle/
Nur CSS Lösung
DEMO: http://jsfiddle.net/Victornpb/yJYJC/30/
Nutzen Sie einfach dieses:
Javascript-Lösung
DEMO: http://jsfiddle.net/Victornpb/yJYJC/6/
JS:
CSS:
CSS-only Lösung (DEMO):
(Die versteckte checkbox wird verwendet, um zu bestimmen, den toggle-Zustand)
<input>
vor<div wrapped>
), die es gibt: stackoverflow.com/a/30311244/1765658:active
funktioniert nur mit links (also<a>
- tags), so kann es nicht verwendet werden.toggle
, da es ein<div>
. Auch wenn man es auf dem link, ich glaube nicht, es werde tun, was Sie wollen, obwohl, und es gibt keinen Weg zum "Ziel" der Eltern.Mit einem
<a>
um einen<div>
wie, ist ziemlich seltsam zu, sollten Sie nicht brauchen, die.So, müssen Sie javascript, ja. Aber man kann nicht wirklich Ziel einer Klasse in javascript. Sie haben zwei Lösungen:
Wenn Sie hinzufügen können
id
auf der banderole, können Sie erstellen eine Funktion in javascript, schaltet der Zustand der Seitenleiste:Anmerkungen: Der Teil
(document.getElementById('myId').style.marginRight == '0') ? '-250px' : '0'
tests, wenn diemargin-right
0 ist und wenn ja, ändert es auf 250px und Umgekehrt. Was ich getan habe, hier vielleicht auch nicht der beste Weg, dies zu tun, aber ich wollte, es zu begrenzen, etwas kurz, so dass Sie können verwenden Sie es auf diese Weise, wenn Sie nicht wirklich verstehen, javascript-sehr gut. Sie werden in der Lage sein, um es zu verbessern, wenn Sie bekommen werden, um es besser zu wissen.Auch Sie haben, um die
onclick
auf jeden.toggle
div haben Sie... können Sie event-Handler, aber ich bin mir ziemlich sicher, dass Sie nicht wissen, was das bedeutet und dass möglicherweise nicht eine gute Idee sein, einfach kopieren-einfügen. Sie können immer mit dem zweiten Punkt an, denn es macht die Sache relativ einfach zu verstehen.Wenn Sie wirklich wollen, die
class
(oder wiederholen müssen, was eine Menge), verwenden Sie jQuery, eine javascript-Bibliothek, indem diese (vorzugsweise in der<head>
):Dann können Sie diese (auf den Kopf möglichst still):
Dieses mal habe ich eine boolean (das dauert
true
oderfalse
als Wert) zu überprüfen, wenn der Wagen sichtbar war oder nicht, ändern Sie den Wert bei jedem Klick auf den gleichen Zeitpunkt wie diemargin-right
. Dieser macht das gleiche wie vorher, nur schaltet zwischen -250px und 0, aber Sie brauchen nicht, um es in jeder .wechseln Sie erstellen können und es funktioniert mit der a-Klasse. Es macht Sie jQuery verwenden, obwohl (das ist nicht wirklich ein problem aber ich denke)Sehe ich nicht wirklich, warum Sie ändern möchten
margin-right
obwohl... Wenn Sie wollen einfach nur, um es verschwinden, können Siedisplay: none;
oder wenn Sie wirklich wollen, ändern Sie die position, die Sie verwenden könnenright
(in diesem Fall).display: none
noch, dass, obwohl. Ich werde Bearbeiten, dass..Nur CSS, zwei Seitenleiste mit verschiedenen Verhalten
Gibt es zwei verschiedenen CSS nur animierte sidebar:
Features:
hover
(entstanden aus @witim.uns die Antwort) mit einigen VerbesserungenWenn nicht vollständig abgeschlossen, es gibt einiges zu
Open cart
/Your cart
verticalyCSS:
HTML:
toggle:checked
(entstanden aus @niceass Antwort)Gleichen Verbesserungen, aber mit einem unsichtbare checkbox, so dass Sie haben, klicken Sie auf (text) der Seitenleiste, um Sie zu öffnen.
CSS:
HTML:
overflow:scroll
Eigenschaft div Warenkorb.