2009-03-10 11 views
168

Ich mag nur innerhalb des DIV mit einer bestimmten Klasse an die Tabellenstile anwenden:zu CSS Stil anwenden, Kind Elementen

Hinweis: ich eher einen CSS-Selektor für Kinder Elemente verwenden würde.

Warum funktioniert die # 1 und # 2 nicht?

1:

div.test th, div.test td, div.test caption {padding:40px 100px 40px 50px;} 

2:

div.test th, td, caption {padding:40px 100px 40px 50px;} 

HTML:

<html> 
    <head> 
     <style> 
      div.test > th, td, caption {padding:40px 100px 40px 50px;} 
     </style> 
    </head> 
    <body> 
     <div> 
      <table border="2"> 
       <tr><td>some</td></tr> 
       <tr><td>data</td></tr> 
       <tr><td>here</td></tr> 
      </table> 
     </div> 
     <div class="test"> 
      <table border="2"> 
       <tr><td>some</td></tr> 
       <tr><td>data</td></tr> 
       <tr><td>here</td></tr> 
      </table> 
     </div> 
    </body> 
</html> 

Was mache ich falsch?

Antwort

245

Dieser Code „div.test th, td, caption {padding:40px 100px 40px 50px;}“ gilt eine Regel für alle th Elemente, die von einem div Element mit einer Klasse enthalten sind test genannt, zusätzlich zu alletd Elemente und allecaption Elemente.

Es ist nicht dasselbe wie „alle td, thcaption und Elemente, die von einem div Elemente mit einer Klasse von test enthalten sind“. Um dies zu erreichen, müssen Sie Ihre Selektoren ändern:

'>' wird nicht vollständig von einigen älteren Browsern unterstützt (Ich sehe dich, Internet Explorer).

div.test th, 
div.test td, 
div.test caption { 
    padding: 40px 100px 40px 50px; 
} 
+0

erforderlich ist gibt es einen Weg um div.test dreimal zu schreiben? –

+2

@rm Nein. Es gibt keine Verschachtelung von Regeln oder 'mit' Typ Gruppierung – sblundy

+0

Dank für die Klarstellung –

2

Soweit ich dies wissen:

div[class=yourclass] table { your style here; } 

oder in Ihrem Fall auch diese:

div.yourclass table { your style here; } 

(aber dies wird für Elemente mit yourclass arbeiten, die nicht div s sein könnte) betrifft nur Tabellen innerhalb yourclass. Und, wie Ken sagt, das> wird nicht überall unterstützt (und auch div[class=yourclass], also verwende die Punktnotation für Klassen).

59

Die >selector stimmt nur direkte Kinder, keine Nachkommen.

Sie wollen

div.test th, td, caption {} 

oder eher

div.test th, div.test td, div.test caption {} 

Edit:

Der erste sagt

div.test th, /* any <th> underneath a <div class="test"> */ 
    td,   /* or any <td> anywhere at all */ 
    caption  /* or any <caption> */ 

Der zweite sagt

div.test th,  /* any <th> underneath a <div class="test"> */ 
    div.test td,  /* or any <td> underneath a <div class="test"> */ 
    div.test caption /* or any <caption> underneath a <div class="test"> */ 

In Ihrem ursprünglichen die div.test > th sagt any <th> which is a **direct** child of <div class="test">, was bedeutet, es <div class="test"><th>this</th></div> entsprechen wird, aber passen nicht <div class="test"><table><th>this</th></table></div>

+0

Waaaaay morelikely # 2 michinks – annakata

+0

Ich denke, Sie sollten diese Antwort zu erklären, warum # 1 ist wahrscheinlich nicht das, was er beabsichtigt. – SpoonMeiser

+0

ja, bitte erklären Sie, warum # 1 nicht funktioniert –

6

Vergessen Sie nicht, dass die>, + und [] Selektoren sind für IE6 nicht verfügbar und unter.

3
div.test td, div.test caption, div.test th 

funktioniert für mich.

Der untergeordnete Selektor> funktioniert nicht in IE6.

+2

Und (während ich das suche) hast du viele der gleichen Antwort :-) – Traingamer

83
.test * {padding: 40px 100px 40px 50px;} 
+21

Dies ist die Antwort auf die Frage in der Titel, also, wenn Sie hier über Google (wie ich) enden, ist dies das, was Sie wollen. – BFWebAdmin

+1

Um fair zu sein, sind diese Antworten, die im Jahr 2009 Sinn gemacht. –

+0

Beantwortete meine Suche ... – SoEzPz

4

Hier ist ein Code, den ich vor kurzem geschrieben habe. Ich denke, dass es eine grundlegende Erklärung für die Kombination von Klassen-/ID-Namen mit Pseudoklassen liefert.

.content { 
 
    width: 800px; 
 
    border: 1px solid black; 
 
    border-radius: 10px; 
 
    box-shadow: 0 0 5px 2px grey; 
 
    margin: 30px auto 20px auto; 
 
    /*height:200px;*/ 
 

 
} 
 
p.red { 
 
    color: red; 
 
} 
 
p.blue { 
 
    color: blue; 
 
} 
 
p#orange { 
 
    color: orange; 
 
} 
 
p#green { 
 
    color: green; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Class practice</title> 
 
    <link href="wrench_favicon.ico" rel="icon" type="image/x-icon" /> 
 
</head> 
 

 
<body> 
 
    <div class="content"> 
 
    <p id="orange">orange</p> 
 
    <p id="green">green</p> 
 
    <p class="red">red</p> 
 
    <p class="blue">blue</p> 
 
    </div> 
 
</body> 
 

 
</html>

+0

CSS erlaubt keine einzeiligen Kommentare wie '//'. Siehe https://stackoverflow.com/questions/4656546/why-dont-we-have-a-comment-in-css –

8

Wenn Sie Stil in jedem Kind und keine Spezifikation für HTML-Tag, dann benutze ihn hinzufügen möchten.

Geordnetes Tag div.parent

Kind-Tag in der div.parent wie <a>, <input>, <label> usw.

Code: div.parent * {color: #045123!important;}

können Sie auch wichtig, entfernen, es ist nicht

+0

Hinzufügen der '! Wichtige' funktioniert wie ein Charme !!! – HovyTech