因此,此处<main>
元素的背景大小为contain
,这导致它的容器#main
包含较小屏幕尺寸的底部空间。
所以,我想根据#main
的背景图像高度响应<main>
的高度,以消除较小屏幕尺寸的垂直间隙。
请注意,背景图片不应拉伸或隐藏。
HTML
<div id="main">
<main>
</main>
</div>
CSS
#main{
width: 100%;
height: 70%;
}
main{
max-width: 100%;
height: 100%;
background: url(images/img-main.png) no-repeat top center;
background-size: contain;
}
的JavaScript
var toHeight = $('main')//?????? I'm stacked here
$('#main').css('height',toHeight);
有什么想法吗?
以下是 jsfiddle demo (调整窗口大小以便了解)
+--------------------------+--------
| |
| background-image |
| height | main
| |
| | height
+--------------------------+
| vertical |
| gap |
+--------------------------+---------
应转换为:
+--------------------------+--------
| | main
| background-image |
| height | height
| |
| |
+--------------------------+----------
答案 0 :(得分:3)
在测试期间,我发现了旧方法(动态创建图像元素以获得其尺寸){3}} Chrome,Safari和Firefox,但不是IE。因此,它不是跨浏览器方法。
此外,根据OP的评论,我发现OP希望<main>
元素为浏览器高度的70%
。但一旦 <main>
元素的 width 通过水平调整窗口大小来到达背景图片的 edge ,高度 <main>
元素应缩小以消除背景图像之间的垂直间隙。
(因为使用背景图像的contain
值来保持图像在框内并保持纵横比而发生垂直间隙。
考虑到这一点,以及我们未能通过大量网络浏览器动态获取背景图像的尺寸,您最终会得到以下结果:
var main = $('#main'),
imgwidth = 500, // Set the width/height of the background image manually
imgHeight = 300,
imgRatio = imgHeight/imgwidth,
mainHeight = main.height();
$(window).resize(function() {
var mainWidth = main.width(),
mainRatio = mainHeight/mainWidth;
// Compare ratio of the <main> element and the background image
if (mainRatio >= imgRatio) {
main.height(imgRatio * mainWidth);
} else {
main.height('70%');
}
}).resize(); // Trigger the handler once the script is loaded
<强> only works on latest versions 强>
没有纯CSS方法可以根据背景图像调整元素的尺寸。
您需要使用JavaScript来实现这一目标。通过使用JavaScript,我们得到计算出的background-image
并动态创建一个图像元素(使用背景图像)来获取背景图像的尺寸
你走了:
<div class="wrap">
<main id="main"></main>
<div>another div</div>
</div>
我合并了两个#main
和<main>
元素来压缩此特定实例中的标记。
jQuery版本:
var
main = $('#main'),
imgSrc = main.css('background-image').slice(4, -1);
$('<img />')
.attr('src', imgSrc)
.on('load', function() {
main.height(this.height);
});
<强> WORKING DEMO 强>
答案 1 :(得分:1)
您只需使用<img>
代码而不是background-image
属性即可完成此操作:
<div class="wrap">
<div id="main">
<img src="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRqHMio3jll2W62WXJHbufc-xxYPxec_ip8Ez0lQv2P7Umy2kPKrw">
</div>
<div>another div</div>
</div>
#main{
width: 100%;
height: auto;
border: 1px solid red;
text-align: center;
}
img{
max-width: 100%;
vertical-align: middle; //prevents a default bottom margin from appearing
}
小提琴:http://jsfiddle.net/wAJyv/6/(尝试调整大小)
编辑:或者,如果您希望图片向上扩展,但主div更宽,您只需使用width: 100%
代替max-width: 100%
:{{ 3}}
答案 2 :(得分:0)
在background-size: 100% 100%;
的css中提供.main
而不是包含。
.main {
background-size: 100% 100%;
}