2013-10-27 2 views
9

Ich erstelle eine Tab-ähnliche Funktionalität mit <ul> und <li> Elemente, und ich bemerkte diese Art von unerwartetem Verhalten mit CSS background-color: inherit.
Man würde erwarten, dass inherit würde eigentlich nicht bedeuten transparent, sondern child.background-color == parent.background-color (vergeben Sie den Pseudocode).CSS Inherit für unbekannte Hintergrundfarbe ist eigentlich transparent

Mein Code ist ziemlich einfach, aber ich habe ein Problem: Ich entwickle für variable Bedingungen. Das bedeutet, dass ich nie wissen könnte, welche Hintergrundfarbe mit meinem Code verwendet wird, und ich möchte nicht meine eigene vorstellen.

Ich habe eine JSFiddle vorbereitet, in der der Hintergrund zufällig auf Seite geladen wird, um die Zufälligkeit des Ziels meines Codes nachzuahmen. Das offensichtliche Problem ist, dass die aktive Registerkarte mit ihrer Hintergrundfarbe voreingestellt aussieht. Also habe ich es in background-color: inherit geändert. (Siehe JSFiddle 2)

Während dies offensichtlich den Hintergrund Problem gelöst, die Grenze des Elements unter (cg_content) begann wieder zu zeigen, weil die inherit Eigenschaft, wie transparent wirkt, statt, was es tut, wenn es eine Reihe Hintergrund- ist Farbe.

Frage ist: Gibt es eine Möglichkeit, es die tatsächliche Hintergrundfarbe ohne Javascript erben?
Wenn nicht, könnten Sie einen besseren Weg vorschlagen, um diese Registerkarten ohne voreingestellte Farben gut aussehen zu lassen?

S.S .: Der Inhalt <div> sollte kein untergeordnetes Element der <li> Elemente sein, da diese Registerkarten einige Inhalte teilen.
P.S.2: Ich kann es nicht klarer machen, dass ich offensichtlich weiß, wie man das mit JS macht. Ich will es einfach nicht.

Antwort

15

Einstellung background-color: inheritbewirkt, dass die Hintergrundfarbe des übergeordneten Elements annimmt.

Der Grund ist es transparent nimmt, weil die Hintergrundfarbe der Eltern (die li) isttransparent (der Standardwert).

Das einzige andere Element in Ihrem zweiten JSFiddle, das eine Hintergrundfarbe hat, ist #unknown_background, das ist der Ur-Urgroßvater des Ankers.

Fügen Sie div, ul, li { background-color: inherit; } an das Ende Ihres Stylesheet und der Hintergrund wird bis zum Ende geerbt und der Rahmen wird nicht angezeigt.

+0

Ich würde auch empfehlen, den Container div für die ul. Loszuwerden. Wenn Sie es entfernen, ändert sich das Ergebnis überhaupt nicht und Sie müssen keine neue CSS-Regel und ein anderes Element mit einer ID erstellen. – Cadoc

+0

Danke @Quentin. Das ist in der Tat eine Lösung für die vereinfachte Version meines Codes. Aber im realen Beispiel kann mein Code Teil eines Ururgroßkindes des Elements mit der tatsächlichen Hintergrundfarbe sein, und ich habe keine CSS-Kontrolle für die Elemente dazwischen. Irgendeine Idee damit? – mavrosxristoforos

+0

In CSS gibt es keine Möglichkeit, ein Element dazu zu bringen, seinen Hintergrund von einem beliebigen anderen Element (oder sogar einem Vorfahren) zu übernehmen. Sie können entweder spezifisch sein oder Sie können vom übergeordneten Element erben. – Quentin

Verwandte Themen