这标题真是一言难尽!所以我有一个绝对定位的父元素,高度为 100%,它的子元素有img
100% max-height
。现在,虽然 WebKit (Chromium25) 和 Opera (12) 缩小父级的计算/渲染宽度以匹配img
新的(更小的)宽度,但 Gecko (FF21) 将其保留为img
s(集体)原始宽度,并且父级似乎有一个大右填充。
见这里: http: //jsfiddle.net/b3TY5/(大屏幕所有者:请调整浏览器窗口大小,以便灰色图像开始缩小)
现在我读到它position: absolute
被过度使用(并且我找到了解决问题的方法),但我仍然会对
- 使 Gecko 表现得像 WebKit 的解决方案(IMO WebKit 的方式更合乎逻辑。或者我错了吗?)
- 对不同行为的解释,也许是关于未来遇到这种情况的最佳实践(但请比“不要使用绝对位置”更具建设性;)
谢谢!
编辑:我的解决方法并不完美,因为我最终得到了具有 100% 宽度的父元素,所以我不能有一个绝对定位的子元素right: 0
。当我将父级设置为 时display: inline-block
,WebKit 显示与 Gecko 相同的行为。参照。http://jsfiddle.net/b3TY5/1/并确保有一个非常小的结果窗口。注意第一个 div 的右填充。
编辑2:
- 恐怕原始问题的解决方案可能只是:这很奇怪。正如@Diodeus 指出的那样,
position: absolute
vs.存在问题height: 100%
。对我来说,这从来都不是问题:两个浏览器都将图像缩小到视口的(最大)高度(即使没有指定)但它们的占位符至少在水平方向上没有正确缩放,因为据我所知。这个误差范围随着父容器变小而增加。虽然 WebKit 缩小父级以整齐地包裹其子级,但它仅在页面加载时这样做,而不是在调整大小之后...... - 在我的解决方法中 - 没有
position: absolute
/height: 100%
- 我发现 Gecko/WebKit 不一致:http: //jsfiddle.net/b3TY5/3/;withbox-sizing: border-box
(resp.-moz-box-sizing
) WebKit 会缩小父级以匹配子级的宽度(蓝色 div 小于黄色),而 Gecko 不会(蓝色和黄色 div 宽度相等)。