Utilizzando CSS td larghezza assoluta, posizione


103

Si prega di consultare questo JSFIDDLE

td.rhead { width: 300px; }

Perché la larghezza CSS non funziona?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

Inoltre, quali sono gli effetti della posizione: fissa, assoluta ecc. Sulle larghezze td se ce ne sono? Sto cercando una ragione più che una soluzione. Spero di capire come funziona.

La larghezza di td non è 300 px come desiderato


display: table-cellnon rispetta width(nello stesso modo in cui non funzionerebbe display: inline). Non capisco cosa stai chiedendoposition fixed|absolute
Explosion Pills

@ExplosionPills perché nel mio codice attuale, ho la tabella impostata su fissa. Come puoi immaginare, sto cercando di ottenere una sequenza temporale nella parte superiore della pagina. Quindi sto solo affermando nel caso in cui l'attributo position influenzi le larghezze.
Jake

Risposte:


144

Potrebbe non essere quello che vuoi sentire, ma display: table-cellnon rispetta la larghezza e verrà compresso in base alla larghezza dell'intera tabella. Puoi aggirare questo problema facilmente semplicemente avendo un display: blockelemento all'interno della cella della tabella stessa di cui specifichi la larghezza, ad es

<td><div style="width: 300px;">wide</div></td>

Questo non dovrebbe fare molta differenza se lo <table>stesso è position: fixedo assoluto perché la posizione delle celle sono tutte statiche rispetto alla tabella.

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

EDIT: non posso prendermi il merito, ma come dicono i commenti puoi semplicemente usare min-widthinvece che widthsulla cella della tabella.


31
+1: ho già utilizzato questa soluzione alternativa. Stranamente, min-widthsulla TDsembra funzionare in Chrome e FF: jsfiddle.net/Mkq8L/7
Tim Medora

2
In realtà, come sempre, dopo aver postato la domanda, scopro che min-width: 300pxfunziona! (@TimMedora sei stato qualche secondo più veloce!)
Jake

Penso che la risposta migliore sia menzionando il comportamento display: table-cell. Grazie!
Jake

Questo comportamento ha senso per me: cosa dovrebbe accadere se imposti due larghezze diverse per due celle sulla stessa colonna? Con min-widthnessun problema però, prendi il più grande.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
Questo è un trucco, non lo consiglio. La larghezza td combinata supera la larghezza della tabella. Questo è il problema. Non dovresti risolvere questo problema aggiungendo più strutture HTML.
David

28

Stai meglio usando table-layout: fixed

Auto è il valore predefinito e con tabelle di grandi dimensioni può causare un po 'di ritardo sul lato client mentre il browser lo scorre per verificare che tutte le dimensioni si adattino.

Risolto è di gran lunga migliore e rende più veloce la pagina. La struttura della tabella dipende dalla larghezza complessiva delle tabelle e dalla larghezza di ciascuna delle colonne.

Qui viene applicato all'esempio originale: JSFIDDLE , Noterai che le colonne rimanenti sono schiacciate e si sovrappongono al loro contenuto. Possiamo risolverlo con un po 'più di CSS (tutto quello che ho dovuto fare è aggiungere una classe al primo TR):

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

Visto in azione qui: JSFIDDLE


11

Il motivo per cui non funziona nel collegamento fornito è perché stai cercando di visualizzare una colonna di 300 px PIÙ 52 colonne di 7 colonne ciascuna. Riduci il numero di colonne e funziona. Non puoi metterne così tanti sullo schermo.

Se vuoi forzare l'adattamento delle colonne, prova l'impostazione:

body {min-width:4150px;}

vedi il mio jsfiddle: http://jsfiddle.net/Mkq8L/6/ @mike Non posso ancora commentare.


2
+1 per aver scoperto che la soglia della larghezza del tavolo aumenta con la larghezza del corpo.
Jake

8

Il motivo è che non hai specificato la larghezza della tabella e tutto il tuo gruppo di td sta traboccando.

Ad esempio , ho dato alla tabella una larghezza di 5000 px, che pensavo si adattasse alle tue esigenze.

table{
    width:5000px;
}

È esattamente lo stesso codice che hai fornito, che ho semplicemente aggiunto nella larghezza della tabella.

Credo che quello che sta succedendo sia perché i tuoi TD sono ben oltre la larghezza della tabella predefinita. Cosa che potresti vedere, se estrai circa 45 dei tuoi td in ogni tr, (cioè il codice che hai fornito nella tua domanda, non jsfiddle) funziona esattamente bene


2
+1 per aver menzionato che esiste una soglia di larghezza della tabella. Il problema è che a volte non conosciamo la larghezza complessiva in anticipo. Qual è la larghezza predefinita della tabella?
Jake

In realtà non lo so. Tutto quello che so è che se hai troppe colonne, la tabella si comprimerà, rendendo inutili tutte le larghezze dei nodi figlio. L'ho già riscontrato, ma non ho ancora scoperto il valore predefinito. Forse dovrei chiederlo come domanda.
He Hui

Credo di aver risolto questo problema stackoverflow.com/questions/14767459/…
He Hui

Questa è la risposta effettiva, invece di quella molto apprezzata. La larghezza può essere impostata solo se il contenuto non supera l'intera larghezza della tabella.
David


5

Prova ad usare

table {
  table-layout: auto;
}

Se usi Bootstrap, la classe tableha table-layout: fixed;per impostazione predefinita.


4

Usa la proprietà table-layout e il valore "fixed" sulla tua tabella.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

Dopo aver impostato l'intera larghezza della tabella, ora puoi impostare la larghezza in% delle td.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

Puoi saperne di più su questo link: http://www.w3schools.com/cssref/pr_tab_table-layout.asp


3

La mia pazza soluzione.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

Se la larghezza della tabella è ad esempio 100%, prova a utilizzare una larghezza percentuale su td come 20%.


2

Avvolgi il contenuto della prima cella in div, ad esempio in questo modo:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

Ecco un jsfiddle .


1

Puoi anche usare:

.rhead {
    width:300px;
}

ma questo funzionerà solo con alcuni browser, se ricordo bene IE8 non lo consente. Nel complesso, è più sicuro mettere l' width=""attributo in <td>se stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.