2

我正在努力使网站具有响应性。我对所有的 div 都使用了自动高度。但是,对于特定的 div,我必须为浏览器的所有大小使用固定高度。但是,我不想在每个尺寸的设备/浏览器的媒体查询中手动放置高度,而是想自动/动态地进行。可能是 javascript/jQuery 可以做到。但是,我对 javascript/jQuery 了解不多。所以,我需要你的帮助。我的容器 div 的最大宽度:1280px;我有一个名为“#artwork”的子 div,其初始尺寸为:1065*695px。以 base 作为容器 div 的最大宽度和 #artwork div 的初始高度,我想为每次调整浏览器大小时为 #artwork 提供自动高度。

我不能给出“#artwork”高度:auto,因为在那个“#artwork”div 中有很多大图像。但是,通过javascript,只有一张图片正常显示,通过向下滚动,人们可以一张一张地看到下一张图片。如果我将 height: auto 或使用 minimum-height 设置为“#artwork”,则会显示所有图像。我已经通过媒体查询将“艺术品” div 高度手动放在不同类型的 css 文件中。但是,我想自动执行此操作,因此该比率非常适合每台设备上每种尺寸的浏览器。

以下是页面示例:
[已删除死链接]

#container {
   max-width: 1280px;
   margin: 0 auto;
   padding: 0;
   overflow: hidden;
   font-family: GandhiSansBold;
   position: relative;
}

#artwork {
   /*width: 1065px;*/
   width: 83.203%;
   height: 695px;
   margin: 0;
   float: left;
   overflow: hidden;
   margin-bottom: 10px;
}

请确保,如果浏览器尺寸如此之大,#artwork 高度在任何情况下都不能通过自动调整大小跨越 height:695px。

4

3 回答 3

0

最好的方法是使用 CSS 和百分比值,但现在我们将使用 jQuery。

这是一个使用 jQuery 并处理resize 事件的示例:

(function() {
    var _viewport = $(window),
        _event = 'onorientationchange' in window ? 'orientationchange' : 'resize';

    //add a namespace to event
    _event += ".boxsize";

    //creates the event handler by namespace
    _viewport
        .off(_event)
        .on(_event, fnResizer);

    function fnResizer (e) {
        var gap = 40,
            winWidth = _viewport.width(),
            winHeight = _viewport.height(),
            //add your calculations
            boxWidth = winWidth - gap,
            boxHeight = winHeight - gap;
        //sets the new size of the boxes
        $('#artwork, #container').css({
            "width": boxWidth,
            "height": boxHeight
        });
    }
}());

HTML:

<div id="container">
    <div id="artwork"></div>
</div>
于 2013-04-16T20:22:05.357 回答
0

http://f6design.com/journal/2011/10/18/responsive-elements-that-retain-their-aspect-ratio/

问题归结为在流体设计中保持纵横比。这条道路已经走过了很好的道路,并且存在许多漂亮的解决方案。我在上面列出一个。让我知道它是否也解决了嵌套 div 元素的问题。

于 2013-04-16T20:03:44.410 回答
0

您需要在调整大小时计算浏览器的新高度,然后将新高度设置为图像:

var TO = false;
var resizeEvent = 'onorientationchange' in window ? 'orientationchange' : 'resize';
$(window).bind(resizeEvent, function() {
  TO && clearTimeout(TO);
  TO = setTimeout(resizeImage, 200);
});
function resizeImage(){
  // browser resized, we count new width/height of browser after resizing
  var height = window.innerHeight || $(window).height();
  // var width = window.innerWidth || $(window).width();
  // you need to change here #artwork height
  var imgHeightInPercent = 30; // browser height is 100%
  var desiredHeight = (height * imgHeightInPercent) / 100;
  // finally we changed #artwork height
  $('#artwork').height(desiredHeight); 
}
于 2013-04-16T20:12:59.197 回答