Rencontrez Fred. C'est une table:
<table border="1" style="width: 100%;">
<tr>
<td>This cells has more content</td>
<td>Less content here</td>
</tr>
</table>
L'appartement de Fred a une habitude bizarre de changer de taille, alors il a appris à cacher une partie de son contenu afin de ne pas repousser toutes les autres unités et de pousser le salon de Mme Whitford dans l'oubli:
<table border="1" style="width: 100%; white-space: nowrap; table-layout: fixed;">
<tr>
<td style="overflow: hidden; text-overflow: ellipsis">This cells has more content</td>
<td style="overflow: hidden; text-overflow: ellipsis">Less content here</td>
</tr>
</table>
Cela fonctionne, mais Fred a un sentiment persistant que si sa cellule droite (qu'il surnomme Celldito) abandonnait un peu d'espace, sa cellule gauche ne serait pas tronquée autant de fois. Pouvez-vous sauver sa raison?
En résumé: comment les cellules d'un tableau peuvent-elles déborder uniformément, et seulement lorsqu'elles ont toutes abandonné tout leur espace?
Réponses:
http://jsfiddle.net/7CURQ/
la source
<col>
s en ajoutant à la place les largeurs aux<td>
styles: jsfiddle.net/7CURQ/64Je crois avoir une solution non javascript! Mieux vaut tard que jamais, n'est-ce pas? Après tout, c'est une excellente question et Google est partout. Je ne voulais pas me contenter d'un correctif javascript car je trouve inacceptable la légère gigue des choses qui se déplacent après le chargement de la page.
Caractéristiques :
Fonctionnement : à l'intérieur de la cellule du tableau, placez deux copies du contenu dans deux éléments différents au sein d'un élément conteneur relativement positionné. L'élément d'espacement est positionné de manière statique et, en tant que tel, affectera la largeur des cellules du tableau. En permettant au contenu de la cellule d'espacement de s'enrouler, nous pouvons obtenir la largeur "la mieux adaptée" des cellules du tableau que nous recherchons. Cela nous permet également d'utiliser l'élément en position absolue pour restreindre la largeur du contenu visible à celle du parent relativement positionné.
Testé et fonctionne dans: IE8, IE9, IE10, Chrome, Firefox, Safari, Opera
Images de résultat :
JSFiddle : http://jsfiddle.net/zAeA2/
Exemple HTML / CSS :
la source
title
au lieu dedata-spacer
pour obtenir une info-bulle sur la souris sur :)J'ai été confronté au même défi il y a quelques jours. Il semble que Lucifer Sam ait trouvé la meilleure solution.
Mais j'ai remarqué que vous devez dupliquer le contenu à l'élément d'espacement. Je pensais que ce n'était pas si mal, mais j'aimerais également appliquer une
title
fenêtre contextuelle pour le texte coupé. Et cela signifie qu'un texte long apparaîtra pour la troisième fois dans mon code.Ici, je propose d'accéder à l'
title
attribut à partir du:after
pseudo-élément pour générer un espaceur et garder le HTML propre.Fonctionne sur IE8 +, FF, Chrome, Safari, Opera
http://jsfiddle.net/feesler/HQU5J/
la source
Si Javascript est acceptable, j'ai mis en place une routine rapide que vous pourriez utiliser comme point de départ. Il essaie dynamiquement d'adapter les largeurs de cellule en utilisant la largeur intérieure d'une plage, en réaction aux événements de redimensionnement de fenêtre.
Actuellement, il suppose que chaque cellule obtient normalement 50% de la largeur de la ligne, et elle réduira la cellule de droite pour garder la cellule de gauche à sa largeur maximale pour éviter de déborder. Vous pouvez implémenter une logique d'équilibrage de largeur beaucoup plus complexe, selon vos cas d'utilisation. J'espère que cela t'aides:
Balisage pour la ligne que j'ai utilisée pour les tests:
JQuery qui connecte l'événement de redimensionnement:
la source
Il existe une solution beaucoup plus simple et élégante.
Dans la cellule de tableau à laquelle vous souhaitez appliquer la troncature, incluez simplement un div de conteneur avec CSS table-layout: fixed. Ce conteneur prend toute la largeur de la cellule du tableau parent, il agit donc même de manière réactive.
Assurez-vous d'appliquer la troncature aux éléments du tableau.
Fonctionne à partir d'IE8 +
et css:
voici un violon fonctionnel https://jsfiddle.net/d0xhz8tb/
la source
Le problème est la «disposition de la table: fixe» qui crée des colonnes à largeur fixe et à espacement uniforme. Mais la désactivation de cette propriété css va tuer le débordement de texte parce que la table deviendra aussi grande que possible (et qu'il n'y a pas de dépassement).
Je suis désolé mais dans ce cas, Fred ne peut pas avoir son gâteau et le manger à moins que le propriétaire ne donne à Celldito moins d'espace pour travailler en premier lieu, Fred ne peut pas utiliser son ..
la source
Vous pouvez essayer de "pondérer" certaines colonnes, comme ceci:
Vous pouvez également essayer quelques ajustements plus intéressants, comme l'utilisation de colonnes à 0% de largeur et l'utilisation d'une combinaison de la
white-space
propriété CSS.Vous avez eu l'idée.
la source
Oui, je dirais que thirtydot l'a, il n'y a aucun moyen de le faire à moins d'utiliser une méthode js. Vous parlez d'un ensemble complexe de conditions de rendu que vous devrez définir. Par exemple, que se passe-t-il lorsque les deux cellules deviennent trop grandes pour leurs appartements, vous devrez décider qui a la priorité ou simplement leur donner un pourcentage de la zone et si elles sont trop remplies, elles occuperont toutes les deux cette zone et seulement si l'une a des espaces blancs vous étirez vos jambes dans l'autre cellule, de toute façon il n'y a aucun moyen de le faire avec css. Bien qu'il y ait des choses assez géniales que les gens font avec CSS auxquelles je n'ai pas pensé. Je doute vraiment que vous puissiez le faire.
la source
Comme la réponse de l'échantillon, encore une fois si Javascript est une réponse acceptable, j'ai créé un plugin jQuery spécifiquement à cet effet: https://github.com/marcogrcr/jquery-tableoverflow
Pour utiliser le plugin, tapez simplement
Exemple complet: http://jsfiddle.net/Cw7TD/3/embedded/result/
Modifications:
la source
Utilisez un peu de hack CSS, il semble que cela
display: table-column;
puisse venir à la rescousse:JSFiddle: http://jsfiddle.net/blai/7u59asyp/
la source
Ajoutez simplement les règles suivantes à votre
td
:Exemple:
PS: si vous souhaitez définir une largeur personnalisée sur une autre
td
propriété usemin-width
.la source
Cette question apparaît en haut dans Google, donc dans mon cas, j'ai utilisé l'extrait css de https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ mais l'appliquer au td n'a PAS donné le résultat souhaité.
J'ai dû ajouter une balise div autour du texte dans le td et les points de suspension ont finalement fonctionné.
Code HTML abrégé;
CSS abrégé;
la source
Vérifiez si "nowrap" résout le problème dans une certaine mesure. Remarque: nowrap n'est pas pris en charge en HTML5
la source
white-space: nowrap
a le même effet que l'nowrap
attribut (et je l'utilise dans l'exemple). L'ajouter ici ne change rien, pour autant que je sache.vous pouvez définir la largeur de la cellule de droite au minimum de la largeur requise, puis appliquer le débordement caché + le débordement de texte à l'intérieur de la cellule de gauche, mais Firefox est bogué ici ...
bien que, semble-t-il, flexbox peut aider
la source
J'ai récemment travaillé dessus. Découvrez ce test jsFiddle , essayez-le vous-même en modifiant la largeur de la table de base pour vérifier le comportement).
La solution consiste à incorporer une table dans une autre:
Fred est-il maintenant satisfait de l'expansion de Celldito?
la source
Je ne sais pas si cela aidera quelqu'un, mais j'ai résolu un problème similaire en spécifiant des tailles de largeur spécifiques en pourcentage pour chaque colonne. Évidemment, cela fonctionnerait mieux si chaque colonne a un contenu dont la largeur ne varie pas trop.
la source
J'ai eu le même problème, mais j'avais besoin d'afficher plusieurs lignes (où
text-overflow: ellipsis;
échoue). Je le résous en utilisant untextarea
intérieurTD
et je le stylise pour qu'il se comporte comme une cellule de tableau.la source
Étant donné que `` table-layout: fixed '' est l'exigence de mise en page essentielle, que cela crée des colonnes non ajustables régulièrement espacées, mais que vous devez créer des cellules de différentes largeurs en pourcentage, peut-être définir le `` colspan '' de vos cellules sur un multiple?
Par exemple, en utilisant une largeur totale de 100 pour des calculs de pourcentage faciles et en disant que vous avez besoin d'une cellule de 80% et d'une autre de 20%, considérez:
Bien sûr, pour les colonnes de 80% et 20%, vous pouvez simplement définir le colspan de cellule de largeur 100% sur 5, le 80% sur 4 et le 20% sur 1.
la source
td
s?