Skip to content Skip to sidebar Skip to footer

Align Decimal Data In Table Column By Decimal Point, Html5, Css3

I am building a wordpress plugin which is generating an HTML table and sending to gravityforms html block via shortcode. My problem is that cell contents can contain: 23.24 1,234.

Solution 1:

There is no direct way to do this. HTML 4.01 has align=char, but without any browser support. CSS 2.0 had a counterpart, using the text-align property, with equal lack of support, so it was dropped from CSS 2.1. CSS3 drafts have a nice system for such alignment, but indicated as being in danger of being cut from the spec if there are no (correct) implementations.

As a workaround, you could right-pad the values with something invisible (blank) so that when the values aligned to the right, the decimal markers get aligned. There are several ways to try to achieve this:

1) Use digit 0 but set a style on it, making it invisible, e.g.

123.4<spanclass=s>00</span>

with

.s { visibility: hidden; }

2) Use FIGURE SPACE U+2007, defined to have the same width as digits (when digits are of equal width), e.g.

123.4&#x2007;&#x2007;

For this to work, you need to set the font so that it contains U+2007. According to http://www.fileformat.info/info/unicode/char/2007/fontsupport.htm even Arial contains it, but I’m afraid this might not apply to old versions of Arial still in use.

3) Use a no-break space and set its width to the desired number of digits, using the ch unit (define to have the width of digit 0), though this unit is relatively new and not supported by old browsers. Example:

123.4<spanclass=d2>&nbsp;</span>

with

.d2 { width: 2ch; display: inline-block; }

I would probably use the first method. As a matter of principle, it has the drawback that when CSS is off, the data contains zeroes, which imply wrong information about accuracy, whereas in other methods, switching CSS off “only” messes up the layout.

(It’s probably obvious that digits must be of equal advance width, so that you can align numeric data at all. This just means that the font used for the values must have that property. Most fonts will do in this respect, but e.g. Georgia, Constantia, and Corbel won’t.)

Solution 2:

I wrote a jQuery plugin that solves this. It's found here: https://github.com/ndp/align-column

Using your raw HTML table, it will align a column by decimal points:

$('table').alignColumn(3);

It does this by adding another column, but does its best to not corrupt the other spacing. There's also a reference to a different solution on the Github page.

Solution 3:

Would it be acceptable to put the value into two columns?

Use sprintf() to convert the value into a string, and then put the bits up to the decimal point in the left column (but right aligned), and the decimal places in the second column.

See http://jsfiddle.net/alnitak/p4BhB/, but ignore the JS bit...

Solution 4:

The thing is, you've gotta ensure that they all have the same number of digits after the decimal.

Once you do that, use text-align. All it will take is a: style='text-align: right'

Better still, you could use a css class instead of inline styles. Your markup would look like this:

<tr><td>Item 1</td><td>15</td><tdclass='price'>&pound;123.25</td></tr>

Then in your stylesheet:

td.price{
  text-align: right;
}

With php, you can format a number as a string with number_format. You don't have to echo it or print it, just wrap your variable in that function. For example:

$table .= "<tdclass='price'>&pound;" . $price . "</td></tr>";

becomes:

$table .= "<tdclass='price'>&pound;" . number_format($price,3) . "</td></tr>";

Solution 5:

It might be overkill but I needed the same thing and just solved with a length of the output and adding whitespace based on that length.

I.e.:

if (strlen($meal_retail) == 5) {
echo"&nbsp;&nbsp;&nbsp;&nbsp;";
}
else (strlen($meal_retail) == 6) {
    echo"&nbsp;&nbsp;";
}

This lined up my decimals correctly with a bit of extra doing, and i'm sure an array could clean the above code up even nicer.

Additionally, i've been conforming my numbers adjusting with:

echo money_format('%i',$meal_retail)  (makes it a two decimal money number)

Just wanted to provide my solution as I was looking at this page before coming up with my own resolution.

Post a Comment for "Align Decimal Data In Table Column By Decimal Point, Html5, Css3"