Sinceramente, o único meio de controlar os tamanhos é usando porcentagem ou então, controlando via JS.
Normalmente, porcentagem é precário e mal implementada por parte dos browsers. Se você testar um width="100%" no IE, será diferente do width="100%" do Mozilla, e assim por diante.
Em vista disso, o meio mais correto de se ajustar um site é via JS.
Aumentando esse desgosto que temos pelos browsers, você pode acrescentar que até hoje, nada foi feito para tentar controlar a altura de objetos. Assim qualquer tentativa de height="90%" que possua conteúdo dinâmico, não funcionará...
Visando isso, novamente nos restou a opção... JS!
Podemos capturar a largura do documento usando window.innerWidth ou document.body.clientWidth no caso do IE e window.innerWidth ou document.documentElement.clientWidth no caso do Mozilla, Opera, Netscape.
Mas, o window.innerWidth naum possui uma precisão muito aceitável, então, acabamos ficando na deixa...
Primeiramente, vamos descobrir se o browser que se trata é o IE:
var ie = /msie/i.test(navigator.userAgent);
Esta linha testa e retorna verdadeiro se o browser for o MSIE e falso caso contrário. Feito isso, precisamos saber se o IE tem o suporte necessário à captura dos dados:
var ieBox = ie && (document.compatMode == null || document.compatMode == "BackCompat");
Pronto... agora temos o que queríamos!
Falta agora, fazer a captura dos dados...
var canvasEl = ieBox ? document.body : document.documentElement;
var w = window.innerWidth || canvasEl.clientWidth;
var h = window.innerHeight || canvasEl.clientHeight;
Pronto!!!
Agora você já tem o que queria... os valores.
Pra dimensionar, use:
document.getElementById("id_do_elemento").style.width = Math.max(0, w) + "px";
Utilizo Math.max para posterior compreensão.
Depois de tudo construído, teste... ele deve funcionar perfeitamente.
Tente então... redimensionar a janela. Já era... o script naum adiantou em nada.
Vamos então, melhorar nosso sistema.
Deixe a checagem do IE de lado...
Pegue a checagem e as linhas de edição de tamanho e agrupe numa função sem parâmetros...
Finalmente, adicione a chamada no evento window.onresize, assim:
window.onresize = checkSize;
Vejamos o exemplo que eu tenho rodando no meu site, o exemplo completo.
É só pra exemplificar, não vou comentá-lo.
var ie = /msie/i.test(navigator.userAgent); var ieBox = ie && (document.compatMode == null || document.compatMode == "BackCompat"); function checkSize() { var canvasEl = ieBox ? document.body : document.documentElement; var w = window.innerWidth || canvasEl.clientWidth; var h = window.innerHeight || canvasEl.clientHeight; document.getElementById("menu").style.height = Math.max(0, h) + "px"; document.getElementById("treeMenu").style.height = Math.max(0, h - 95) + "px"; document.getElementById("spacer").style.height = Math.max(0, h - 411) + "px"; if(document.getElementById("menu").className == "menu-hidden") { size = w - 27; if(ie) box_size = w - 77; } else { size = w - 240; if(ie) box_size = w - 290; } document.getElementById("content").style.width = Math.max(0, size) + "px"; document.getElementById("content").style.height = Math.max(0, h) + "px"; if(ie) { document.getElementById("code_space").style.width = Math.max(350, box_size) + "px"; document.getElementById("box2").style.width = Math.max(350, box_size + 10) + "px"; document.getElementById("box3").style.width = Math.max(350, box_size + 10) + "px"; } } window.onresize = checkSize;
Espero que isto ajude não só a você, mas a muitos outros programadores brasileiros.
Até hoje, só vi 4 sites brasileiros que funcionassem sem problemas em todas as resoluções. Um deles é o meu. Internacionalmente, já vi vários. A maioria usa a mesma base.
Não podia simplesmente mandar um "Valew". Seu post merecia destaque aki, e é o que eu vou fazer. O tópico ficará pendurado por motivos óbvios. Depois os moderadores podem enviá-lo pra tutoriais ou algo do tipo.
Grato,