【发布时间】:2015-05-01 09:37:03
【问题描述】:
说到浏览器的差异,看起来 Chrome 处理边距+填充的方式与其他浏览器有点不同。
以这个例子为例,它旨在通过负边距显示扩展背景,同时通过填充补偿保留文本位置:
a:hover {
background: lightblue;
padding: 0.3em;
margin: -0.3em;
}
只要你的 display 强制 block 显示,它就可以正常工作(但可以暗示水平移动,例如,如果你使用 inline-block),但使用 inline 会奇怪地“缩小”链接 1 px(从右侧或左侧,取决于文本宽度和容器宽度),好像悬停的内联链接小于非悬停的链接(当然,如果没有这种样式,这不会发生)。
这些动作都不会发生在 Firefox 或 Safari 上。 见demonstration of issue here。
有人能解释一下吗?它是 Chrome 特有的错误还是 Chrome 功能(例如,我看到有 -webkit-margin-after 和 -webkit-margin-before)?更糟糕的是,将不胜感激解决方法。谢谢。
【问题讨论】:
-
看起来主要是一个四舍五入的问题——在你的例子中将
.3提高到.5,效果就消失了……是否有“解决方法”,取决于问题的复杂性和什么你想在这里实际实现......对于你的简单示例,你可以简单地设置链接开始的填充和负边距,并且只在悬停时更改背景。 -
只需在您的填充/边距样式中使用像素而不是 em,您的问题就解决了
标签: css google-chrome hover margin padding