2011-01-11 12 views
7

Se hocelle della tabella di blocco per la loro dimensione predefinita a prescindere dal contenuto

<table> 
    <tr> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 

e

table 
    { width: 100%; height: 100%; } 

Ogni cellula occupa un quarto uguale della tavola, e la tabella si estende per adattarsi alla finestra .

Come impedire a queste celle di tabella di ridimensionarsi per adattarsi al contenuto all'interno delle celle (mentre si sta ancora adattando il contenitore del tavolo)?

risposta

16

Si potrebbe provare table-layout:fixed; - questo imposta il layout su una certa dimensione fissa (specificata in CSS) e ignora il contenuto delle celle, quindi la larghezza della cella non cambia mai. Non sono sicuro se ciò influisce sul layout verticale o meno.

More info on w3schools.

+2

Hai ragione: funziona su larghezze orizzontali ma non verticali. Mi sento come se i CSS fossero inutili anche per le cose più semplici. Sto solo cercando di creare un calendario! – Nick

+3

Qualche soluzione per verticale? –

+0

@RomanGaufman Penso che [la mia risposta a questa domanda] (http://stackoverflow.com/a/17429778/49942) funzioni anche in verticale. – ChrisW

1

td{ width:50%; } funzionerà finché il tavolo non diventerà sufficientemente piccolo.

+0

Che cosa succede se non so il numero di righe o colonne in anticipo? Ho utilizzato Javascript per assegnare a ogni cella una larghezza e un'altezza percentuale, ma non è più possibile farlo. – Nick

+0

Non riesco a pensare ad una soluzione HTML/CSS pura, probabilmente avrai bisogno di Javascript. Potresti provare a giocare con la proprietà di overflow CSS. – Jake

2

Si potrebbe provare a prendere una singola cella di masticare tutto lo spazio e impostare che al 100% altezza e larghezza:

<table> 
    <tr> 
     <td>Hi There.</td> 
     <td>x</td> 
    </tr> 
    <tr> 
     <td>Here is some text.</td> 
     <td class="space-hog"></td> 
    </tr> 
</table> 

e alcuni CSS:

table { 
    width: 100%; 
    height: 100%; 
} 
td { 
    white-space: nowrap; 
} 
td.space-hog { 
    width: 100%; 
    height: 100%; 
} 

E un live example. È necessario fare attenzione per evitare spiacevoli involucri di righe quando lo .space-hog fa la sua cosa, quindi lo white-space: nowrap. Se metti lo .space-hog nell'ultima riga, puoi evitare di spingere verso il basso le parti interessanti.

+0

Non sto cercando di ottenere una cella per occupare tutto lo spazio: voglio che la cella sia uguale in larghezza e altezza indipendentemente dal contenuto. – Nick

+0

Ok, non era chiaro per me. Non penso che ci sia un modo per dire "fai tutte queste cose della stessa dimensione" in CSS, devi dire "fai tutte queste cose Wpx wide e Hpx tall" e calcola le dimensioni sul server o in JavaScript. Forse fornire più contesto nella domanda e qualcuno potrebbe venire con un approccio completamente nuovo che evita completamente il ridimensionamento delle tabelle. –

0

Qualcosa sulla falsariga di utilizzare overflow:hidden; forse?

1

È possibile farlo utilizzando position: absolute sul contenuto di ogni cella di tabella: perché se lo si fa, la dimensione del contenuto non influisce sulla dimensione della cella.

Per fare ciò, è necessario posizionare anche le celle della tabella (in modo che il posizionamento assoluto del contenuto sia relativo alla cella della tabella) - and/or, to support Firefox, position an extra div within the table cells poiché Firefox non consente di applicare la posizione alle celle stesse.

Per esempio, sto usando questo codice HTML:

<td><div class="bigimg"><img src="...."/></div></td> 

Insieme con il seguente CSS, in modo che le dimensioni dell'immagine non influisce sulla dimensione della cella che lo contiene:

div.bigimg 
{ 
    height: 100%; 
    width: 100%; 
    position: relative; 
} 
div.bigimg > img 
{ 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

ho impostato il height e width di div.bigimg-100% in base alle dimensioni del td che lo contiene, perché sto utilizzando Javascript per ridimensionare le immagini in fase di esecuzione per soddisfare le loro contenitori, che sono i div.bigimg.

+0

C'è qualche spiegazione sul perché questo sarebbe richiesto? una tabella 3x3 sembra ridimensionarsi anche se l'immagine si adatta già alla cella della tabella! – ericslaw

+0

@ericslaw Non capisco il tuo commento/domanda. Forse potresti postarlo come una nuova domanda. – ChrisW

1

Sono riuscito a farlo senza una tabella fissa. css della cella:

.dataCell { 
    display: table-cell; 
    padding: 2px 15px 2px 15px; 
    white-space: nowrap; 
    text-overflow: ellipsis; 
    overflow: hidden; 
    width: auto; 
    max-width: 1px; 
} 
0

Aggiungi table-layout:fixed; allo styling della tabella.

Se si nota che questo aiuta a correggere la larghezza ma non l'altezza, questo è perché potrebbe esserci ancora una sorta di riempimento all'interno di ciascuna cella. Aggiungi padding:0px; allo stile di td.

0

È possibile anche bloccare le cellule ad una percentuale, al fine di mantenere la reattività, ad esempio:

td:first-child, th:first-child { 
    width: 20%; 
    } 
    // assuming you have 8 remaining columns (20 + 10*8 = 100%) 
    td:not(:first-child), th:not(:first-child) { 
    width: 10%; 
    } 
Problemi correlati