Hum... este tópico eu deveria pendurar...
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,