Je souhaite utiliser CSS text-overflow
dans une cellule de tableau, de sorte que si le texte est trop long pour tenir sur une seule ligne, il se coupera avec des points de suspension au lieu de passer à plusieurs lignes. Est-ce possible?
J'ai essayé ceci:
td {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Mais le white-space: nowrap
semble faire en sorte que le texte (et sa cellule) se développe continuellement vers la droite, poussant la largeur totale du tableau au-delà de la largeur de son conteneur. Sans elle, cependant, le texte continue de se dérouler sur plusieurs lignes lorsqu'il atteint le bord de la cellule.
overflow
bien. Essayez de mettre un div dans la cellule et de le styliser.Réponses:
Pour découper du texte avec des points de suspension lorsqu'il déborde d'une cellule de tableau, vous devrez définir la
max-width
propriété CSS sur chaquetd
classe pour que le débordement fonctionne. Aucun div supplémentaire de mise en page n'est requisPour des mises en page réactives; utilisez la
max-width
propriété CSS pour spécifier la largeur minimale effective de la colonne, ou utilisez simplementmax-width: 0;
pour une flexibilité illimitée. En outre, la table contenant aura généralement besoin d'une largeur spécifiquewidth: 100%;
, et les colonnes auront généralement leur largeur définie en pourcentage de la largeur totaleHistorique: pour IE 9 (ou moins), vous devez l'avoir dans votre code HTML, pour résoudre un problème de rendu spécifique à IE
la source
width: 100%;
et quemin-width: 1px;
la cellule sera toujours aussi large que possible et n'utilisera des points de suspension pour tronquer le texte qu'en cas de besoin (pas lorsque la largeur de l'élément atteint une certaine taille) - cela est très utile pour les mises en page réactives.display: table-cell
effet, mais pas lorsque lemax-width
est défini en pourcentage (%). Testé sur FF 32table-layout: fixed
sur l'élément avecdisplay: table
fera l'affaireLa spécification d'une
max-width
largeur fixe ou fixe ne fonctionne pas dans toutes les situations, et le tableau doit être fluide et espacer automatiquement ses cellules. C'est à ça que servent les tables.Utilisez ceci: http://jsfiddle.net/maruxa1j/
HTML:
CSS:
Fonctionne sur IE9 et autres navigateurs.
la source
<span>
éléments.display: block
aucune autre solution comme celle-ci ne l'a pas faitPourquoi cela se produit-il?
Il semble que cette section sur w3.org suggère que le débordement de texte ne s'applique qu'aux éléments de bloc :
Le MDN dit la même chose .
Ce jsfiddle a votre code (avec quelques modifications de débogage), qui fonctionne bien s'il est appliqué à un
div
au lieu d'untd
. Il a également la seule solution de contournement à laquelle je pouvais rapidement penser, en enveloppant le contenu dutd
dans undiv
bloc conteneur. Cependant, cela ressemble à un balisage "moche" pour moi, donc j'espère que quelqu'un d'autre aura une meilleure solution. Le code pour tester cela ressemble à ceci:la source
Dans le cas où vous ne souhaitez pas définir de largeur fixe
La solution ci-dessous vous permet d'avoir un contenu de cellule de tableau qui est long, mais ne doit pas affecter la largeur du tableau parent, ni la hauteur de la ligne parent. Par exemple, lorsque vous souhaitez avoir un tableau avec
width:100%
lequel s'applique toujours la fonction de dimensionnement automatique à toutes les autres cellules. Utile dans les grilles de données avec une colonne "Notes" ou "Commentaire" ou quelque chose.Ajoutez ces 3 règles à votre CSS:
Formatez HTML comme ceci dans n'importe quelle cellule de tableau dont vous voulez un débordement de texte dynamique:
Appliquez en outre souhaité
min-width
(ou aucun) à la cellule du tableau.Bien sûr, le violon: https://jsfiddle.net/9wycg99v/23/
la source
max-width: X
elles peuvent maintenant être plus larges - je pensais que c'était à cause dedisplay: flex
leur utilisation, mais j'ai supprimé cela et ne vois aucune différence ...Il semble que si vous spécifiez
table-layout: fixed;
sur l'table
élément, vos styles pourtd
devraient prendre effet. Cela affectera également la taille des cellules.Sitepoint discute un peu des méthodes de disposition de table ici: http://reference.sitepoint.com/css/tableformatting
la source
Si vous souhaitez simplement que le tableau soit automatiquement mis en page
Sans utiliser
max-width
, ni pourcentage de largeur de colonne,table-layout: fixed
etc.https://jsfiddle.net/tturadqq/
Comment ça fonctionne:
Étape 1: laissez simplement la mise en page automatique du tableau faire son travail.
Lorsqu'il y a une ou plusieurs colonnes avec beaucoup de texte, cela réduira autant que possible les autres colonnes, puis encapsulera le texte des longues colonnes:
Étape 2: enveloppez le contenu des cellules dans un div, puis définissez ce div sur
max-height: 1.1em
(le 0.1em supplémentaire est pour les caractères qui s'affichent un peu en dessous de la base de texte, comme la queue de 'g' et 'y')
Étape 3: réglez
title
les divsC'est bon pour l'accessibilité, et c'est nécessaire pour la petite astuce que nous utiliserons dans un instant.
Étape 4: ajouter un CSS
::after
sur le divC'est la partie délicate. Nous définissons un CSS
::after
, aveccontent: attr(title)
, puis le positionnons au-dessus du div et définissonstext-overflow: ellipsis
. Je l'ai colorée en rouge ici pour que ce soit clair.(Notez comment la longue colonne a maintenant des points de suspension)
Étape 5: définissez la couleur du texte div sur
transparent
Et c'est fini!
la source
<a>
au lieu de l'<div>
intérieur de la cellule du tableau. L'ajoutword-break: break-all;
résout le problème. Exemple: jsfiddle.net/de0bjmqvLorsqu'il est en pourcentage de largeur de tableau, ou que vous ne pouvez pas définir de largeur fixe sur la cellule du tableau. Vous pouvez demander
table-layout: fixed;
à le faire fonctionner.la source
Enveloppez le contenu des cellules dans un bloc flexible. En prime, la cellule s'adapte automatiquement à la largeur visible.
la source
white-space: nowrap;
à lachild
classe.J'ai résolu cela en utilisant un div absolument positionné à l'intérieur de la cellule (relatif).
C'est ça. Ensuite, vous pouvez soit ajouter une valeur top: à la div, soit la centrer verticalement:
Pour obtenir de l'espace sur le côté droit, vous pouvez réduire un peu la largeur maximale.
la source
Cela a fonctionné dans mon cas, à la fois dans Firefox et Chrome:
la source
Il s'agit de la version qui fonctionne dans IE 9.
http://jsfiddle.net/s27gf2n8/
la source