J'ai une table avec une largeur de 100%. Si je mets<td>
s, ils sont répartis avec des colonnes de longueur égale. Cependant, je veux que toutes les colonnes sauf la dernière aient une largeur aussi petite que possible, sans envelopper le texte.
Ce que j'ai fait en premier, c'est que j'ai mis width="1px"
en tout<td>
s sauf le dernier (bien que obsolète, mais cela style="width:1px"
n'a eu aucun effet), ce qui a bien fonctionné jusqu'à ce que j'aie des données multi-mots dans la colonne. Dans ce cas, pour garder la longueur aussi petite que possible, il a enveloppé mon texte.
Laissez-moi vous démontrer. Imaginez cette table:
---------------------------------------------------------------------------------
element1 | data | junk here | last column
---------------------------------------------------------------------------------
elem | more data | other stuff | again, last column
---------------------------------------------------------------------------------
more | of | these | rows
---------------------------------------------------------------------------------
Peu importe ce que j'essaye, ce que je continue à obtenir, c'est soit ceci:
---------------------------------------------------------------------------------
element1 | data | junk here | last column
---------------------------------------------------------------------------------
elem | more data | other stuff | again, last column
---------------------------------------------------------------------------------
more | of | these | rows
---------------------------------------------------------------------------------
ou (même si j'ai défini style="whitespace-wrap:nowrap"
) ceci:
---------------------------------------------------------------------------------
| | junk | last
element1 | data | |
| | here | column
---------------------------------------------------------------------------------
| more | other | again,
elem | | | last
| data | stuff | column
---------------------------------------------------------------------------------
more | of | these | rows
---------------------------------------------------------------------------------
Je veux obtenir le tableau que j'ai présenté en premier. Comment y parvenir? (Je préfère m'en tenir à la norme et utiliser CSS. Honnêtement, je m'en fiche si IE n'a pas non plus implémenté une partie de la norme)
Plus d'explications: ce dont j'ai besoin est de garder les colonnes aussi courtes que possible sans envelopper les mots (la dernière colonne doit être aussi grande que nécessaire pour que la largeur du tableau atteigne réellement 100%). Si vous connaissez LaTeX, ce que je veux, c'est comment les tableaux apparaissent naturellement dans LaTeX lorsque vous définissez leur largeur à 100%.
Remarque: j'ai trouvé cela mais cela me donne toujours la même chose que la dernière table.
la source
Réponses:
whitespace-wrap: nowrap
n'est pas valide css. C'est cewhite-space: nowrap
que vous cherchez.la source
Cela fonctionne au moins dans Google Chrome. ( jsFiddle )
la source
width
approche pour mes besoins car j'ai plusieurs colonnes larges (plutôt qu'une colonne large car la solution ci-dessus fonctionne mieux). J'ai retiréwidth: 99%
deexpand
et ajoutéwidth: 1%
àshrink
cette solution a bien fonctionné pour moi!td:nth-child(1), td:nth-child(2){white-space:nowrap;} td:nth-child(3){width: 99%;}
- Juste au cas où des débutants passeraient. :)col
sclass
dans la table correspondantetd
sEn utilisant le code ci-dessus, la dernière cellule du tableau essaiera d'être aussi grande que possible, et vous empêcherez les précédentes de s'enrouler. Cela fait la même chose que les autres réponses données, mais beaucoup plus efficace.
la source
width: 1px;
au style non-dernier enfant pour obtenir le rendu des colonnes non-dernières avec une largeur minimale.Sujet légèrement différent mais peut-être que cela aide quelqu'un qui trébuche sur cette question comme moi.
(Je viens de voir le commentaire de Campbeln qui suggère exactement cela après avoir écrit ma réponse ci-dessous, donc c'est essentiellement une explication détaillée de son commentaire)
J'ai eu le problème dans l'autre sens: je voulais définir une colonne de tableau à la largeur minimale possible sans la casser sur un espace blanc (dernière colonne dans l'exemple suivant) mais la largeur de l'autre doit être dynamique (y compris les sauts de ligne):
Solution simple:
HTML
CSS
Les colonnes avec classe
shrink
ne s'étendent qu'à la largeur minimale, mais d'autres restent dynamiques. Cela fonctionne à causewidth
detd
est élargi automatiquement au contenu entier.Exemple d'extrait
Afficher l'extrait de code
la source
Vous pouvez définir la largeur fixe en plaçant l'
div
étiquette à l'intérieurtd
https://jsfiddle.net/8bf17o1v/
la source
Si vous avez besoin de plusieurs lignes de texte dans la cellule du tableau.
Ne pas
white-space: nowrap
utiliser à lawhite-space: pre;
place.Dans la cellule de tableau, évitez tout format de code comme les nouvelles lignes et l'indentation (espace blanc) et utilisez
<br>
pour définir une nouvelle ligne / ligne de texte. Comme ça:Démo sur CodePen
la source
Une combinaison de deux
white-space: nowrap
ouwhite-space: pre
avecmin-width: <size>
fera le travail.width: <size>
en soi ne suffit pas pour empêcher la table de se serrer.la source