Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using math functions to get integer values

I have some LessCSS that essentially looks like this:

.foo {
    @height: 20px;
    @iconHeight: 13px;

    background-position: 0 (@height - @iconHeight) / 2;
}

However, this obviously turns out as background-position: 0 3.5px, and I'd prefer for it to be an integer (the value of Math.ceil), however this doesn't work:

background-position: 0 Math.ceil((@height - @iconHeight) / 2)

Nor does using the javascript evaluation operator:

background-position: 0 `Math.ceil((@height - @iconHeight) / 2)`

...since this is parsed as Math.ceil(20px - 13px) and the "px" there is a syntax error.

I've even tried using parseInt

0 `Math.ceil((parseInt('@{height}', 10) - parseInt('@{iconHeight}', 10)) / 2)`px

However this turns out like this:

background-position: 0 4 px

...which isn't right. And finally, even adding the "px" in the JS evaluation doesn't work

background-position: 0 `Math.ceil(....) + "px"`;
// becomes
background-position: 0 "4px";

Surely there's a better way!

like image 966
nickf Avatar asked Apr 02 '26 23:04

nickf


1 Answers

There is a simple workaround to the problem using temporary variable and 0px hack.

.foo {
    @height: 20px;
    @iconHeight: 13px;

    @result: `Math.ceil((parseInt('@{height}') - parseInt('@{iconHeight}')) / 2)`;
    background-position: 0 (0px + @result);
}
like image 139
avrelian Avatar answered Apr 04 '26 14:04

avrelian