Форматирование числа в виде валюты с помощью CSS

Просто интересно, знает ли кто-нибудь, можно ли форматировать содержимое элемента как валюты, используя только CSS. Было бы неплохо иметь представление о том, как значение представлено в CSS, если возможно, не может найти ничего, хотя я не задерживаю дыхание:)

<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
        .dollars:before { content:'$'; }
    </style>
</head>
<body>
    Pure CSS: <span class="dollars">25153.3</span>
    <br />
    Ideal format: <span>$25,153.30</span>
</body>
</html>

Этот пример выглядит как:

Чистый CSS: $25153.3

Идеальный формат: $25 153,30

Также я знаю, что это довольно тривиально, используя javascript - http://css-tricks.com/snippets/javascript/format-currency/.

Ответы

Ответ 1

Формат валюты может быть достигнут с помощью CSS и немного Javascript, который необходим для синтаксического разбора номера для добавления запятых. Класс CSS добавляет дополнительный стиль, например, отрицательный (красный) или знак валюты (т.е. Знак доллара США). Подход следующий:

1) Преобразуйте значение в число (добавляет запятую на основе локали)

Number(value).toLocaleString('en');

2) Добавьте класс, чтобы определить, является ли оно отрицательным или положительным (то есть красный цвет)

.enMoney::before {
    content:"$";
}
.negMoney {
    color:red;
}

Подробнее см. пример кода и css:

http://www.ozkary.com/2014/04/format-currency-with-javascript-and-css.html

Ответ 2

Если вы спрашиваете о форматировании чисел в CSS (то есть, разбираете число из строки, а затем форматируете его с разделителем тысяч, десятичным разделителем, фиксированным десятичным числом цифр и т.д.), то нет, это невозможно в CSS, и это не то, для чего был разработан CSS.

Если вы хотите сделать любое форматирование, вам лучше использовать XSLT. Например:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="span[@class='dollars']">
        <span>
            <xsl:text>$</xsl:text>
            <xsl:value-of select="format-number(current(), '###,###.00')"/>
        </span>
    </xsl:template>

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Ответ 3

Ну, к сожалению, это не подходит для вашего собственного использования, и это довольно очевидно, но вы можете сделать это для целых чисел от -999 до 999.

.currency:before{ content:'$'; }
.currency:after{ content: '.00'; }
<span class="currency">789</span>