2010-12-12 9 views
33

Ho una tabella a colonne in un div:due colonne: uno più piccolo possibile, l'altro prende il resto

<div> 
<table> 
    <tbody> 
    <tr> 
     <td class="action" > 
     <a> ✔ </a> 
     </td> 
     <td class="content"> 
     <p>Bigger text...(variable size).......</p> 
     </td> 
    </tr> 
    <tr> 
     <td class="action" > 
     <a> ✔ </a><a> ✘ </a> 
     </td> 
     <td class="content"> 
     <p>Bigger text...(variable size).......</p> 
     </td> 
    </tr> 
     ... same structure in all the table 
    </tbody> 
</table> 
</div> 

E vorrei la colonna "azione" per adattare il contenuto, e la colonna "contenuto" per occupare il resto dello spazio disponibile. La colonna "azione" apparirebbe meglio con un allineamento a destra. La tabella dovrebbe anche contenere il 100% della larghezza del contenitore.

C'è un modo per farlo senza fissare la larghezza delle colonne?

ho provato con questo:

table .action 
{ 
    width:auto; 
    text-align:right; 
} 
table 
{ 
    border-collapse:collapse; 
    border-spacing:0; 
    width:100%; 
} 

Ma la colonna di sinistra prende la metà del tavolo ...

risposta

25

Dare il contenuto td una larghezza di 100% sarà costringerlo a prendere tanto spazio quanto può, quindi .content{ width: 100% } dovrebbe funzionare.

Fornire inoltre .action a white-space: nowrap per assicurarsi che x e il segno di spunta restino uno accanto all'altro. Altrimenti il ​​contenuto sarà in grado di occupare ancora più spazio e forzare le icone l'una di seguito all'altra.

table .action 
 
{ 
 
    width:auto; 
 
    text-align:right; 
 
    white-space: nowrap 
 
} 
 
table .content { 
 
    width: 100% 
 
} 
 
table 
 
{ 
 
    border-collapse:collapse; 
 
    border-spacing:0; 
 
    width:100%; 
 
    border: 1px solid 
 
}
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td class="action" > 
 
     <a> ✔ </a> 
 
     </td> 
 
     <td class="content"> 
 
     <p>Bigger text...(variable size).......</p> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td class="action" > 
 
     <a> ✔ </a><a> ✘ </a> 
 
     </td> 
 
     <td class="content"> 
 
     <p>Bigger text...(variable size).......</p> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

lavorato con white-space: nowrap Grazie! – Julien

+0

c'è un modo per fare lo stesso senza tabelle ma div? – Atmocreations

+0

Certo, basta usare la proprietà 'display: table-cell' (magari anche' display: table-row' sul div intorno a loro) e dovrebbero comportarsi proprio come una tabella –

7

ho trovato questa risposta quando si cerca di fare una colonna di molti il più piccolo possibile.

Dando il contenuto td un 1% width lo costringerà a occupare il minimo spazio possibile, quindi .content{ width: 1% } ha funzionato per me.

+0

Qualcuno ha già downvoted questa risposta - ma posso chiedere perché? Non mi è chiaro perché questa è una cosa indesiderabile da fare. – samjewell

+0

Non sono sicuro, ma penso che non risponda ai requisiti: la colonna dovrebbe essere il più piccola possibile, ma il contenuto dovrebbe essere visibile. Sembra che con una colonna 1% o 1px, non funzionerebbe. – Julien

+0

Penso che il problema sia che tu dici di rendere la colonna di contenuto 1% quando avrebbe dovuto essere la colonna di azione. Penso che la tua idea sia valida, l'hai solo mescolata, anche se ciò non dovrebbe giustificare un downvote, ma solo una correzione. L'unico vantaggio del tuo metodo è che penso che gestirà meglio determinate situazioni. Se ci sono 2 colonne, la risposta accettata al 100% funziona. Ma cosa succede se ci sono 4 colonne e vuoi che i primi 3 aggiustino automaticamente la loro larghezza di conseguenza, ma la 4a colonna dovrebbe essere la più piccola possibile. In tal caso, il tuo 1% funziona, dove il 100% non lo farà. – ldkronos

2

impostare la colonna width: 1px & white-space: nowrap.

Questo cercherà di rendere 1px ma il nowrap lo fermerà da ottenere più piccolo l'elemento più largo in quella colonna