1

请注意以下 jsFiddle - http://jsfiddle.net/mark69_fnd/DaYCa/14/在此处输入图像描述

内容恰好位于页眉和页脚之间。如果我们向标题添加更多项目(注意滚动条),布局的这个属性会保留: 在此处输入图像描述 现在滚动它: 在此处输入图像描述 我们可以向内容添加更多项目: 在此处输入图像描述 向下滚动: 在此处输入图像描述 一旦我们调整窗口大小,滚动条就会消失: 在此处输入图像描述 或者减少内容 DOM 树: 在此处输入图像描述 或者减少标题 DOM 树: 在此处输入图像描述

此行为在代码中强制执行。我想知道是否有 HTML/CSS 技巧以纯粹的声明方式实现相同的效果。

这是 javascript 代码(为了让大家开心):

YUI().use('node', 'event-valuechange', function(Y){
    var headerNode = Y.one('.header');
    var footerNode = Y.one('.footer');
    var contentNode = Y.one('.content');
    var containerNode = Y.one('.container');

    function set(n, node){
        var i, content = [];

        for (i = 1; i <= n; i += 1) {
            content.push('<div>'+i+'</div>');
        }
        node.set('innerHTML', content.join(''));
    }
    function restyleContent(){
       var hh, fh, ch, bw;
        hh = headerNode.getDOMNode().getBoundingClientRect().height;
        fh = footerNode.getDOMNode().getBoundingClientRect().height;
        ch = containerNode.getDOMNode().getBoundingClientRect().height;
        bw = Number(contentNode.getComputedStyle('borderWidth').slice(0, -2));
        contentNode.setStyle('height', (ch - hh - fh - bw * 2) + 'px');
    }

    Y.one('win').on('resize', restyleContent);
    Y.one('#newContent').on('valuechange', function (e) {
        set(Number(e.newVal), contentNode);
    });
    Y.one('#newHeader').on('valuechange', function (e) {
        set(Number(e.newVal), headerNode);
        restyleContent();
    });

    set(Number(Y.one('#newContent').get('value')), contentNode);
    set(Number(Y.one('#newHeader').get('value')), headerNode);
    restyleContent();
});

​<strong>编辑

我想稍微放松一下约束。让我们假设标题的高度是已知的并且无法更改。因此,页眉和页脚都具有预先已知的固定恒定高度。

4

1 回答 1

2

如果固定高度是可以接受的,你可以使用position:fixedpadding/margin来归档这个:

http://jsfiddle.net/DaYCa/16/

重要组成部分:

.container {position:relative;padding:20px 0px 24px} /*dimension base on Chrome*/
.header {position:fixed;top:0px}
.footer {position:fixed;bottom:0px}

但我怀疑这是否真的可以接受。鉴于在您的演示中,JS 无论如何都是不可避免的,我认为这可能会有所帮助:

http://jsfiddle.net/DaYCa/17/

非常类似于“纯”的 CSS 方案,只是添加了一个简单的 JS 来确定页眉和页脚的大小(所以要修改 的padding部分.container)。

请注意,我不知道 YUI,所以我做了无库演示。

于 2012-11-08T03:42:19.537 回答