javascript - 如何使视口(viewport)垂直居中?

标签 javascript jquery html css

我解释一下我的问题:

我创建了一个叠加层,有一个缩略图画廊,点击一张图片,它会出现在一个框中,点击图片会变大(尺寸适合窗口的宽度)。此框完全水平对齐,即使您调整窗口大小时也保持对齐。

问题是我想要盒子垂直对齐。在视口(viewport)中对齐,因为我希望它立即可见。但我不想在滚动过程中,框不随页面一起移动。 (因此排除display: fixed)

现在盒子是这样的:

#box {
 padding: 0 5px 10px;
 background-color:#a0a0a0;
 margin: 5px 5px 15px 5px;
 display:none;
 z-index:+300;
 position:absolute;
 left:50%;
 top:20%;
 border-radius: 10px;
}

点击该图像之前的 div #box 具有 display:none。 因此,视口(viewport)中的对齐只会在框出现期间进行。当他移动页面(滚动)时对齐无关紧要。

这是 jsfiddle: http://jsfiddle.net/tvafw5Ls/13/

如果可以只用 CSS3 做这个更好,但是用 js 解决也可以。

希望你能帮帮我! 非常感谢!

最佳答案

好的,这是您的 JsFiddle 更新后的视口(viewport)居中 - 我将您的这部分代码调整为如下所示:

if (widthimage < i2.width) {
        $('#box').css('left', '50%');
        $('#box').css('top', '50%');
        $('#box').css('transform', 'translate(-50%,-50%)');
        $('#box').css('-webkit-transform', 'translate(-50%,-50%)');
        $("#immagine img:last-child").css('width', '100%');
    } else {
        $('#box').css('left', '50%');
        $('#box').css('top', '50%');
        $("#immagine img:last-child").css('width', '');
        $('#box').css('transform', 'translate(-50%,-50%)');
        $('#box').css('-webkit-transform', 'translate(-50%,-50%)');
    }


    $(window).resize(function () {
        $('#box').css('left', '0%');
        $("#immagine img:last-child").css('width', '100%');
        var widthimage = $("#immagine img:last-child").width();
        if (widthimage < i2.width) {
            $('#box').css('left', '50%');
            $('#box').css('top', '50%');
            $('#box').css('transform', 'translate(-50%,-50%)');
            $('#box').css('-webkit-transform', 'translate(-50%,-50%)');
            $("#immagine img:last-child").css('width', '100%');

        } else {
            $('#box').css('left', '50%');
            $('#box').css('top', '50%');
            $("#immagine img:last-child").css('width', '');
            $('#box').css('transform', 'translate(-50%,-50%)');
            $('#box').css('-webkit-transform', 'translate(-50%,-50%)');

        }

    });

这是在做什么,是一个漂亮的 css 技巧,看起来像这样:

position: absolute;
top: 50%;
left: 50%;
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);

这将使 CSS 中的任何内容垂直和水平居中。

这是 JsFiddle - https://jsfiddle.net/rockmandew/tvafw5Ls/17/

我将编辑我的答案以包括如何在滚动时使灯箱保持固定(如果我正确理解你的问题,你希望灯箱在用户滚动时保持在固定位置,但在窗口时使其居中/视口(viewport)已调整大小。)

** 我撒谎了,我当前的解决方案将使灯箱在滚动时保持在初始位置 - 如果您希望它跟随页面滚动,您可以将其添加到您的代码中:

$(window).scroll(function() {
  $( '#box' ).css('position', 'fixed');
});

** 更新 ** 我更新了我的代码,在底部包含 lorem ipsum 以提供滚动 - 测试此链接,如果“它不起作用”那么你的问题是错误的。 https://jsfiddle.net/rockmandew/tvafw5Ls/18/

关于javascript - 如何使视口(viewport)垂直居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786529/

相关文章:

javascript - Selenium "Unrecognized command: actions"

javascript - 使用 jQuery 淡入创建队列

jQuery 输入值 div id 和改变颜色

html - 尝试将宽度继承到 css 中的 img 标签

javascript - 在 CSS 中更改图像?

jquery - 有没有可能不使用 php 来创建投票系统的方法?

javascript - 如何使用 javascript 将脚本添加到 <head> 标签

Javascript promise "then"始终运行,即使 promise 未能执行

javascript - 在 redux 应用程序中初始化然后更新 textarea 值。

javascript - jQuery 自动完成列表项图标