clientHeight / clientWidth retornando valores diferentes em diferentes navegadores
-
08-07-2019 - |
Pergunta
Propriedades document.body.clientHeight
e retorno document.body.clientWidth
valores diferentes no IE7, IE8 e Firefox:
IE 8:
document.body.clientHeight : 704
document.body.clientWidth : 1148
IE 7:
document.body.clientHeight : 704
document.body.clientWidth : 1132
O Firefox:
document.body.clientHeight : 620
document.body.clientWidth : 1152
Por que Será que isso existe discrepância?
Existem quaisquer propriedades equivalentes que são consistentes em diferentes navegadores (IE8, IE7, Firefox) sem usar jQuery?
Solução
Isto tem a ver com o modelo de caixa do navegador. Use algo como jQuery ou outra biblioteca de abstração JavaScript para normalizar o modelo DOM.
Outras dicas
Paul Um está certo sobre por que existe a discrepância, mas a solução oferecida pelo Ngm está errado (no sentido de JQuery).
O equivalente de clientHeight e clientWidth em jquery (1.3) é
$(window).width(), $(window).height()
O corpo elemento leva a largura disponível, que normalmente é viewport seu browser. Como tal, será diferentes dimensões cross browser devido às fronteiras cromo navegador, barras de rolagem, espaço vertical ser ocupam pelos menus e outros enfeites ...
O fato de que as alturas também variam, também me diz que você definir o body / html altura a 100% através de css desde a altura é geralmente dependente de elementos dentro do corpo ..
A menos que você defina a largura do corpo elemento para um valor fixo através de CSS ou é propriedade de estilo, é dimensões, regra geral, sempre variar navegadores Cross / versões e talvez até mesmo dependendo plugins que você instalado para o navegador. valores constantes em tal caso é mais uma exceção à regra ...
Quando você invocar .clientWidth sobre outros elementos que não levam a largura automática da janela de exibição do navegador, ele sempre retornará os elementos 'largura' + 'padding'. Assim, um div com largura de 200 e uma cobertura de 20 terá clientWidth = 240 (20 preenchimento à esquerda e à direita).
A principal razão no entanto, por que alguém iria invocar clientWidth, é exatamente devido a possíveis discrepâncias esperadas nos resultados. Se você sabe que vai ter uma largura constante e o valor é conhecido, em seguida, invocando clientWidth é redundante ...
O equivalente a offsetHeight e offsetWidth em jQuery é $ (Janela) .width (), $ (janela) .height () Não é a clientHeight e clientWidth
Element.clientWidth
& Element.clientHeight
voltar a altura / largura do que o conteúdo do elemento para além de qualquer preenchimento aplicável.
A implementação jQuery delas são:
$(target).outerWidth()
& $(target).outerHeight()
.clientWidth
& .clientHeight
estão incluídas na especificação CSSOM Ver módulo que está atualmente em fase de projecto a trabalhar. Enquanto os navegadores modernos têm uma aplicação coerente desta especificação, para garantir um desempenho consistente em todas as plataformas legadas, a implementação jQuery ainda deve ser usada.
Informações adicionais:
- https: //developer.mozilla [dot] org / en-US / docs / Web / API / Element.clientWidth
- https: //developer.mozilla [dot] org / en-US / docs / Web / API / Element.clientHeight
O que eu fiz para corrigir o meu problema com clientHeight é usar o clientHight dos controles firstChild. Eu uso o IE 11 para imprimir etiquetas a partir de um banco de dados eo clientHeight que trabalhou no IE 8 voltava a altura de 0 no IE 11. Eu encontrei uma propriedade em que o controle que foi listado como firstChild e que tinha uma propriedade se clientHeight e realmente tinha a altura que eu estava procurando. Portanto, se seu controle é retornar um ClientSize de 0 Dê uma olhada na propriedade de seu firstChild. Ele me ajudou ...
i teve um problema semelhante - firefox devolveu o valor correto de obj.clientHeight mas isto fez não- retornou 0. eu mudei para obj.offsetHeight e funcionou. Parece que há algum estado que isto tem para clientHeight - que torna duvidoso ...
Pode ser causada por erro modelo de caixa do IE. Para corrigir isso, você pode usar o hack Modelo de Caixa .
Alguns mais informações para a janela do navegador: http://www.w3schools.com/js/js_window.asp?output=print