Leider, ja - das ist momentan mit CSS nicht möglich. Wie in den Antworten und Kommentaren zu this question erwähnt, gibt es derzeit keine Möglichkeit, das übergeordnete Element Element erhalten Styling basierend auf seiner Kinder.
Um das zu tun, was Sie wollen, würden Sie im Wesentlichen, welche der Kinder zu erkennen, haben (<option>
) ausgewählt wird, und dann entsprechend den übergeordneten Stil.
Sie könnten jedoch erreichen dies mit einem sehr einfachen jQuery Aufruf wie folgt:
HTML
<select>
<option value="foo">Foo!</option>
<option value="bar">Bar!</option>
</select>
jQuery
var $select = $('select');
$select.each(function() {
$(this).addClass($(this).children(':selected').val());
}).on('change', function(ev) {
$(this).attr('class', '').addClass($(this).children(':selected').val());
});
CSS
select, option { background: #fff; }
select.foo, option[value="foo"] { background: red; }
select.bar, option[value="bar"] { background: green; }
Hier ist ein working jsFiddle.
Zurück zur Frage nach der Zukunft der Selektoren. Ja - die "Betreff" -Selektoren sollen genau das tun, was Sie erwähnen. Wenn/wenn sie jemals tatsächlich lebt in modernen Browser gehen, können Sie den obigen Code anpassen können:
select { background: #fff; }
!select > option[value="foo"]:checked { background: red; }
!select > option[value="bar"]:checked { background: green; }
Als Randnotiz wird noch darüber diskutiert, ob die !
vor oder nach dem Thema gehen sollte. Dies basiert auf dem Programmierstandard !something
, der "nicht etwas" bedeutet. Als Ergebnis könnte das Subjekt-basierten CSS aufzuwickeln tatsächlich wie diese statt suchen:
select { background: #fff; }
select! > option[value="foo"]:checked { background: red; }
select! > option[value="bar"]:checked { background: green; }
Ich kann Ihren ausgewählten awnser bestreiten, bleiben Sie dran. Es ist sehr "hacky" – Justin
@Justin - ich werde die akzeptierte Antwort ändern, wenn es eine bessere gibt. aber es ist im Moment gut genug für mich. – Aprillion
Überprüfen Sie meine Anwsser und lassen Sie mich wissen, ob es tatsächlich Ihre Frage bewahrheitet lol. – Justin