以*字符*指定宽度

Mar*_*ans 101 css font-size

使用固定宽度字体时,我想以字符指定HTML元素的宽度.

"em"单位应该是M字符的宽度,所以我应该能够用它来指定宽度.这是一个例子:

<html>
  <head>
    <style>
      div {
        font-family: Courier;
        width: 10em;
      }
    </style>
  </head>
  <body>
    <div>
      1 3 5 7 9 1 3 5 7 9 1
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果不是我想要的,因为第15列后的浏览器行中断,而不是10:

1 3 5 7 9 1 3 5
7 9 1
Run Code Online (Sandbox Code Playgroud)

(在Ubuntu中都有Firefox和Chromium的结果.)

维基百科的文章说,"em"并不总是M的宽度,所以看起来"em"单位看起来不可信任.

tra*_*r09 180

单位是ch.如果MDN是正确的,则不受广泛支持. 主流浏览器的当前版本支持它.

pre {
    width: 80ch; /* classic terminal width for code sections */
}
Run Code Online (Sandbox Code Playgroud)

  • 还有[数字空间](https://en.wikipedia.org/wiki/Figure_space),它正好"等于一位数的宽度",如维基百科的[空格(标点符号)](https:// en.wikipedia.org/wiki/Space_%28punctuation%29)文章.它的Unicode值是U + 2007,可以使用`&#x2007;`或`&#8199;`在HTML中输入.它在功能上等同于CSS的`ch`单元,但是虽然它没有被广泛支持,但它可以用作HTML中的变通方法(丑陋的黑客,但应该工作). (3认同)
  • 实际上,根据[此铬问题](https://code.google.com/p/chromium/issues/detail?id=196822),Chrome从v27开始支持它,所以现在所有主流浏览器的最新版本(IE,Chrome和Firefox)支持ch单位:) (2认同)
  • 应该注意字符大小是元素字体中字形'0'的大小.如果您期望更大的字符,如"m"或"w",您可能需要考虑相应扩展或根据需要进行扩展(例如http://stackoverflow.com/questions/7168727/make-html-text-input-field-成长-AS-I型)的 (2认同)
  • IE11支持它错误。/sf/ask/1247794691/ (2认同)

Ger*_*ann 22

1em是M的高度,而不是宽度.同样适用于ex,即x的高度.更一般地说,这些是大写和小写字母的高度.

宽度是一个完全不同的问题....

将上面的示例更改为

<div>
    <span>1</span> 3 5 7 9 1 3 5 7 9 1
</div>
Run Code Online (Sandbox Code Playgroud)

你会发现跨度的宽度和高度是不同的.对于Chrome上的字体大小为20px,跨度为12x22像素,其中20px是字体的高度,2px是行高.

现在因为em和ex在这里没用,所以只有CSS解决方案的可能策略是

  1. 创建一个仅包含 的元素
  2. 让它自动自动化
  3. 将你的div放在和
  4. 使其成为周围元素的10倍.

但是我无法对此进行编码.我也怀疑它真的有可能.

然而,可以在Javascript中实现相同的逻辑.我在这里使用无处不在的jQuery:

<html>
  <head>
    <style>
      body { font-size: 20px; font-family: Monospace; }
    </style>
    <script 
      type="text/javascript" 
      src ="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
    </script>
  </head>
  <body>
    <div>1 3 5 7 9 1 3 5 7 9 1</div>
    <script>
      $('body').append('<div id="testwidth"><span>&nbsp;</span></div>');
      var w = $('#testwidth span').width();
      $('#testwidth').remove();
      $('div').css('width', (w * 10 + 1) + 'px');       
    </script>
  </body>
</html> 
Run Code Online (Sandbox Code Playgroud)

+(in*w*10 + 1)是处理舍入问题.

  • 我希望有一个纯CSS解决方案,只有当你碰巧知道字符的高度和宽度之间的比率时才有可能(请参阅http://stackoverflow.com/questions/1255281/how-to-set-width -of-div-以适应等宽字体中的常量字母数)。我接受这个答案,因为它似乎是一个强大的解决方案。 (2认同)