Prenons l'exemple suivant: ( démo en direct ici )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
Le résultat est: width = 139
et les points de suspension n'apparaissent pas.
Qu'est-ce que j'oublie ici?
width
etheight
sur les cellules de table sont toujours utilisées comme largeur et hauteur minimales . Les cellules du tableau sont différentes!Réponses:
Apparemment, en ajoutant:
résout également le problème.
Une autre solution possible consiste à définir
table-layout: fixed;
la table et à la définirwidth
. Par exemple: http://jsfiddle.net/fd3Zx/5/la source
display: table-cell
(par défaut pour lestd
éléments) n'acceptent pas de largeur.display: block;
sorte de vaincre le but d'utiliser une table. J'aime l'table-layout: fixed;
option, cela a bien fonctionné pour moi.table-layout:fixed
distribue la largeur des colonnes de manière moins intelligente. Existe-t-il une autre option qui affectera la largeur de colonne de la même manièretable-layout: normal
tout en affichant correctement les points de suspension?Il est également important de mettre
Sur la table contenant, il fonctionne donc bien dans IE9 (si vous utilisez max-width) également.
la source
Comme dit précédemment, vous pouvez utiliser
td { display: block; }
mais cela va à l'encontre de l'objectif d'utiliser une table.Vous pouvez l'utiliser,
table { table-layout: fixed; }
mais vous souhaitez peut-être qu'il se comporte différemment pour certaines colonnes.Donc, la meilleure façon d'obtenir ce que vous voulez serait d'encapsuler votre texte dans un
<div>
et d'appliquer votre CSS au<div>
(pas au<td>
) comme ceci:la source
Essayez d'utiliser à la
max-width
place dewidth
, le tableau calculera toujours la largeur automatiquement.Fonctionne même en
ie11
(avec le mode de compatibilité ie8).jsfiddle .
la source
Page de démonstration
Pour les tableaux avec une largeur dynamique, j'ai trouvé le moyen ci-dessous de produire des résultats satisfaisants. Chacun
<th>
qui souhaite avoir une capacité de texte coupé doit avoir un élément d'habillage interne qui enveloppe le contenu de l'<th>
autorisationtext-overflow
de travailler.Cela entraînera effectivement que la largeur de l'élément soit "liée" à la largeur de la fenêtre (fenêtre du navigateur) et entraînera un découpage de contenu réactif. Réglez les
vw
unités sur une valeur satisfaisante nécessaire.CSS minimal:
Voici une démo exécutable:
la source
Le simple fait de proposer une alternative car j'avais ce problème et aucune des autres réponses ici n'a eu l'effet souhaité que je voulais. Alors à la place, j'ai utilisé une liste. Maintenant, sémantiquement, les informations que je produisais auraient pu être considérées à la fois comme des données tabulaires mais aussi comme des données répertoriées.
Donc à la fin ce que j'ai fait était:
Donc, fondamentalement,
ul
esttable
,li
esttr
etspan
esttd
.Ensuite, en CSS, j'ai défini les
span
éléments comme étantdisplay:block;
etfloat:left;
(je préfère cette combinaison àinline-block
car elle fonctionnera dans les anciennes versions d'IE, pour effacer l'effet flottant, voir: http://css-tricks.com/snippets/css/clear- fix / ) et pour avoir aussi les ellipses:Ensuite, tout ce que vous faites est de définir
max-widths
vos portées et cela donnera à la liste l'apparence d'un tableau.la source
<td><ul>...</ul></td>
)? Cela ne semble pas fonctionner pour moi :(Au lieu d'utiliser des points de suspension pour résoudre le problème du texte débordant, j'ai trouvé qu'une entrée désactivée et stylisée avait une meilleure apparence et permettait toujours à l'utilisateur de visualiser et de sélectionner la chaîne entière s'il en avait besoin.
Il ressemble à un champ de texte mais est surligné, donc plus convivial
la source
Vérifiez la
box-sizing
propriété css de vostd
éléments. J'ai eu un problème avec le modèle css qui le met àborder-box
valeur. Vous avez besoin de setbox-sizing: content-box
.la source
Laissez vos tables telles qu'elles sont. Enveloppez simplement le contenu dans les TD avec une étendue sur laquelle le CSS de troncature est appliqué.
la source
Si vous ne voulez pas définir max-width sur td (comme dans cette réponse ), vous pouvez définir max-width sur div:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Remarque: 100% ne fonctionne pas, mais 99% fait l'affaire dans FF. Les autres navigateurs modernes n'ont pas besoin de hacks div idiots.
la source