2010-02-03 3 views
8

Voglio aggiungere una riga nella parte inferiore della mia tabella HTML (o in alto, qualunque cosa) con una casella di testo in ogni colonna (per consentire il filtraggio del contenuto di ogni colonna).caselle di testo nella tabella HTML: come dimensionare automaticamente?

FWIW, la tabella si basa sul plug-in jQuery DataTables.

Il problema è che le caselle di testo allargano le colonne. Voglio che ogni casella di testo riempia la larghezza della sua colonna senza ingrandirla. Come posso fare questo?

risposta

19

provare <input type="text" style="width:100%"/> per ottenere la larghezza del padre td.

+2

Non ne sono completamente sicuro, ma penso che ci potrebbe essere un problema con questo approccio dato che i bordi e il riempimento della casella di testo ne occupano alcuni con quello che viene aggiunto alla larghezza. Cioè, se il td è largo 100 px e la casella di testo ha, ad esempio, il bordo 1px e il padding 4px, la casella di testo ha bisogno acutalmente di una larghezza totale di 100 + 2 * (1 + 4) = 110px se impostata su width = " 100%". Credo. –

+0

Ha! Così semplice! Funziona bene in IE8 ma non in Chrome: la percentuale di larghezza corrisponde alla larghezza del col, ma le colonne sono tuttavia allargate. –

+0

Puoi provare width: auto o width: inherit – ntan

2

Non ho usato le tabelle jQuery, ma presumo che se si imposta 'larghezza: 80%;' e definire una larghezza per il 'td', la casella di testo dovrebbe ereditare le sue dimensioni dal suo genitore (il 'td').

Se questo non funziona, o se si vuole un approccio diverso, si potrebbe provare:

td > input[type="text"] {width: 5em;} /* or whatever */ 
10

Penso che [larghezza 100%] potrebbe essere un problema con questo approccio in quanto i bordi e padding della casella di testo ne occupano alcune con quella che viene aggiunta alla larghezza.

Infatti.

È possibile compensare questo aggiungendo padding-right alla cella contenente l'input (o solo a tutte le celle) di dimensioni simili ai bordi e al riempimento dell'input. L'input si espande fuori dall'area del contenuto della cella, ma solo sul padding, quindi non crea problemi.

Questo va bene solo per gli input di testo normali. Se hai anche altri elementi come caselle di selezione o pulsanti che desideri ridimensionare in questo modo, il metodo di riempimento può ritorcersi contro perché su IE la "larghezza" di una selezione è comprensiva del bordo e del riempimento (poiché è un widget del SO).

Per la maggior parte dei browser, il modo più semplice e coerente per risolvere questo problema è la proprietà CSS3 box-sizing:

td.input input { 
    width: 100%; 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
} 

IE6-7 non supporta ancora questa, in modo da poter ancora ottenere i campi che non lo fanno abbastanza allineato in questi browser. Se ti interessa, puoi aggiungere una soluzione di riempimento specifica per quelli.

+0

grazie per le informazioni sul dimensionamento della scatola –