6
votes

Aligner le point décimal de nombres dans une table, avec l'apparition d'un alignement pseudo-"centre" dans la cellule

Je veux une table contenant une colonne de nombres décimaux, de longueur variable avant et après la décimale, avec les points décimaux tous alignés.

La largeur de la colonne doit avoir une taille "liquide", en expansion si nécessaire pour accueillir un nombre très long dans l'une quelconque des cellules de données, ou un très long en-tête relatif à cette colonne.

Les cellules contenant des entiers (aucun point décimal) ne doivent toujours afficher les chiffres avec les chiffres alignés dans la même position que si un caractère décimal était présent. (par exemple, le nombre 512 doit encore avoir ses chiffres alignés correctement avec la cellule contenant uniquement "512" au lieu de "512")

La police devrait être sans importance; monospaced ne devrait pas être une exigence.

Enfin, les chiffres doivent également être centrés dans la colonne le mieux possible, tout en conservant les décimales (visibles et implicites!) alignées. Plus précisément, l'espace "vierge côté gauche" de la cellule avec le plus de caractères avant le caractère décimal (ou simplement la plupart des caractères s'il n'y a pas de caractère décimal présent) doit être de largeur égale comme le "espace vierge à droite" de la cellule avec le plus de caractères après le premier caractère décimal.

Je dis spécifiquement "caractères" au lieu de "chiffres" pour la nécessité finale, car la mise en page de la table doit gérer des caractères symboliques tels que des panneaux positifs / négatifs préparant les chiffres et des lettres telles que des acronymes d'unité de mesure ajoutant les chiffres.

La spécification HTML 4.01, "par le livre", permet une telle disposition d'être effectuée très facilement avec une simple table HTML. (Divisez les données sur son caractère décimal sur les deux cellules internes d'un coloproup à 4 colonnes, avec le col largeur de la largeur externe = "*" et interne deux col largeur = "0 *" , puis définissez le fichier cellpadding de la table de la table = "0" cellulePaçage = "0" Rules = "Groupes" .)

Mais un certain nombre de personnes disent que c'est mauvais et que CSS devrait être utilisé au lieu de tables à des fins de mise en forme. Je comprends également qu'une table avec des données sémantiquement correctes doit conserver ces chiffres intacts dans une seule cellule. Mais je n'ai trouvé aucune méthode CSS pour accéder au formatage souhaité!

Définir simplement l'alignement du texte d'une colonne sur "Centre" ne conserve pas les points décimaux alignés.

sauf si je me trompe, en utilisant Align = "Char" ne peut pas gérer les nombres entier qui n'ont pas de point décimal explicite, mais doivent toujours être alignés comme s'ils le faisaient.

Ajout d'un caractère décimal aux nombres entier, même si le cache-toi, il casse techniquement l'intégrité des données.

Rembourrage Les données avec des espaces non rompus ne fonctionnent pas avec des polices proportionnelles (non monospaces). Et ce piratage aussi briserait l'intégrité des données.

Spécification de la position par décalage de pixels fixes ne permet pas à la colonne d'avoir une largeur véritablement "liquide", rendue si nécessaire pour adapter le contenu de toutes les cellules de la colonne, y compris la cellule d'en-tête, qui pourrait contenir des données de toute longueur à tout moment.

JavaScript qui lit la largeur résultante du tableau après son rendement, puis calcule de manière dynamique des décalages de pixels, puis réécrit la mise en forme via DOM à "glisser" dans l'alignement de la "glissière" et de perturber visuellement lorsque les données sautent. Et c'est un piraté sale pivotant encore plus sale que d'utiliser des tables à des fins de mise en page!

Il me semble presque que l'approche "Purist" CSS-Payout + HTML-Sémantic-Data est incapable de faire cette mise en page simple mais souvent souhaitée! J'espère que quelqu'un peut me faire preuve de tort, et montrez-moi comment faire cette mise en page "correctement".


3 commentaires

Vous devriez d'abord essayer de trouver comment aligner les numéros sur le point décimal (en utilisant Align = Char fait pas travaille en réalité), voir par ex. Stackoverflow.com/Questtions/11600838/...


Chaque solution sur cette page implique une "corruption" les données (par exemple, en ajoutant des zéros ou des espaces superflus) ou en insérant une portée espacée par des caractères (toutes deux des limites sur les polices pouvant être utilisées), ou diviser les données sur Deux cellules (identiques sur la solution de table HTML 4.01 «sémantiquement incorrecte». Et aucune de ces solutions ne résout la question de «la meilleure tentative de centrage» des données dans la colonne visuelle.


J'ai écrit ce plugin JQuery pour résoudre le problème. Cela ne nécessite pas de retravailler les données. Github.com/ndp/align-column


4 Réponses :


0
votes

Je pense que l'attribut "Charoff" est ce dont vous avez besoin. Malheureusement, de nombreux navigateurs ne le soutiennent pas ...

http: // www. w3.org/tr/1999/rec-html401-19991224/truc/tables.html#adef-charoff

Avez-vous essayé de diviser chaque numéro en 2 cordes? Par exemple

"1234.567" sera "1234." et "567"

Ensuite, vous pouvez mettre la première chaîne dans une cellule (alignée droite) et l'autre partie de la cellule suivante (alignée gauche)


3 commentaires

Y a-t-il un navigateur qui le soutient? (En plus, si cela fonctionnait, il ne serait pas centré.)


Dani, ma solution de table HTML 4.01 d'origine (que les puristes du CSS balk at) sont à peu près exactement cela, séparant le nombre à la décimale en deux cordes. (Sauf que je mets la décimale au début de la chaîne de droite, pas la fin de la chaîne de gauche, donc des nombres entiers que la chaîne de gauche peuplée n'apparaissait toujours pas alignée ;-))


Une autre idée est d'ajouter des zéros (0) à la fin du nombre, afin d'aligner le point dans le même site (vous avez besoin d'une police monospacée).



0
votes

Compte tenu de vos besoins, il n'y a pas de solution (même à la question plus simple d'aligner sur le point décimal).


0 commentaires

1
votes

Il n'y a aucun moyen dans le HTML cru de le faire. J'ai écrit un plugin JQuery pour résoudre ce problème juste. Voir https://github.com/ndp/align-column

Il est simple à utiliser avec votre table non corrompue:

$ ('table'). Aligncolumn (3); Aligne l'index de la colonne 3.


2 commentaires

C'est génial, j'ai vu votre exemple. Mais je ne pouvais pas travailler ce droit. J'espère que tu peux m'aider. Donnez-moi une réponse alors je montrerai mon code. Merci


Si j'ai Stuff dans une ligne et juste en dessous de ce TD S Code> TH , est-il un moyen de faire valoir les deux cellules d'égale largeur? Je suis sûr que l'on pourrait le faire avec JS, mais connaissez-vous une solution CSS?



4
votes

Il existe une solution pure HTML / CSS pour cela, mais ce n'est pas joli. Vous devez séparer la colonne alignée décimale en deux colonnes, sans rembourrage entre eux. La première colonne a la valeur entière et est alignée à droite, la seconde a la valeur décimale et la valeur décimale. XXX

Vous pouvez également utiliser des classes comme ".Integer" et ".Decimal" par opposition à: Nth-enfant Sélectors. Ce serait plus robuste, mais j'essayais de garder le balancement court.


0 commentaires