javascript - Using math functions to get integer values - Stack Overflow

I have some LessCSS that essentially looks like this:.foo {@height: 20px;@iconHeight: 13px;background-p

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!

Share Improve this question edited Dec 11, 2012 at 21:42 BryanH 6,0703 gold badges36 silver badges47 bronze badges asked Aug 16, 2011 at 11:42 nickfnickf 547k199 gold badges658 silver badges727 bronze badges 5
  • Update: I've found the 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
  • IMHO in this case I would rethink the design and choose sizes that don't don't need to be rounded, because due to the rounding, the calculated values will be "off" anyway. – RoToRa Commented Aug 16, 2011 at 11:55
  • @RoToRa, maybe in this one case that is a better option, but in general the issue still remains. – nickf Commented Aug 16, 2011 at 12:06
  • Shouldn't the "/ 2" be inside the Math.ceil call in the first lines? Meaining background-position: 0 Math.ceil((@height - @iconHeight) / 2) – TonioElGringo Commented Aug 16, 2011 at 12:25
  • @Tonio, ah yeah, you're right. – nickf Commented Aug 16, 2011 at 15:10
Add a ment  | 

1 Answer 1

Reset to default 5

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);
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745125773a4612683.html

相关推荐

  • javascript - Using math functions to get integer values - Stack Overflow

    I have some LessCSS that essentially looks like this:.foo {@height: 20px;@iconHeight: 13px;background-p

    6小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信