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"`;
// bees
background-position: 0 "4px";
Surely there's a better way!
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"`;
// bees
background-position: 0 "4px";
Surely there's a better way!
round
function which works for me in this specific case, however I'd still be interested to know if there was a general way to solve this problem.
– nickf
Commented
Aug 16, 2011 at 11:46
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);
}