La text-overflow:ellipsis;
propriété CSS doit être l'une des rares choses que Microsoft a bien faites pour le Web.
Tous les autres navigateurs le prennent désormais en charge ... sauf Firefox.
Les développeurs de Firefox se disputent à ce sujet depuis 2005 mais malgré la demande évidente, ils ne semblent pas pouvoir se résoudre à l'implémenter (même une -moz-
implémentation expérimentale serait suffisante).
Il y a quelques années, quelqu'un a trouvé un moyen de pirater Firefox 3 pour qu'il prenne en charge une ellipse . Le hack utilise la -moz-binding
fonctionnalité pour l'implémenter en utilisant XUL. Un certain nombre de sites utilisent maintenant ce hack.
Les mauvaises nouvelles? Firefox 4 supprime la -moz-binding
fonctionnalité , ce qui signifie que ce hack ne fonctionnera plus.
Donc, dès la sortie de Firefox 4 (plus tard ce mois-ci, j'entends), nous allons revenir au problème de ne pas pouvoir prendre en charge cette fonctionnalité.
Ma question est donc la suivante: y a-t-il un autre moyen de contourner cela? (J'essaie d'éviter de revenir à une solution Javascript si possible)
[EDIT]
Beaucoup de votes à la hausse, donc je ne suis évidemment pas le seul à vouloir savoir, mais j'ai jusqu'à présent une réponse qui dit essentiellement «utiliser javascript». J'espère toujours une solution qui n'aura pas besoin du tout de JS, ou au pire ne l'utilisera que comme solution de secours là où la fonctionnalité CSS ne fonctionne pas. Je vais donc publier une prime sur la question, au cas où quelqu'un, quelque part, aurait trouvé une réponse.
[EDIT]
Une mise à jour: Firefox est passé en mode de développement rapide, mais malgré la sortie de FF5, cette fonctionnalité n'est toujours pas prise en charge. Et maintenant que la majorité des utilisateurs sont passés de FF3.6, le hack n'est plus une solution. La bonne nouvelle, on me dit qu'il pourrait être ajouté à Firefox 6, qui, avec le nouveau calendrier de publication, devrait sortir dans quelques mois seulement. Si tel est le cas, alors je suppose que je peux attendre, mais c'est dommage qu'ils n'aient pas pu régler le problème plus tôt.
[EDIT FINAL]
Je vois que la fonction de sélection a finalement été ajoutée à "Aurora Channel" de Firefox (c'est-à-dire la version de développement). Cela signifie qu'il devrait maintenant être publié dans le cadre de Firefox 7, qui devrait sortir vers la fin de 2011. Quel soulagement.
Notes de version disponibles ici: https://developer.mozilla.org/en-US/Firefox/Releases/7
Réponses:
Spudley, vous pouvez réaliser la même chose en écrivant un petit JavaScript en utilisant jQuery:
Je comprends qu'il devrait y avoir un moyen que tous les navigateurs prennent en charge nativement (sans JavaScript) mais, c'est ce que nous avons à ce stade.
EDIT En outre, vous pouvez le rendre plus soigné en attachant une
css
classe à tous ces champs de largeur fixefixWidth
, puis faites quelque chose comme ce qui suit:la source
text-overflow:ellipsis;
afin que je puisse toujours utiliser l'option CSS dans d'autres navigateurs.length()
êtrelength
? C'est une propriété.EDIT 30/09/2011
FF7 est sorti, ce bug est résolu et ça marche!
EDIT 29/08/2011
Ce problème est marqué comme résolu et sera disponible dans FF 7; actuellement prévu pour sortir le 27/09/2011.
Marquez vos calendriers et préparez-vous à supprimer tous ces hacks que vous avez mis en place.
VIEUX
J'ai une autre réponse: attendez .
L'équipe de développement FF est à la recherche de résoudre ce problème.
Ils ont un ensemble de correctifs provisoires pour Firefox 6.
Personne facile là-bas, imaginaire, trop réactive. Firefox est sur la voie du développement rapide. FF6 devrait sortir six semaines après Firefox 5. Firefox 5 devrait sortir le 21 juin 2011.
Cela met donc le correctif au début d'août 2011 ... j'espère.
Vous pouvez vous inscrire à la liste de diffusion en suivant le bug à partir du lien dans la question de l'affiche originale.
Ou vous pouvez cliquer ici ; selon la solution la plus simple.
la source
Je dois dire que je suis un peu déçu que le seul hack spécifique au navigateur dans mon application soit de prendre en charge FF4. La solution javascript ci-dessus ne tient pas compte des polices à largeur variable. Voici un script plus détaillé qui en tient compte. Le gros problème avec cette solution est que si l'élément contenant le texte est masqué lors de l'exécution du code, la largeur de la boîte n'est pas connue. C'était un facteur décisif pour moi, alors j'ai arrêté de travailler dessus / de le tester ... mais j'ai pensé que je le publierais ici au cas où il serait utile à quelqu'un. Assurez-vous de bien le tester car mes tests étaient loin d'être exhaustifs. J'avais l'intention d'ajouter une vérification du navigateur pour n'exécuter que le code de FF4 et laisser tous les autres navigateurs utiliser leur solution existante.
Cela devrait être disponible pour jouer ici: http://jsfiddle.net/kn9Qg/130/
HTML:
CSS:
Javascript (utilise jQuery)
Il s'appellerait comme:
la source
J'ai aussi rencontré ce gremlin la semaine dernière.
Étant donné que la solution acceptée ne tient pas compte des polices à largeur variable et que la solution de wwwhack a une boucle While, je vais ajouter 0,02 $.
J'ai pu réduire considérablement le temps de traitement de mon problème en utilisant la multiplication croisée. En gros, nous avons une formule qui ressemble à ceci:
La variable x dans ce cas est ce que nous devons résoudre. Lorsqu'il est retourné en tant qu'entier, il donnera la nouvelle longueur que le texte débordant devrait être. J'ai multiplié la MaxLength de 80% pour donner aux ellipses suffisamment de place pour s'afficher.
Voici un exemple html complet:
Je comprends que ce n'est qu'un correctif pour JS, mais tant que Mozilla ne corrige pas le bogue, je ne suis tout simplement pas assez intelligent pour proposer une solution CSS.
Cet exemple fonctionne le mieux pour moi car le JS est appelé chaque fois qu'une grille se charge dans notre application. La largeur des colonnes pour chaque grille varie et nous n'avons aucun contrôle sur le type d'ordinateur que nos utilisateurs de Firefox voient notre application (ce que, bien sûr, nous ne devrions pas avoir ce contrôle :)).
la source
Cette solution CSS pure est vraiment proche, à l'exception du fait qu'elle fait apparaître des ellipses après chaque ligne.
la source