这看起来微不足道,但经过所有的研究和编码,我无法让它工作.条件包括:

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

基本上我想要的是:

.fit {
  max-width: 99%;
  max-height: 99%;
}
<img class="fit" src="pic.png">

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

我可以使用PHP、Javascript和JQuery,但我愿意为一个只使用CSS的解决方案而拼命.我不在乎它在IE中是否起作用.

推荐答案

Update 2018-04-11

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

<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>

[Other,old]解决方案使用JQuery设置图像容器的高度(在下面的示例中为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>

注意:用户gutierrezalex在本页上打包了一个非常类似于JQuery插件的解决方案.

Html相关问答推荐

将小文本放在输入字段的右侧

html列表顺序类型类似于子列表

在Apps Script中连接CSS与HTML

我如何 Select 外部html文件元素作为选项,并显示在一个div与jQuery?

Angular 滑块问题

通过POST方法提交html表单时CSV文件无法通过(在使用Django的上下文中)

将输入字段下方的两个按钮设置为两侧对齐

选中/取消选中带有_hyperscript的多个复选框

SCSS动画错误:心脏在页面刷新时启动动画,原因是:Checked和:Not(:Checked) Select 器

防止position:relative的child在出界时收缩

如何更改Django中的默认按钮?

在TWebLabel标题中设置换行符/换行符的方法?

为什么字体大小而不是 colored颜色 属性适用于元素?

视频重新加载而不是在 Swift 中暂停 WKWebView

当作为常规图片输入时,Cloudfront分布式图像可显示,但作为背景图像不显示

使用HTML和CSS构建简历网站.无法使body元素内的div元素跨越整个网站高度

Sass 混合动画未正确应用

HTML 如何根据屏幕尺寸调整/裁剪视频背景?

输入框不是全宽

如何向弹出窗口添加 sanitize: false 选项?