2009-07-13 12 views

risposta

10

Ian Hixie spiega in dettaglio qui: The mystery of why only four properties apply to table columns. Preventivo rilevante:

Il colore del testo dipende dalla proprietà 'color' del suo elemento. A meno che non sia specificato, la proprietà 'color' (in pratica) imposta automaticamente 'inherit', che significa "prendi il valore dell'elemento genitore".

Quindi, per un testo in una cella, il colore è determinato dalla proprietà 'color' della cella, che è presa dalla riga, che è presa dalla tabella, che è presa dal padre della tabella, e così sopra.

E la colonna? Bene, la colonna non è uno degli antenati della cellula, quindi non ottiene mai un'occhiata! E qui sta il problema.

+0

Post interessante. Molto ha senso, ma non spiega perché quelle 4 regole CSS siano consentite, ma le altre no. Sicuramente il modello di analisi doveva essere modificato per applicare gli sfondi, quindi perché gli sfondi ma non i colori del testo? – DisgruntledGoat

+2

La colonna ha il colore di sfondo. Se la cella e la riga hanno un colore di sfondo trasparente, puoi vedere se il colore della colonna. Questo è solo stratificazione degli elementi uno sopra l'altro. Il colore del carattere non funziona così. – Quentin

0

Probabilmente perché ogni riga della tabella non deve necessariamente visualizzare una cella per la colonna (ad esempio a causa di un colspan). Da quale colonna dovrebbe ereditare il proprio stile? Solo una supposizione.

+0

Un'ipotesi completamente sbagliata. Vedi altre risposte. – Quentin

8

Basta una pugnalata selvaggio nel buio In base alla mia comprensione limitata:

Penso styling tramite relativi elementi delle colonne è limitato perché anche se <col> e <colgroup> rappresentano colonne di celle, che in realtà non contiene loro (sono effettivamente contenuto dal <tr> s). Da ciò derivano problemi di precedenza e specificità e cascata (dal momento che la cascata può essere eseguita solo tra elementi contenuti/contenitori) - quando si verificano regole di stile in conflitto tra <tr> e <col> (che sarebbe lo stesso livello in una gerarchia di ereditarietà multipla) - che dovrebbe la cella effettivamente usa?

Sul motivo per cui quella particolare manciata di attributi di stile è consentita anche se: nessuna idea.

+1

Per i conflitti, la pagina che ho collegato dice che le celle hanno la precedenza sulle righe, quindi sulle colonne. Quindi, qualsiasi stile su una colonna viene applicato a meno che non venga sovrascritto a livello di riga o cella. – DisgruntledGoat

3

Una parola: ambiguità. Le celle devono essere figli di righe; altrimenti non sarebbe un tavolo Ma non c'è colonna da cui discendere. L'utilizzo di colspan significa che una cella potrebbe trovarsi in due colonne. Piuttosto che cercare di trovare una via di uscita confusa, perché non lasciare che lo sviluppatore inserisca uno class in ogni ennesima cella?

Se si osservano attentamente le specifiche a cui si collega, verranno visualizzati i tentativi di risoluzione dell'ambiguità. La proprietà width specifica un minimo; lo background occupa un posto indietro nella riga e nella cella; e border fa riferimento a un "algoritmo di risoluzione dei conflitti". L'unico motivo per cui esiste anche un algoritmo per border è perché è ragionevolmente compreso chi dovrebbe "vincere" (vedere l'algoritmo per i dettagli). Ma potresti immaginare di cercare di capire quale color o font dovrebbe "vincere"?

+0

Eh, quale sarebbe la differenza tra @colspan e @rowspan? – Ms2ger

+0

@ ms2ger: con un colspan, la cella che si estende su più righe è sempre discendente di uno specifico elemento ''. – DisgruntledGoat

+0

@George: buona risposta, ma una domanda ... Se guardo nel posto giusto, l '"algoritmo di risoluzione dei conflitti" elenca semplicemente l'ordine di precedenza: cella (più alta), riga, gruppo di righe, colonna, gruppo di colonne, tavolo. Perché non può essere applicato per colore o carattere? – DisgruntledGoat