Procurei e não consegui encontrar isso. Estou tentando obter a largura de um div, mas se tiver um ponto decimal, ele arredonda o número.
Exemplo:
#container{
background: blue;
width: 543.5px;
height: 20px;
margin: 0;
padding: 0;
}
Se eu fizer $('#container').width();
isso, retornarei 543 em vez de 543,5. Como faço para não arredondar o número e retornar o 543,5 completo (ou qualquer número).
javascript
jquery
css
MoDFoX
fonte
fonte
Respostas:
Use o nativo
Element.getBoundingClientRect
em vez do estilo do elemento. Foi introduzido no IE4 e é compatível com todos os navegadores:Nota: Para IE8 e versões anteriores, consulte as notas de "Compatibilidade do navegador" nos documentos MDN.
Exibir trecho de código
fonte
width
eheight
não são suportadas em todas as versões do IE, então, em alguns casos, elas precisam ser calculadas antes de serem usadas: stackoverflow.com/questions/11907514/…getBoundingClientRect()
calcula as dimensões após aplicar as transformações CSS .display: none
).Só queria adicionar minha experiência aqui, embora a pergunta seja antiga: o consenso acima parece ser que o arredondamento do jQuery é efetivamente tão bom quanto um cálculo não arredondado - mas não parece ser o caso em algo que tenho feito .
Meu elemento tem uma largura fluida, geralmente, mas o conteúdo muda dinamicamente via AJAX. Antes de mudar o conteúdo, eu bloqueio temporariamente as dimensões do elemento para que meu layout não salte durante a transição. Descobri que usar jQuery assim:
está causando alguma graça, como a existência de diferenças subpixel entre a largura real e a largura calculada. (Especificamente, verei uma palavra saltar de uma linha de texto para outra, indicando que a largura foi alterada, não apenas bloqueada.) De outra pergunta - Obtendo a largura real de ponto flutuante de um elemento - descobri que
window.getComputedStyle(element).width
retornará um cálculo não arredondado. Então mudei o código acima para algo comoE com ESSE código - sem pulos engraçados! Essa experiência parece sugerir que o valor não arredondado realmente importa para o navegador, certo? (No meu caso, Chrome versão 26.0.1410.65.)
fonte
A resposta de Ross Allen é um bom ponto de partida, mas usando getBoundingClientRect (). Width também incluirá o preenchimento e a largura da borda, o que não é o caso da função de largura do jquery :
Se sua intenção é obter o
width
valor com precisão, você terá que remover o preenchimento e a borda como este:fonte
.replace("px", "")
comoparseInt
deve remover isso para você.parseFloat()
talvez?innerWidth()
ser parte do problema original, temo que o cálculo da largura da borda aqui também esteja trabalhando em valores arredondados.Você pode usar
getComputedStyle
para isso:fonte
Use o seguinte para obter uma largura precisa:
fonte
style.width