次の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>編集
制約を少し緩和したいと思います。ヘッダーの高さが既知であり、変更できないと仮定します。そのため、ヘッダーとフッターの両方で、事前にわかっている一定の高さが固定されています。