Irgendwelche Ideen?
CSS 4 wird Phantasie, wenn es einige fügt Haken in Fuß nach hinten . Bis dahin ist es möglich (wenn auch nicht ratsam) zu verwenden checkbox
und / oder radio
input
s zu brechen die übliche Art und Weise , dass die Dinge verbunden sind, und durch das auch CSS erlauben außerhalb seines normalen Umfang zu betreiben ...
/* Hide things that may be latter shown */
.menu__checkbox__selection,
.menu__checkbox__style,
.menu__hidden {
display: none;
visibility: hidden;
opacity: 0;
filter: alpha(opacity=0); /* Old Microsoft opacity */
}
/* Base style for content and style menu */
.main__content {
background-color: lightgray;
color: black;
}
.menu__hidden {
background-color: black;
color: lightgray;
/* Make list look not so _listy_ */
list-style: none;
padding-left: 5px;
}
.menu__option {
box-sizing: content-box;
display: block;
position: static;
z-index: auto;
}
/* ▼ - \u2630 - Three Bars */
/*
.menu__trigger__selection::before {
content: '\2630';
display: inline-block;
}
*/
/* ▼ - Down Arrow */
.menu__trigger__selection::after {
content: "\25BC";
display: inline-block;
transform: rotate(90deg);
}
/* Customize to look more `select` like if you like */
.menu__trigger__style:hover,
.menu__trigger__style:active {
cursor: pointer;
background-color: darkgray;
color: white;
}
/**
* Things to do when checkboxes/radios are checked
*/
.menu__checkbox__selection:checked + .menu__trigger__selection::after,
.menu__checkbox__selection[checked] + .menu__trigger__selection::after {
transform: rotate(0deg);
}
/* This bit is something that you may see elsewhere */
.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
display: block;
visibility: visible;
opacity: 1;
filter: alpha(opacity=100); /* Microsoft!? */
}
/**
* Hacky CSS only changes based off non-inline checkboxes
* ... AKA the stuff you cannot unsee after this...
*/
.menu__checkbox__style[id="style-default"]:checked ~ .main__content {
background-color: lightgray;
color: black;
}
.menu__checkbox__style[id="style-default"]:checked ~ .main__content .menu__trigger__style[for="style-default"] {
color: darkorange;
}
.menu__checkbox__style[id="style-one"]:checked ~ .main__content {
background-color: black;
color: lightgray;
}
.menu__checkbox__style[id="style-one"]:checked ~ .main__content .menu__trigger__style[for="style-one"] {
color: darkorange;
}
.menu__checkbox__style[id="style-two"]:checked ~ .main__content {
background-color: darkgreen;
color: red;
}
.menu__checkbox__style[id="style-two"]:checked ~ .main__content .menu__trigger__style[for="style-two"] {
color: darkorange;
}
<!--
This bit works, but will one day cause troubles,
but truth is you can stick checkbox/radio inputs
just about anywhere and then call them by id with
a `for` label. Keep scrolling to see what I mean
-->
<input type="radio"
name="colorize"
class="menu__checkbox__style"
id="style-default">
<input type="radio"
name="colorize"
class="menu__checkbox__style"
id="style-one">
<input type="radio"
name="colorize"
class="menu__checkbox__style"
id="style-two">
<div class="main__content">
<p class="paragraph__split">
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
</p>
<input type="checkbox"
class="menu__checkbox__selection"
id="trigger-style-menu">
<label for="trigger-style-menu"
class="menu__trigger__selection"> Theme</label>
<ul class="menu__hidden">
<li class="menu__option">
<label for="style-default"
class="menu__trigger__style">Default Style</label>
</li>
<li class="menu__option">
<label for="style-one"
class="menu__trigger__style">First Alternative Style</label>
</li>
<li class="menu__option">
<label for="style-two"
class="menu__trigger__style">Second Alternative Style</label>
</li>
</ul>
<p class="paragraph__split">
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
... ziemlich eklig , aber mit nur CSS und HTML ist es möglich, alles andere als das body
und :root
von fast überall zu berühren und erneut zu berühren, indem die id
und for
Eigenschaften von radio
/ checkbox
input
s und label
Triggern verknüpft werden . wahrscheinlich wird irgendwann jemand zeigen, wie man diese wieder berührt.
Eine zusätzliche Einschränkung ist, dass nur eines input
von einem bestimmten id
möglicherweise verwendet wird, mit anderen Worten zuerst checkbox
/ einen umgeschalteten Zustand radio
gewinnt ... Aber mehrere Beschriftungen können alle auf dasselbe verweisen input
, obwohl dadurch sowohl HTML als auch CSS noch gröber aussehen würden.
Ich hoffe, dass es eine Art Problemumgehung gibt, die in CSS Level 2 enthalten ist ...
Ich bin mir bei den anderen :
Selektoren nicht sicher , aber ich :checked
für Pre-CSS 3. Wenn ich mich richtig erinnere, war es so etwas [checked]
, weshalb Sie es beispielsweise im obigen Code finden können, z.
.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
/* rules: and-stuff; */
}
... aber für Dinge wie ::after
und :hover
bin ich mir überhaupt nicht sicher, in welcher CSS-Version diese zuerst erschienen sind.
Bitte verwenden Sie dies niemals in der Produktion, auch nicht im Zorn. Ein Witz, oder mit anderen Worten, nur weil etwas getan werden kann , heißt das nicht immer, dass es getan werden sollte .