2009-07-13 14 views

Antwort

10

Ian Hixie erklärt hier im Detail: The mystery of why only four properties apply to table columns. Relevantes Angebot:

Die Farbe des Textes hängt von der Eigenschaft 'color' seines Elements ab. Sofern nicht anders angegeben, ist die Eigenschaft 'color' (im Grunde genommen) standardmäßig 'inherit', was bedeutet "nimm den Wert des übergeordneten Elements".

So für einige Text in einer Zelle, wird die Farbe durch die 'Farbe' Eigenschaft der Zelle bestimmt, die aus der Zeile entnommen wird, die aus der Tabelle entnommen wird, die von der übergeordneten Tabelle und so übernommen wird auf.

Was ist mit der Spalte? Nun, die Kolumne ist nicht einer der Vorfahren der Zelle, also bekommt sie nie einen Einblick! Und darin liegt das Problem.

+0

Interessanter Beitrag. Vieles davon macht Sinn, aber es erklärt nicht, warum diese 4 CSS Regeln erlaubt sind, aber die anderen nicht. Sicherlich musste das Parsing-Modell modifiziert werden, um Hintergründe anzuwenden, also warum Hintergründe, aber keine Textfarben? – DisgruntledGoat

+2

Die Spalte hat die Hintergrundfarbe. Wenn die Zelle und Zeile eine Hintergrundfarbe von transparent haben, können Sie die Spaltenfarbe sehen. Dies ist nur Schichten übereinander Elemente. Die Schriftfarbe funktioniert nicht so. – Quentin

0

Möglicherweise weil jede Zeile in der Tabelle nicht unbedingt eine Zelle für Ihre Spalte anzeigen muss (z. B. wegen eines colspan). In welcher Spalte sollte die Zelle ihren Stil erben? Nur eine Vermutung.

+0

Eine völlig falsche Vermutung. Siehe andere Antworten. – Quentin

8

Nur ein wilder Stich in der Dunkelheit auf der Basis meines begrenztes Verständnis:

Ich denke, Styling über Spalt verwandten Elemente beschränkt ist, denn obwohl <col> und <colgroup> Spalten von Zellen darstellen, ist es nicht tatsächlich enthält sie (sie sind tatsächlich enthalten durch die <tr> s). Damit ergeben sich Probleme der Präzedenz und Spezifität und Kaskadierung (da Kaskadierung nur zwischen enthaltenen/Container-Elementen möglich ist) - wenn widersprüchliche Stilregeln aus den <tr> und <col> (die in einer Mehrfachvererbungshierarchie die gleiche Ebene wären) auftreten würden - was sollte die Zelle tatsächlich benutzen?

Warum diese bestimmte Handvoll Stil Attribute zulässig ist: keine Ahnung.

+1

Bei Konflikten sagt die Seite, mit der ich verlinkt bin, dass Zellen Vorrang vor Zeilen und dann Spalten haben. Daher wird jeder Stil in einer Spalte angewendet, es sei denn, er wird auf Zeilen- oder Zellenebene überschrieben. – DisgruntledGoat

3

Ein Wort: Mehrdeutigkeit. Die Zellen müssen Kinder von Reihen sein; sonst wäre es kein Tisch. Aber es gibt keine Säule zum Abstieg. Mit colspan bedeutet, dass eine Zelle in zwei Spalten sein könnte. Anstatt zu versuchen, einen verwirrenden Ausweg zu finden, warum sollte der Entwickler nicht einfach class auf jede n-te Zelle setzen?

Wenn Sie sich die Spezifikation, zu der Sie eine Verbindung herstellen, genau ansehen, werden Sie Versuche zur Auflösung von Mehrdeutigkeiten sehen. Die width Eigenschaft gibt ein Minimum an; die background nimmt einen Rücksitz zur Reihe und Zelle; und verweist auf einen "Konfliktlösungsalgorithmus". Der einzige Grund, warum es für border sogar einen Algorithmus gibt, ist, dass vernünftig zu verstehen ist, wer "gewinnen" sollte (siehe Algorithmus für Details). Aber könnten Sie sich vorstellen, herauszufinden, welche color oder font "gewinnen" sollte?

+0

Äh, was wäre der Unterschied zwischen @colspan und @rowspan? – Ms2ger

+0

@ ms2ger: Bei einem Colspan ist die Zelle, die mehrere Zeilen überspannt, immer ein Nachkomme eines spezifischen ' '-Elements. – DisgruntledGoat

+0

@George: Gute Antwort, aber eine Frage ... Wenn ich an die richtige Stelle schaue, listet der "Konfliktlösungsalgorithmus" einfach die Rangfolge auf: Zelle (am höchsten), Zeile, Zeilengruppe, Spalte, Spaltengruppe, Tabelle. Warum kann das nicht für Farbe oder Schriftart angewendet werden? – DisgruntledGoat

Verwandte Themen