从像素转换为em

时间:2015-05-10 13:22:50

标签: css less less-mixins unit-conversion

前几天我在Tutsplus看了一个关于防弹网页设计的非常好的教程。讲师有一个很棒的功能,是在Stylus中制作的。

$base_font_size = 16

$base_font_size_ems = unit($base_font_size / 16, em)

$px = unit(1 / $base_font_size, rem)

$px_em = unit(1 / $base_font_size, em)

要在Stylus中调用这个很酷的功能,只需输入:

即可
.button
  font-size: 16 * $px
  border-radius: 3 * $px solid #000

如果我理解这是正确的。该功能让我以像素为单位思考,但输出em中的所有内容。 现在,我如何在Less中执行相同的功能? : - )

1 个答案:

答案 0 :(得分:4)

从Stylus到Less的转换非常简单。等效的Less代码如下:

@base_font_size: 16;
@base_font_size_ems: unit(@base_font_size / 16, em);
@px: unit(1 / @base_font_size, rem);
@px_em: unit(1 / @base_font_size, em);

.button{
  font-size: 16 * @px;
  border-radius: 3 * @px solid #000;
}

请注意,上述内容只是对相关代码进行直接转换,目前始终会为emrem生成相同的值。但是,emrem通常只有在根字体大小和父字体大小相同时才相同。有关emrem

的详情,请查看here

下面的代码片段是一个修订版本,我们有一个单独的mixin用于执行px到em / rem转换。这里我们在变量(全局范围)中设置根字体大小,然后在每个选择器块(本地范围)中设置父字体大小,并作为参数传递给mixin。基于这些,可以适当地输出rem和em值。

@root_font_size: 32;

.rem_em_px_conversion(@parent_font_size: 32){

  @px_rem: unit(1 / @root_font_size, rem);
  @px_em: unit(1 / @parent_font_size, em);
}
.div{
    .rem_em_px_conversion();
    font-size: 16 * @px_em; /* change to 16 * @px_rem for converting to rem */
    border-radius: 4 * @px_em solid #000;
    .button{
      @parent_font_size: 16; /* this is same as parent div font size */
      .rem_em_px_conversion(@parent_font_size);
      font-size: 16 * @px_em;
      border-radius: 4 * @px_em solid #000;
    }
}