【问题标题】:Center full screen image vertically垂直居中全屏图像
【发布时间】:2016-07-30 21:56:15
【问题描述】:

我想将全屏图像垂直居中。 我无法在 CSS 中定义图像,因为图像取决于 URL 参数。

<div>
    <img src="photo.jpg">
</div>

div {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

如果我这样定义图像 CSS:

div img {
    width: 100%;
    height: 100%;
}

我的图像会被拉伸并在高度上变形以适应屏幕。

如果我这样定义我的图像 CSS(只是没有定义高度):

div img {
    width: 100%;
}

我的图像不会拉伸/变形,但会从图像的top: 0 开始。我想要的是图像垂直居中并隐藏其高度的溢出。

基本上,我想要在背景居中的 CSS 中获得相同的行为:

background: url(photo.jpg) no-repeat center;
background-size: cover;

编辑:我忘了提到 CSS object-fit: cover 可以解决这个问题,但我正在寻找一个更跨浏览器的解决方案,因为这个属性并不适用于所有浏览器。

【问题讨论】:

    标签: html css image vertical-alignment centering


    【解决方案1】:

    试试这个css

    div {
        position: fixed;
        top: 50%;
        left: 0;
        width: 100%;
        height: 100%;
        -webkit-transform: translateY(-50%);
        transform: translateY(-50%);
    }
    

    编辑

    同时给出图像的高度和宽度也是一种不好的做法。这将始终覆盖图像的纵横比并将其拉伸到某个方向。

    将其用于图像

    div img {
        width: 100%;    
    }
    

    这将首先将除法50% 置于顶部。即图像的最顶部现在将位于页面高度的50%,然后翻译属性会将图像向上移动其高度的50%,基本上使图像居中

    【讨论】:

    • 感谢 Rohit,但它在 chrome v49 中对我不起作用。
    • 可以分享一下截图吗?也许将它托管在 imgur 上并在此处粘贴链接
    • 我不明白这将如何工作。您正在使用translate 移动 div,这将同时移动 div 的内容。
    • 我认为这不是 OP 所要求的。
    【解决方案2】:

    这个怎么样:

    div {
        position:fixed;
        top:0;
        left:0;
        width: 100px;
        height: 100px;
        border:1px solid red;
        text-align:center;
        line-height:100px;
        overflow:hidden;
    }
    
    img { 
        vertical-align:middle;
        border:1px solid black; 
    }
    <div>
        <img src="https://www.smallbusinesssaturdayuk.com/Images/Small-Business-Saturday-UK-Google-Plus.gif">
    </div>

    【讨论】:

    • 感谢 Scott,但它不起作用。您的图像小于 div,但如果您在示例中将图像设置为 height: 200px;width: 200px,您将看到。
    【解决方案3】:

    如果你允许js,你可以这样做(假设图像有id'img'):

    #img {
      width: 100%;
      position: absolute;
      top: 50%;
    }
    

    需要使用 js 或 jQuery 设置负边距顶部(调整大小时):

    $('#img').css('margin-top', '-'+($('#img').height()/2)+'px');
    

    【讨论】:

    • 您需要将顶部设置为 50% 减去图像高度的一半。
    • 这正是这里发生的事情...... :-)
    • 感谢@JoostS。使用 JQuery,我什至可以使用 background-position: centerbackground-size: cover 在 CSS 中设置背景图像并提供更简单的解决方案。但是如果我没有 JS 到那里会更好。