由于某些原因,与其他具有相同值的元素相比,button
元素在动态值上具有额外的“填充”或“高度”。
我已经在iOS上的Chrome和Safari中验证了这个问题,并且我的一个朋友在Android上的Chrome中验证了这个问题。
A. 填充的固定值
span, button {
padding: 16px;
}
右侧的 button
高度比左侧多 1px
,但根据控制台日志,两个元素在其他方面是相等的,这似乎确实是事实。这里是 codepen。
B. 填充的动态值
span, button {
padding: calc(var(--gap) / 2);
}
@media screen and (min-width: 0px) {
html {
--gap: calc(10px + (40 - 10) * (100vw - 0px) / (1200 - 0));
}
}
很明显,右侧的 button
比左侧的 span
元素高得多,即使控制台显示它们基本相等,并且已经应用了完全相同的值...
这里是 codepen。
A 和 B 之间唯一的区别是 B 没有使用固定值。
这种奇怪的行为在 iOS 和 Android 上都可以观察到。
在样式之前将
appearance
设置为none
没有效果。在桌面浏览器上一切正常。
有人知道这里发生了什么吗?
更新
将line-height: 1.15
和margin: 0
应用于button
元素可以减少差异。
奇怪的是,控制台声称span
元素仍然比button
元素宽1px
(高2px
),即使如果您叠加这两个元素,它们实际上具有完全相同的宽度。
span
元素的文本比button
元素中的文本低1px
或2px
,这是有道理的,因为span
元素比button
元素高1px
或2px
。
button {
...
margin: 0;
line-height: 1.15;
}
这里是codepen。
我只想将按钮的高度增加一个像素或两个像素,但不幸的是,我的网站上许多元素的高度由动态font-size
和padding
的组合确定。而我不想经常在后台运行一堆JS来动态计算每个元素的高度。
</span>
关闭了按钮。 - Migappearance
设置为所有前缀版本的none
。如果你这样做,它应该表现得像一个span。还要确保它们都是inline
或inline-block
,而不是混合使用。这可能不会改变任何东西,但只是为了确保它们表现相同。 - Migline-height: 1.15
这个属性也无法减少差异。 - oldboy