dati tabulari presenti con i CSS, in cui le cellule troppo ampio, non fanno cose rovina
Domanda
Ho righe di dati che voglio presentare in colonne di dimensione fissa. Ad esempio:
Name City Number
Adam Anaheim 714 555 5555
Bob Barstow 760 555 5555
... ... ...
Tuttavia, di tanto in tanto uno dei dati della colonna è troppo grande per adattarsi. Se ciò accade, lo voglio influenzare le cellule vicine meno possibile, non l'intera riga se non è necessario.
Ecco quello che DO desiderare:
Name City Number
Adam Anaheim 714 555 5555
Bob Barstow 760 555 5555
Constantine Canyon 805 555 5555 # Notice how phone number is still aligned :)
Ecco quello che NON desiderare:
Name City Number
Adam Anaheim 714 555 5555
Bob Barstow 760 555 5555
Constantine Canyon 805 555 5555 # Notice how phone number is also shifted :(
Come posso fare questo con HTML / CSS (javascript per favore)?
Ecco un jsbin con una soluzione non-lavoro, dove si può giocare in giro e vedere di persona.
Aggiorna Ecco una sintesi della risposta accettata, quando si dispone di N colonne:
Il primo N-1 colonne devono essere avvolto all'interno di uno stile DIV = "display: inline-block" cui min-width è la larghezza combinata dei primi N-1 colonne. Poi dentro che DIV, il primo N-2 colonne devono essere avvolto all'interno di un div simile cui min-width è la larghezza combinata dei primi N-2 colonne. Continuare questo fino in fondo ...
Non è bello, ma funziona, ed è gestibile per piccola N.
Soluzione
Buona domanda. Non riuscivo a trovare un modo per farlo con un tavolo normale (in parte a causa degli elementi di wrapper necessari, in parte perché IE non si sarebbe comportato correttamente) in modo che la soluzione qui di seguito usi div.
Prova questo:
<!DOCTYPE html>
<title>Test Case</title>
<style type="text/css">
body { font-size:11px; font-family: "Courier New"; }
* { margin:0; padding:0; }
.col, .span { display:inline-block; }
.col1 { min-width:12ex; }
.span2 { min-width:30ex; }
.span3 { min-width:40ex; }
/* IE6 */
* html .col { display:inline; padding-right:1ex; }
* html .span { display:inline; white-space:nowrap; }
* html .col1 { width:12ex; }
* html .span2 { width:30ex; }
* html .span3 { width:40ex; }
/* IE7 */
*:first-child+html .col { display:inline; padding-right:1ex; }
*:first-child+html .span { display:inline; }
</style>
<div class="table">
<div class="row">
<div class="span2 span">
<div class="col1 col">Name</div>
<div class="col">City</div>
</div>
<div class="col">Number</div>
</div>
<div class="row">
<div class="span2 span">
<div class="col1 col">Adam</div>
<div class="col">Anaheim</div>
</div>
<div class="col">714 555 5555</div>
</div>
<div class="row">
<div class="span2 span">
<div class="col1 col">Bob</div>
<div class="col">Barstow</div>
</div>
<div class="col">760 555 5555</div>
</div>
<div class="row">
<div class="span3 span">
<div class="span2 span">
<div class="col1 col">Constantine</div>
<div class="col">Canyon</div>
</div>
<div class="col">805 555 5555</div>
</div>
<div class="col"># Notice how phone number is still aligned :)</div>
</div>
</div>
Dovrebbe essere chiaro come espandere questa idea ad ulteriori colonne utilizzando involucri "span4", "span5", ecc.
Altri suggerimenti
Vi suggerisco di utilizzare un div all'interno del td <td><div class="mydiv">your content</div></td>
Poi si dà in css .mydiv {overflow:auto;}
e questo aggiungerà rotoli quando è necessario, senza rovinare la vostra tavola.
Modifica - Ho appena visto che si utilizza div invece di tavolo. Perchè questo?
In ogni caso è possibile utilizzare la proprietà display:table;
display:table-row;
e display:table-cell;
per rappresentare i dati tabulari.
Ecco un esempio http://jsbin.com/evoka3/3