虽然只能使用 CSS 实现一般效果,但您可能需要 javascript 来打开和关闭效果。
总体思路是在包含图像的图层上使用position: fixed
and ,而has . 在这些条件下,您可以滚动覆盖的内容,但不能滚动正文。overflow: scroll
body
overflow: hidden
虽然这适用于桌面,但在移动设备上情况会有所不同,尽管overflow: hidden
在body
. 一个快速的解决方法是也适用position: fixed
于body
。我不知道这是否是预期的行为,但它在 iOS 上的 Safari 和 Chrome 中都可以正常工作。
标记轮廓:
<body class="no-scroll">
<section class="content">
/* content here */
</section>
<aside class="overlay">
<img src="img.jpg">
</aside>
</body>
CSS:
.no-scroll {
overflow: hidden;
position: fixed;
}
.overlay {
overflow-y: scroll;
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
display: none;
}
.overlay img {
width: 100%;
height: auto;
}
.no-scroll .overlay {
display: block;
}
有了这个,您可以使用 javascriptno-scroll
在body
. 当它在那里时,溢出的内容被隐藏并且overlay
可见。当它不存在时,它overlay
是隐藏的。
这是一个效果示例(但没有 .no-scroll 类和 javascript,只是为了表明它有效):
- 全屏
- 标记/CSS可见
编辑:
在上面的例子中,我给了overlay
一个半透明的背景,并给它里面的图像一个max-width
100%。如果您希望整个屏幕都充满图像,请将 更改max-width
为常规width
.
编辑2:
根据要求,这里有一个 jQuery 函数来切换效果。
$(".close").click(function() {
$("body").toggleClass("no-scroll");
});
只需给出一个<button>
或任何类名close
,它就会打开和关闭效果。