代码之家  ›  专栏  ›  技术社区  ›  Diodeus - James MacFarlane

如何计算字体排版中的CSS字母间距v.s.“跟踪”?

  •  71
  • Diodeus - James MacFarlane  · 技术社区  · 15 年前

    我从一个图形设计师那里得到了一个布局的说明,它为一些元素指定了“track 100”。在CSS中 letter-spacing 是“跟踪”的等效属性。

    给定跟踪值,如何将其表示为以像素为单位的CSS值?

    5 回复  |  直到 6 年前
        1
  •  66
  •   Alex Larzelere    15 年前

    你必须使用像素吗?我发现的转换是跟踪值1000等于CSS中的1 em,所以在您的案例中,跟踪100应该是0.1 em。

    编辑

    要从em转到像素,请使用此网站 PXtoEM.com . 对于特定情况,0.1 em转换为2px。但是,这是基于16磅字体,因此您必须根据使用的特定字体大小进行调整。

        2
  •  25
  •   jnowland    9 年前

    tl;dr:将跟踪除以1000,然后使用 em s


    关于 letter spacing 的一点背景总是应用于文本,因此我们应该使用相对长度单位。as font-size can change by the user or even by cascade.

    文本的长度单位是 < Buff行情>

    此单位表示元素的计算字体大小。如果使用 在字体大小属性本身上,它表示继承的 元素的字体大小。 css length-Mozilla开发者网络

    < /块引用>

    为什么跟踪不同?

    布局应用程序,如Adobe的Photoshop、Illustrator和InDesign,在跟踪中使用 em ,但操作设备,使设计者更容易使用。为了更容易,他们 乘以1000。

    将跟踪转换回整体

    要做到这一点,我们只需要将跟踪号除以1000,就可以将该单元恢复为CSS可以使用的整个em。

    所以 50/1000=0.05em

    在css/scss中计算

    如果您使用的是 scss and want a reusable solution-here is a mixin.

    将Illustrator、InDesign和Photoshop跟踪转换为字母间距。 @功能跟踪($target){ @回报($target/1000)*1百万; } @混音跟踪($target){ 字母间距:跟踪($target); } < /代码>

    要使用上述功能,您只需执行此操作即可。

    。示例{
    @包括跟踪(50);
    }
    < /代码> 
    
    

    或者,你也可以不使用mixin就直接进行数学内联,这样它就不那么抽象了:

    。示例{
    字母间距:(50/1000)em;
    }
    < /代码> 
    
    

    上述示例的输出将是:

    。示例{
    字母间距:0.05em;
    }
    < /代码> 
    
    

    注: 不应使用基于像素的值,因为像素是固定的,并且在以下情况下中断:

    1. 设计器更改字体大小。你需要重新计算 该值。

    2. 如果用户更改了文本大小,您的网站设计将不会显示 如需阅读,甚至难以辨认。

    此外,浏览器呈现的文本与图形设计程序的呈现方式不同,因此,如果设计师在审查实现时调整了跟踪/字母间距,请不要感到惊讶。

    o文本,所以我们应该使用相对长度单位。ASfont-size可以由用户更改,甚至可以通过级联更改。

    这个最好的文本的长度单位是相对长度单位单位。

    此单位表示元素的计算字体大小。如果使用 在字体大小属性本身上,它表示继承的 元素的字体大小。 CSS Lengths - Mozilla Developer Network

    为什么跟踪不同?

    布局应用程序,如Adobe的Photoshop、Illustrator和InDesign的使用相对长度单位在跟踪中,但要操纵装置,这样设计师就可以更容易地使用它了。让他们更容易时代1000点。

    Indesign Tooltip: Tracking (in thousandths of an em

    将跟踪转换回整体相对长度单位

    要做到这一点,我们只需要将跟踪数除以1000,就可以将该单元恢复为CSS可以使用的整个em。

    所以50/1000 = 0.05em.

    用css/scss计算

    如果您正在使用SCSS想要一个可重用的解决方案-这里是一个混合。

    // Convert illustrator, indesign and photoshop tracking into letter spacing.
    
    @function tracking( $target ){
      @return ($target / 1000) * 1em;
    }
    
    @mixin tracking( $target ){
      letter-spacing: tracking( $target );
    }
    

    要使用上述功能,只需执行此操作。

    .example {
      @include tracking(50);
    }
    

    或者,你也可以不使用mixin直接输入数学,这样它就不那么抽象了:

    .example{
      letter-spacing: #{(50/1000)}em;
    }
    

    上述示例的输出将是:

    .example {
      letter-spacing: 0.05em;
    }
    

    注: 在以下情况下,不应使用基于像素的值,因为像素是固定的并中断的:

    1. 设计器更改字体大小。你需要重新计算 价值。

    2. 如果用户更改了文本大小,您的网站设计将不会显示 读不清,读不清。

    此外,浏览器呈现的文本与图形设计程序的呈现方式不同,因此,如果设计人员在审查实现时调整了跟踪/字母间距,则不会感到惊讶。

        3
  •  17
  •   Charley B. xeth23    11 年前

    跟踪转换css_字母间距__

    1 =1/1000 em
    100 =100/1000 em =0.10 em
    200 =200/1000 em =0.20 em
    
        4
  •  1
  •   Malcalevak    7 年前

    在大多数情况下,上面的答案是足够准确的,但是,使用的1000假设您的字体有1000的em大小,这并不总是如此。我见过字体的em大小是1024,有些甚至是2048,这显然会产生影响。

    你可以通过打开一个字体的内部 Font Forge 然后选择元素->字体信息菜单项和常规选项卡。

        5
  •  0
  •   stickyuser    6 年前

    如果字体大小以像素为单位,则可以使用以下公式:

    tracking * font-size 1000 letter-spacing