在下面的小提琴中,布局包括:
.Header
.Container
display: grid;
。容器有两个使用grid-column
样式的子项。
第一列有一个图像作为子项进行转换,因此溢出在列的顶部和标题的顶部。
我原本期望设置overflow-x
属性只会隐藏列左侧的任何额外内容,但它也会裁剪y轴溢出的图像,即使overflow-y
是仍然可见。
https://jsfiddle.net/dmnsgn/kuk4065d/
CSS:
.Header {
width: 100%;
height: 200px;
}
.Container {
display: grid;
grid-template-columns: repeat(12, [col-start] 1fr);
grid-gap: 24px;
}
.LeftColumn {
grid-column: col-start 2 / span 4;
}
.LeftColumn img {
transform: translate3d(0, -50%, 0);
}
.RightColumn {
grid-column: col-start 6 / span 6;
}
JS:
const toggleButton = document.querySelector(".ToggleButton");
const leftColumn = document.querySelector(".LeftColumn");
let hasBug = false;
toggleButton.addEventListener("click", function() {
hasBug = !hasBug;
if (hasBug) {
leftColumn.style["overflow-x"] = "hidden";
leftColumn.style["overflow-y"] = "visible";
} else {
leftColumn.style["overflow-x"] = null;
leftColumn.style["overflow-y"] = "visible";
}
})
答案 0 :(得分:0)
这不是overflow
错误。这是正常行为。
您正在处理两个不同的容器:.Header
和.Container
。
您正在将overflow
属性应用于.Container
的后代。
overflow-x: hidden
有效,因为它被要求在.Container
内部工作(它自己的块格式化上下文)。overflow-y: visible
未按预期执行,因为它被要求在.Container
之外工作(另一个块格式化上下文)。换句话说,overflow
属性在块格式化上下文中工作,并且通过尝试使.Container
中的图像溢出到.Header
,您试图让这些属性工作跨越不同的块格式化上下文。
以下是overflow
属性的更多内容:
想到的一个合乎逻辑的选择是绝对定位。但是,在这种情况下,会导致同样的问题:
通过使用position: absolute
从正常流中移除图像并使.Container
成为边界框(使用position: relative
),图像将再次在顶部边框处剪切。它不能与标题重叠。
目前还不清楚你的布局总体目标是什么,所以我不会尝试提供详细的解决方案,这可能涉及改变HTML,这可能不是一种选择。
考虑将图像作为网格项,并使用网格属性进行大小调整和定位。
此外,规范中有关于组合transform
和overflow
属性的整个部分。它可能对您有用: