【问题标题】:CSS: Properly limit size of two images in a tableCSS:正确限制表格中两个图像的大小
【发布时间】:2012-09-27 22:33:13
【问题描述】:

我有一个简单的 HTML/CSS 任务。我有一个页面,其中连续显示两个相同大小的图像。见this page。我需要调整图像的显示尺寸以满足所有这些条件:

  1. 图像必须在浏览器窗口中一起完全可见,即包含 div/table 的大小受限于客户区的大小
  2. 图像不放大,保留纵横比
  3. 图像水平居中,它们之间的间距恒定
  4. 至少在 IE9、Chrome 和 Safari 中有效

我在 CSS 方面不是很有经验,所以我最多可以击败 4 的 2 个标准。

我当前使用的示例页面满足 3、4 和部分 1(仅宽度受到限制)。我让示例尽可能靠近我的问题,留下所有相关的主 CSS 文件并自动生成 ASP.NET 容器。

图像应保留在input 标记中,而不是img 中,这是可取的,但不是至关重要的。您能否建议一个满足所有条件的样式属性的适当组合?

更新:

使用宽松标准 1 的解决方案(允许图像的高度超过客户区域的高度)也将受到赞赏。

【问题讨论】:

  • 是否需要继续使用表格来包含图像?
  • @GionaF 不,我只是觉得它会派上用场。
  • 我已经为这个问题创建了聊天室:chat.stackoverflow.com/rooms/17237/…
  • 对不起,我试过了,但我不能保持比例或适合高度 ;-)
  • @GionaF 更重要的是,我敢打赌你没有在多个浏览器中查看它:)

标签: html css cross-browser image-resizing


【解决方案1】:

知道了,但我使用图像作为背景而不是 <img>。希望这不是问题。

使用background-size:contain; 会缩放背景图像,同时保留图像的原始比例/纵横比。 FF4+、IE9+、Chrome1+(带厂商前缀)、Opera10+和Safari 3+(source)都支持。


您的第一个要求的主要问题是:“containig div/table 的大小仅限于客户区的大小”,除非父容器也设置了高度,否则您无法设置 height:100%;

在您的页面中,我看到您有一个具有动态高度的页眉和页脚,因此您需要一些 jQuery 来调整容器的高度。但让我们先看看如何仅使用 CSS 来实现,然后我们将添加页眉和页脚。


Demo(尝试调整窗口大小)

HTML:

<html>
<body>
<div id="body">
    <div>
        <div class="left"></div>
    </div>
    <div>
        <div class="right"></div>
    </div>
</div>
</body>
</html>​

CSS:

html, body, #body {
    width:100%;
    height:100%;
}
#body, #body > div {
    overflow:hidden;
}
#body > div {
    box-sizing:border-box;
    width:50%;
    height:100%;
    float:left;
    padding:10px; /* or whatever you need */
}
#body > div > div {
    margin:0 auto;
    height:100%;
    width:100%;
    background-repeat:no-repeat;
    background-position:top center;
    -webkit-background-size:contain; /* Chrome1+, Safari 3+ */
    background-size:contain; /* FF4+, IE9+, Chrome3+, Opera10+, Safari 3+ */
}
#body > div > div.left {
    background-image:url(/* your left image url */);
    max-width:417px; /* the real image width */
    max-height:512px;; /* the real image height */
}
#body > div > div.right {
    background-image:url(/* your right image url */);
    max-width:417px; /* the real image width */
    max-height:512px;; /* the real image height */
}​

让我们添加页眉和页脚。我们必须从#body 中删除height:100%;,并根据以下公式计算其高度:窗口高度 - 页眉高度 - 页脚高度。

Demo(调整窗口大小)

HTML:

<html>
<body>
<header>I'm a header</header>
<div id="body">
    <div>
        <div class="left"></div>
    </div>
    <div>
        <div class="right"></div>
    </div>
</div>
<footer>I'm a footer</footer>
</body>
</html>​

CSS:

html, body {
    width:100%;
    height:100%;
}
header, footer {
    background:grey;
}
#body {
    height:400px; /* fallback no javascript */
}
#body, #body > div {
    overflow:hidden;
}
#body > div {
    box-sizing:border-box;
    width:50%;
    height:100%;
    float:left;
    padding:10px; /* or whatever you need */
}
#body > div > div {
    margin:0 auto;
    height:100%;
    width:100%;
    background-repeat:no-repeat;
    background-position:top center;
    -webkit-background-size:contain; /* Chrome1+, Safari 3+ */
    background-size:contain; /* FF4+, IE9+, Chrome3+, Opera10+, Safari 3+ */
}
#body > div > div.left {
    background-image:url(/* your left image url */);
    max-width:417px; /* the real image width */
    max-height:512px;; /* the real image height */
}
#body > div > div.right {
    background-image:url(/* your right image url */);
    max-width:417px; /* the real image width */
    max-height:512px;; /* the real image height */
}​

jQuery:

function calcHeight(){
    var docHeight = $(document).height();
    var headHeight = $('header').outerHeight();
    var footHeight = $('footer').outerHeight();
    var bodyHeight =  docHeight - ( headHeight + footHeight);
    $('#body').height(bodyHeight);
}
calcHeight(); /* called first time on page load */
$(window).on('resize',calcHeight());​/* do the math again when window's resized */

我认为这很简单。我这样写是为了让大家可以理解,当然你也可以压缩更多。

我使用outerHeight 作为页脚和页眉以包含可能的边距。

如果您不想包含 jQuery 库,那么肯定有一种纯 JavaScript 方式来获得它。

【讨论】:

  • 在您的第一个示例中,违反了标准 3 - 图像之间的空间不是恒定的。在第二个示例中,图像高度被忽略,并且页脚不会在图像下方呈现。如果可能的话,我更喜欢不那么严格的解决方案(请参阅问题中的更新),但没有 JavaScript 和 BG 图像。
  • @Mikhail 它是不变的。好吧,祝你好运,我已经知道如何满足你的新要求,但我讨厌在我想出一个解决方案之后“规则”发生变化。
  • 它不是恒定的,当你设置小窗口高度时。至少在 Chrome 中。检查此屏幕截图:postimage.org/image/8sxeqfwol
  • @Mikhail 你所说的常数是什么意思? 水平居中的图像如何保持不变?
  • 两张图片之间有固定的间距,代表一个块,水平居中。
【解决方案2】:

为了保持纵横比只在css中定义宽度,它会自动调整高度以保持纵横比。

【讨论】:

  • 谢谢,但这不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2014-05-15
  • 1970-01-01
  • 2018-12-05
  • 2018-02-07
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多