当我从 px 转换为 rem 单位时,我应该如何决定给出多少 rem 的<input>宽度



>我有以下内容:

<input maxlength="4" style="width: 50px;" type="text" data-ng-model="pidUpper" />

我希望我的输入框最多容纳 4 个字符。如果我使用 rem 单位,在决定宽度时应该使用一些公式吗?

除非你使用等宽字体,否则你无法真正知道它应该有多宽。

这是CSS技巧中等宽字体的一个很好的字体堆栈

/* Monospace stack */
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;

此外,如果您只是在寻找验证,则始终可以在Javascript中告诉字符串的长度。 与"string".length

至于rems,这里有一篇很棒的文章,解释了em,px和rem之间的区别 http://snook.ca/archives/html_and_css/font-size-with-rem。

CSS3 引入了一些新单元,包括 rem 单元,它 对于"根 em"。如果这还没有让你入睡,那么让我们看看 快速眼动的工作原理。这是一句话

em 单位相对于父级的字体大小,这会导致 复杂的问题。rem 单位相对于根 - 或 HTML - 元素。这意味着我们可以在 元素,并将所有 rem 单位定义为其中的百分比。

REM 基于根 HTML,可以说大多数时候都是 16 作为基础。如果您希望在给定的选择中最多 4 个 REM 字符,您只需将基本金额乘以最大数量即可。 16 * 4 = 64

您不能从px转换为rem单位,就像不能从香蕉转换为苹果一样。也就是说,只有当你假设某种特定的关系时,你才能转换,比如rem16px的,或者一根香蕉对应于某些特定情况下的两个苹果,然后转换是微不足道的。如果你假设一个固定的关系,那么使用rem是没有意义的。

通常不可能使元素的宽度正好为 4 个字符,因为在大多数字体中,字符的宽度各不相同(可能很多,例如典型字体中的"i"与"W")。要使其宽度为 4 个字符的平均宽度,最好的尝试是仅使用 HTML 属性

size=4

input元素的 size 属性以"平均"字符为单位设置宽度。实现各不相同,在这个问题上不是特别好。

为了获得更一致的渲染,您可以另外将字体设置为等宽,例如使用 font-family: Consolas, monospace .当然,这使得平均宽度字符的概念得到了很好的定义,并且浏览器的任务更容易。它们可能会使字段太宽几个像素,但这应该是可以容忍的。在一些非常旧的浏览器上,该字段可能太窄,但这很难在不引起其他问题的情况下修复。如果输入是某种代码,如 PID,那么等宽字体可能就可以了。

在这个答案的第一个版本中,我建议在 CSS 中使用 ch 单元。我将保留基本部分,因为它可能与已知所用浏览器的某些上下文相关。但是IE 10似乎有一个可怕的错误实现ch(它的价值太小了)。

从答案的第一个版本:

您可以使用属性

size=4 style="width: 2.4em; width: 4ch"

CSS 中的ch单位表示数字零 (0) 的宽度,但它是"平均"字符宽度的相当好的近似值。由于并非所有浏览器都支持此单元,因此我使用 em 单元提供了回退。这只是一个粗略的猜测,根据一些经验和实验,2.4em通常约为 4 个平均字符宽。(回退必须位于新式设置之前,以便回退不会覆盖你真正想要使用的设置。

如果预期的输入是例如大写字母,您可能需要考虑在此处进行一些调整,可能是根据您主要为 input 元素建议的字体特征。

最新更新