2016-04-04 17 views
2

Ich habe diesen Code:Tragen Sie eine CSS auf alle Elemente eines bestimmten div

<div class="main"> 
 
\t <div class="div1"> 
 
\t \t <div> 
 
\t \t \t <p> 
 
\t \t \t \t <a href="#"></a> 
 
\t \t \t </p> 
 
\t \t \t <span></span> 
 
\t \t </div> 
 
\t \t <p>Loremp Loremp</p> 
 
\t \t <p>Loremp Loremp</p> 
 
\t \t <a href="#">Loremp Loremp</a> 
 
\t \t <span>Hello World</span> 
 

 
\t </div> 
 

 
\t <div class="div2"> 
 
\t \t <p>Loremp Loremp</p> 
 
\t \t <p>Loremp Loremp</p> 
 
\t \t <a href="#">Loremp Loremp</a> 
 
\t \t <span>Hello World</span> 
 
\t </div> 
 
</div>

Gibt es eine Möglichkeit für mich, ohne alle Elemente div1 Ziel, dass auf angewendet wird div2?

Was ich tun möchte, ist, um den CSS-Code sehr einfach zu machen, ohne jedes Element von div1 eins nach dem anderen zu zielen.

/*I want to make something like that but without affecting the div2*/ 
 

 
*{ 
 
color: blue; 
 
}

+2

'# div1 * {Farbe: blau; } ' – Pointy

+2

Das' # 'bezeichnet die Eigenschaft 'id', aber das' div' verwendet die Eigenschaft 'class'. Sie sollten ".div1" anstelle von "# div1" verwenden. – alesc

+1

@alesc rechts du bist, habe nicht genau genug geschaut :) – Pointy

Antwort

8

Einfach

.div1 * { 
color: blue; 
} 

Oder noch besser, nur

.div1 { 
color: blue; 
} 

In meinem ersten Code-Block, alle Teilelemente von Elementen mit Klasse div1 haben color: blue angewendet.

Im zweiten Block des Codes werden nur die Elemente mit Klasse div1color: blue angewendet haben, aber alle Subelemente erbt es auch (sofern sie es überschreiben). Daher sollte der Effekt gleich sein.

+0

Danke. In meinem Fall brauche ich den ersten Code –

+1

. Denken Sie auch an die Antwort von [Bruno Toffolo] (http://Stackoverflow.com/a/36411030/4623467), in der er bemerkte, dass die Verwendung von '*' sehr ineffizient ist und daher davon abgeraten wird. – alesc

+0

Die Frage, die ich stelle, bezieht sich auf diesen Post von mir: [go to post] (http://stackoverflow.com/questions/36403993/modify-the-gap-between-two-divs) Und gerade so '' '.container *, .container *: nach, .container *: vorher { \t -webkit-box-sizing: border-box; \t -moz-box-sizing: border-box; \t Box-Sizing: Rand-Box; \t Polsterung: 0; \t Rand: 0; } '' ' Wenn ich versuche, nur mit' .container {... ', es funktioniert nicht. –

0

Property color wurde standardmäßig geerbt. Das bedeutet, dass Sie diese Eigenschaft nur für das übergeordnete Element festlegen müssen. Dann werden alle untergeordneten Elemente automatisch übernommen.

.div1{ 
color: blue; 
} 
2

erste, NO: Mit .div1 * werden Sie schließlich in den Arsch beißen.

Am besten wäre es, den Stil auf .div1 {...} anzuwenden und auf die Vererbung zu vertrauen.

Wenn Sie Text in div1 haben, den Sie nicht stylen möchten, können Sie den Stil auf die (direkten) Child-Knoten von div1 anwenden: .div1 > * {...}. Und von diesem Punkt an, auf die Erbschaft.

Irgendetwas Spezifischeres wie das oben vorgeschlagene Beispiel wird unerwartete Nebenwirkungen haben und Sie auf einen Weg bringen, wo Sie die Spezifität Ihrer Selektoren mehr und mehr erhöhen müssen.
Führen zu Dinge wie .div1 p ul li .foo div span.bar {...} und überschreiben es mit .div1 p ul li .foo div span.bar * {...} und so weiter. (dramatisiert)

Wenn Ihr Problem die Links in Ihrem Markup sind, betrachten Sie einen generischen "Reset"/Modifikation der Link-Tags, damit sie besser in den umgebenden Text passen: etw. mögen.

a, 
a:active { 
    color: inherit; 
} 

und vielleicht möchten Sie auch diese zu einem bestimmten Kontext zu beschränken, wie .main

Edit:

OK, P.Lionel, das ist eine andere Sache; Ich stimme zu.
Mit .someSliderPluginClassName * { box-sizing: border-box } ist eine geeignete Möglichkeit, dies schnell und einfach zu implementieren, und es hat ein überschaubares Risiko.

Sie verwenden .container (wie in Ihrem Kommentar) als Art von Kontext für die Elemente dieses Slider-Plugins und geben alle Kontrolle über dieses Plugin. (Fast) nichts, was Sie in diesem Kontext behandeln müssen.

Auf der anderen Seite können Sie die Migration Ihrer Stile auf box-sizing: border-box betrachten. Imo. es ist das bessere und konsistentere Boxmodell und mehr und mehr Plugins (und CSS-Frameworks) verlassen sich darauf.

Ich weiß, es ist jetzt eine Art von Anstrengung, aber es könnte sich in der Zukunft auszahlen. Nur meine 5 Cent.

+0

Gute Erklärung. Ich denke, es sollte ".div1 a {color: erben;}" sein. – Stickers

+0

Die Frage, die ich stelle, hängt mit diesem Post von mir zusammen: [gehe zur Post] (http://stackoverflow.com/questions/36403993/modify-the-gap-between-two-divs). Alles funktioniert, wenn ich '' '.container *, .container *: nach, .container *: vor {-webkit-box-sizing: border-box; -moz-box-Sizing: Grenzbox; Box-Sizing: Rand-Box; Auffüllen: 0; Rand: 0; } '' 'Wenn ich nur mit' '.container {...' 'versuche, funktioniert es nicht. Haben Sie einen besseren Code für die Beratung basierend auf dem Beitrag, den ich gerade geteilt habe? –

+0

Für diese spezielle Verwendung würde ich zustimmen. Ich habe meine Antwort für dieses Konto bearbeitet. – Thomas

Verwandte Themen