【问题标题】:Why does "overflow-y:hidden" affect the visibility of items overflowing on the x axis?为什么“overflow-y:hidden”会影响 x 轴上溢出项目的可见性?
【发布时间】:2011-02-22 08:01:57
【问题描述】:

考虑这个例子:

http://jsfiddle.net/treeface/P8JbW/

HTML

<div id="test">
    <img src="http://ycombinator.com/images/y18.gif" />
</div>

CSS

#test {
    position:relative;
    margin-left:50px;
    margin-top:50px;
    border:1px solid black;
    height:50px;
    width:50px;
    overflow-x:visible;
    overflow-y:hidden;
}
img {
    position:absolute;
    left:-11px;
}

我期待看到这个:

但我明白了:

这里似乎覆盖了overflow-x 属性。那是实际发生的事情吗?假设我必须将溢出-y 设置为隐藏,有没有办法解决这种行为?

【问题讨论】:

  • 这很有趣。我可以确认这发生在 Chrome 9、FF 3.6 和 Safari 5 中。如果有人可以检查这是否发生在各种 IE 版本中,这将是有用的。
  • IE 7 是一样的。 IE6 显示整个图像。
  • @Alohci:幸运的是,我不再需要对 IE6 进行编码;-)
  • 那很好。现在,如果我们可以向客户指出 IE7 的市场份额比 IE6 还要低,而且我们也不应该为此编写代码,那么我们将取得真正的进步……
  • 这发生在最新的 Chrome 上。 CSS 发展得这么差吗?大声笑

标签: html css


【解决方案1】:

来自CSS3 spec

overflow-xoverflow-y 的计算值与其指定的值相同,只是与visible 的某些组合是不可能的:如果一个指定为visible,另一个指定为scrollauto,然后将visible 设置为auto。如果overflow-y 相同,则overflow 的计算值等于overflow-x 的计算值;否则为overflow-xoverflow-y 的计算值对。

由此看来,overflow-xoverflow-y 的某些组合似乎无效,有时其中一个会覆盖另一个,这可以解释您在此处看到的内容。虽然我不确定措辞有点不清楚,浏览器实际实现它的方式可能与规范有所不同(尤其是当它难以破译时)。

【讨论】:

  • 非常有趣...感谢您提供的信息。顺便说一句,我还能够找到这个有用的页面,它显示了所有组合如何相互影响:brunildo.org/test/Overflowxy2.html
【解决方案2】:

overflow 旨在与非绝对定位的元素一起使用。如果要处理绝对定位元素的剪辑,请使用the clip css property。因此,要剪辑包含 div 的底部和顶部,而不是左侧或右侧,请执行以下操作:

#test {
    position:relative;
    margin-left:50px;
    margin-top:50px;
    border:1px solid black;
    height:50px;
    width:50px;
    clip: rect(auto,auto,auto,-11px);
}

示例:http://jsfiddle.net/treeface/UJNcf/6/

【讨论】:

  • 谢谢!解决方法正是我想要的。
  • 哇,我从没听说过clip,太棒了。
  • 也许这对 OP 有帮助,但它并没有回答他的问题。 Andrew Marshall 的回答 #answer-5072540 确实如此。
  • 仅供参考:clip 已弃用。 MDN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2010-12-23
相关资源
最近更新 更多