如何调整图像大小以适应浏览器窗口?

seb*_*kem 92 html css

这似乎微不足道,但毕竟研究和编码我无法让它工作.条件是:

  1. 浏览器窗口大小未知.所以请不要提出涉及绝对像素大小的解决方案.
  2. 图像的原始尺寸未知,可能已经或可能不适合浏览器窗口.
  3. 图像垂直和水平居中.
  4. 必须保留图像比例.
  5. 图像必须完整显示在窗口中(无裁剪).
  6. 我不希望出现滚动条(如果图像适合,它们不应该.)
  7. 当窗口尺寸改变时,图像会自动调整大小,以占用所有可用空间而不会大于其原始大小.

基本上我想要的是这个:

.fit {
  max-width: 99%;
  max-height: 99%;
}
<img class="fit" src="pic.png">
Run Code Online (Sandbox Code Playgroud)

上面代码的问题在于它不起作用:pic通过添加垂直滚动条来获取所需的所有垂直空间.

我自己可以使用PHP,Javascript,JQuery,但是我只能使用纯CSS解决方案.我不在乎它是否在IE中不起作用.

seb*_*kem 93

更新2018-04-11

这是一个没有Javascript的CSS解决方案.图像将动态居中并调整大小以适合窗口.

<html>
<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .imgbox {
            display: grid;
            height: 100%;
        }
        .center-fit {
            max-width: 100%;
            max-height: 100vh;
            margin: auto;
        }
    </style>
</head>
<body>
<div class="imgbox">
    <img class="center-fit" src='pic.png'>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

使用JQuery的[other,old]解决方案设置图像容器的高度(body在下面的示例中),以便max-height图像上的属性按预期工作.调整客户端窗口大小时,图像也会自动调整大小.

<!DOCTYPE html>
<html>
<head>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .fit { /* set relative picture size */
            max-width: 100%;
            max-height: 100%;
        }
        .center {
            display: block;
            margin: auto;
        }
    </style>
</head>
<body>

<img class="center fit" src="pic.jpg" >

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" language="JavaScript">
    function set_body_height() { // set body height = window height
        $('body').height($(window).height());
    }
    $(document).ready(function() {
        $(window).bind('resize', set_body_height);
        set_body_height();
    });
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

注意:用户gutierrezalex在此页面上打包了一个与JQuery插件非常相似的解决方案.

  • 不需要JS,[只有CSS解决方案](http://stackoverflow.com/a/35345577/897326). (6认同)

Neo*_*isk 44

这是一个简单的CSS唯一解决方案(JSFiddle),适用于所有地方,移动和IE包括:

CSS 2.0:

html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}

img {
    padding: 0;
    display: block;
    margin: 0 auto;
    max-height: 100%;
    max-width: 100%;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<body>
  <img src="images/your-image.png" />
</body>
Run Code Online (Sandbox Code Playgroud)

  • 好的。但它不是垂直居中的。 (2认同)
  • 我已经尝试了很多解决方案,甚至是css-tricks的解决方案.你的完美工作就像一个魅力! (2认同)
  • 有史以来最好的解决方案! (2认同)

Max*_*Max 22

CSS3引入了相对于视口测量的新单位,在这种情况下是视窗.这些是vhvw,分别测量视口高度和宽度.这是一个简单的CSS解决方案:

img {
    max-width: 100%;
    max-height: 100vh;
    height: auto;
}
Run Code Online (Sandbox Code Playgroud)

对此的一个警告是,只有在页面上没有其他元素贡献高度时它才有效.


Mar*_*ase 15

如果您愿意在图像周围放置容器元素,那么纯CSS解决方案很简单.你看,当父元素垂直延伸以包含它的子元素时,99%的高度没有意义.父级需要具有固定高度,例如......视口的高度.

HTML

<!-- use a tall image to illustrate the problem -->
<div class='fill-screen'>
    <img class='make-it-fit' 
         src='https://upload.wikimedia.org/wikipedia/commons/f/f2/Leaning_Tower_of_Pisa.jpg'>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

div.fill-screen {
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    text-align: center;
}

img.make-it-fit {
    max-width: 99%;
    max-height: 99%;
}
Run Code Online (Sandbox Code Playgroud)

小提琴一起玩.


eya*_*ler 11

对于后代,如果您想要一个能够回答 1-6 并以允许调整大小超出原始大小的方式执行 7 的解决方案,我已经为这个问题开发了一个完整的解决方案:

<!DOCTYPE html>
<html>
  <body style="overflow:hidden; margin:0; text-align:center;">
    <img src="https://file-examples-com.github.io/uploads/2017/10/file_example_JPG_2500kB.jpg" style="height:100vh; max-width:100%; object-fit: contain;">
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)


Has*_*qui 7

让它变得简单。谢谢

.bg {
  background-image: url('https://images.unsplash.com/photo-1476820865390-c52aeebb9891?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80');
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
  height: 100vh;
  width: 100vw;
}
Run Code Online (Sandbox Code Playgroud)
<div class="bg"></div>
Run Code Online (Sandbox Code Playgroud)


Tom*_*omC 7

我知道这里已经有一些答案,但这是我使用的:

max-width: 100%;
max-height: 100vh;
width: auto;
margin: auto;
Run Code Online (Sandbox Code Playgroud)


am0*_*0wa 6

调整图像大小以适应屏幕的最长边保持其纵横比

img[src$="#fit"] {
    width: 100vw;
    height: auto;
    max-width: none;
    max-height: 100vh;
    object-fit: contain;
}
Run Code Online (Sandbox Code Playgroud)
  • width: 100vw - 图像宽度将为视口的 100%

  • height: auto - 图像高度将按比例缩放

  • max-height: 100vw - 如果图像高度超过视口,它将被减小以适应屏幕,因此图像宽度将由于以下属性而减小

  • object-fit: contain - 替换的内容被缩放以保持其纵横比,同时适合元素的内容框

    注意:object-fit仅自 IE 16.0 起完全支持