我创建了一个带有按钮 html 标记的按钮。现在我正在尝试在 em 中制作高度和宽度。我知道 16px 等于 1em。该规则适用于我目前看到的所有东西,除了按钮。如果我希望按钮高度为 45px,则按钮高度为 45px。如果我想将 45px 更改为 em,那就是 2.8125em。会短很多。为了使它接近 45px 与 em 它实际上是 3.5em 左右,在 px 中实际上是 56px。这是为什么?是浏览器的问题吗?顺便说一句,我正在使用 Safari。
6 回答
em
等于相关元素的字体大小。如果您的按钮的字体大小与16px不同,那么em
也会有所不同。
您一直在查看的所有元素的字体大小都必须设置为 16 像素。这并不奇怪,因为它是许多浏览器的默认设置。
其他人谈到了对 em 单位如何与像素相关的误解,但根本问题尚未得到充分解决。
我今天发布了同样的问题,showdev在这里回答了它。
本质上,按钮应用了“系统字体”,阻止它继承其父级的字体大小。据我所知,这发生在所有主要浏览器中,并且是“预期行为”。
为了克服这个问题,在你的 css 中,指定按钮标签(或只是一个特定的按钮)应该显式地继承它们的字体大小:
button {
font-size:inherit;
}
这将使其将 em 大小视为与您正在处理的其他元素相同。当然,这也会改变文本的大小,这对你来说可能是也可能不是问题......
我知道 16px 等于 1em。
那是不对的。unil1em
不对应于特定的像素值,它对应于元素当前字体的字符大小。
默认情况下,该按钮具有不同的字体。设置按钮的字体,它会得到你习惯的大小。
但是,如果您希望大小为一定数量的像素,则应使用px
单位而不是em
. 即使您指定相同的字体系列和字体大小,em
单位也可能在浏览器和操作系统之间有所不同。
从此页面关于 CSS 中的单位:
em 和 ex 单位取决于字体,并且对于文档中的每个元素可能不同。em 只是字体大小。
em
来自The Amazing em unit 和其他最佳实践的更多信息:
多年来,“em”的含义发生了变化。并非所有字体都有字母“M”(例如中文),但所有字体都有高度。因此,该术语指的是字体的高度,而不是字母“M”的宽度。
在 CSS 中,em 单位是测量长度的通用单位,例如页边距和元素周围的填充。
最后是W3 规范的定义:
单位
等于使用它的元素的 'font-size' 属性的计算值。
按钮的 line-height 可能与其他元素的 line-height 不同,加上 1em 仅等于 16px 如果这是您设置的基础。很可能是这样,但是在您提供的描述中我并不清楚,所以我只想指出这一点。
1em 等于 font-size 默认等于 16px(浏览器默认 font-size 选项)
例子
<button style="padding:0;border:0;background:#2f55c3;color:#fff;min-width:4em;height:3em;font-size:1em;">Text</button>