Jak uzyskać renderowaną wysokość elementu?
Załóżmy, że masz <div>
element z zawartością. Ta zawartość w środku zwiększy wysokość <div>
. Jak uzyskać wysokość „renderowaną”, jeśli nie została wyraźnie ustawiona wysokość. Oczywiście próbowałem:
var h = document.getElementById('someDiv').style.height;
Czy jest na to jakiś sposób? Używam jQuery, jeśli to pomaga.
javascript
jquery
css
height
BuddyJoe
źródło
źródło
Odpowiedzi:
Tak powinno być
z jQuery. Pobiera wysokość pierwszego elementu w zawiniętym zestawie jako liczbę.
Próbuję użyć
działa tylko wtedy, gdy ustawiłeś właściwość w pierwszej kolejności. Niezbyt przydatne!
źródło
Wypróbuj jedną z:
clientHeight
obejmuje wysokość i pionowe wypełnienie.offsetHeight
obejmuje wysokość, pionowe wypełnienie i pionowe obramowania.scrollHeight
obejmuje wysokość zawartego dokumentu (byłaby większa niż tylko wysokość w przypadku przewijania), pionowe wypełnienie i pionowe obramowania.źródło
.clientWidth/.clientHeight
NIE dołączaj szerokości przewijania, jeśli przewijanie jest pokazane. Jeśli chcesz uwzględnić szerokość przewijania, możesz użyćelement.getBoundingClientRect().width
zamiast tegoNIE JQUERY, ponieważ
elem.style.height
w górnej części tych odpowiedzi było kilka linków ...WYSOKOŚĆ WEWNĘTRZNA:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
WYSOKOŚĆ ZEWNĘTRZNA:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Lub jedno z moich ulubionych odniesień: http://youmightnotneedjquery.com/
źródło
Możesz użyć
.outerHeight()
do tego celu.Zapewni to pełną renderowaną wysokość elementu. Nie musisz też ustawiać żadnego
css-height
elementu. Dla zachowania ostrożności można zachować automatyczną wysokość, aby można ją było renderować według wysokości zawartości.Aby uzyskać przejrzysty widok tej funkcji, możesz przejść na stronę jQuery lub szczegółowy post tutaj .
usunie różnicę między
.height()
/innerHeight()
/outerHeight()
źródło
Używam tego, aby uzyskać wysokość elementu (zwraca liczbę zmiennoprzecinkową) :
Działa również, gdy korzystasz z wirtualnego DOM . Używam go w Vue w następujący sposób:
źródło
to po prostu:
style.height
źródło
Zdecydowanie użyj
lub
Podaję to jako dodatkową odpowiedź, ponieważ jest kilka ważnych rzeczy, których właśnie się nauczyłem.
Prawie wpadłem w pułapkę użycia offsetHeight. To jest to, co się stało :
Oto tylko jego część:
Tak, patrzy na ZARÓWNO i przesunięcie. Jeśli to się nie powiedzie, wygląda jeszcze dalej, biorąc pod uwagę problemy ze zgodnością przeglądarki i css. Innymi słowy STUFF NIE PIELĘGNUJE - lub chcę.
Ale nie muszę. Dzięki jQuery!
Morał tej historii: jeśli jQuery ma metodę na coś, to prawdopodobnie z dobrego powodu, prawdopodobnie związanego z kompatybilnością.
Jeśli nie przeczytałeś ostatnio listy metod jQuery , sugeruję, abyś rzucił okiem.
źródło
źródło
elem.getBoundingClientRect().height
Stworzyłem prosty kod, który nawet nie potrzebuje JQuery i prawdopodobnie pomoże niektórym ludziom. Pobiera całkowitą wysokość „ID1” po załadowaniu i używa go na „ID2”
Następnie po prostu ustaw ciało, aby je załadować
źródło
Hm, możemy uzyskać geometrię elementu ...
Co powiesz na ten zwykły JS?
źródło
var geometry; geometry={};
może po prostu byćvar geometry={};
Myślę, że najlepszym sposobem na zrobienie tego w 2020 roku jest użycie zwykłego js i
getBoundingClientRect().height;
Oto przykład
Oprócz
height
tego, mamy również dostęp do wielu innych rzeczy na tematdiv
.źródło
Czy to jest odpowiedź?
„Jeśli musisz coś obliczyć, ale nie chcesz tego pokazać, ustaw element na
visibility:hidden
iposition:absolute
dodaj go do drzewa DOM, uzyskaj offsetHeight i usuń go. (To właśnie robi biblioteka prototypowa za liniami podczas ostatniego sprawdzania)”.Mam ten sam problem z wieloma elementami. Na stronie nie ma jQuery ani prototypu, ale jestem zwolennikiem pożyczenia tej techniki, jeśli działa. Jako przykład niektórych rzeczy, które nie działały, a następnie tego, co zrobiłem, mam następujący kod:
który w zasadzie próbuje wszystkiego i tylko po to, aby uzyskać zerowy wynik. ClientHeight bez wpływu. Z elementami problemowymi zwykle dostaję NaN w Bazie i zero w wysokości Przesunięcia i Przewijania. Następnie spróbowałem dodać rozwiązanie DOM i clientRects, aby sprawdzić, czy to działa tutaj.
29 czerwca 2011 r. Rzeczywiście zaktualizowałem kod, aby spróbować zarówno dodać do DOM, jak i clientHeight z lepszymi wynikami niż się spodziewałem.
1) clientHeight było również 0.
2) Dom rzeczywiście dał mi wzrost, który był świetny.
3) ClientRects zwraca wynik prawie identyczny z techniką DOM.
Ponieważ dodane elementy mają płynny charakter, po dodaniu do innego pustego elementu DOM Temp są renderowane zgodnie z szerokością tego kontenera. Dziwnie się to robi, bo jest o 30 pikseli krótsze niż ostatecznie.
Dodałem kilka migawek, aby zilustrować, w jaki sposób wysokość jest obliczana inaczej.
Różnice wysokości są oczywiste. Z pewnością mógłbym dodać pozycjonowanie bezwzględne i ukryte, ale jestem pewien, że to nie przyniesie efektu. Nadal byłem przekonany, że to nie zadziała!
(I dygresuję dalej) Wysokość wychodzi (renderuje) poniżej rzeczywistej renderowanej wysokości. Można temu zaradzić, ustawiając szerokość elementu DOM Temp w celu dopasowania do istniejącego elementu nadrzędnego i teoretycznie można to zrobić dość dokładnie. Nie wiem też, co by się stało z ich usunięcia i dodania z powrotem do ich istniejącej lokalizacji. Gdy dotarli za pomocą techniki innerHTML, będę szukał tego innego podejścia.
* JEDNAK * Nie było to konieczne. W rzeczywistości działał zgodnie z reklamą i zwrócił prawidłową wysokość !!!
Kiedy udało mi się ponownie wyświetlić menu, zadziwiająco DOM zwrócił prawidłową wysokość dla układu płynu na górze strony (279 pikseli). Powyższy kod używa również getClientRects, które zwracają 280px.
Ilustruje to poniższa migawka (pobrana z Chrome po uruchomieniu).
Teraz nie mam pojęcia, dlaczego ta prototypowa sztuczka działa, ale wydaje się, że tak. Alternatywnie działa również getClientRects.
Podejrzewam, że przyczyną wszystkich problemów z tymi konkretnymi elementami było użycie innerHTML zamiast appendChild, ale w tym momencie jest to czysta spekulacja.
źródło
offsetHeight
, zazwyczaj.Jeśli musisz coś obliczyć, ale go nie wyświetlasz, ustaw element na
visibility:hidden
iposition:absolute
dodaj go do drzewa DOM, pobierzoffsetHeight
i usuń. (To właśnie robi biblioteka prototypów za scenami, kiedy ostatnio sprawdzałem).źródło
Czasami offsetHeight zwróci zero, ponieważ utworzony element nie został jeszcze zrenderowany w Dom. Napisałem tę funkcję dla takich okoliczności:
źródło
Jeśli już używasz jQuery, najlepszym wyborem jest
.outerHeight()
lub.height()
, jak już wspomniano.Bez jQuery możesz sprawdzić używane rozmiary okien i dodać różne wypełnienia + obramowania + wysokość klienta lub możesz użyć getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
będzie teraz ciągiem takim jak „53,825px”.I nie mogę znaleźć referencji, ale myślę, że słyszałem, że
getComputedStyle()
może być drogi, więc prawdopodobnie nie jest to coś, co chcesz wywoływać przy każdymwindow.onscroll
zdarzeniu (ale wtedy nie jest to również jQueryheight()
).źródło
getComputedStyle
, użyj,parseInt(h, 10)
aby uzyskać liczbę całkowitą do obliczeń.Z MooTools :
$('someDiv').getSize().y
źródło
Jeśli dobrze zrozumiałem twoje pytanie, być może coś takiego pomogłoby:
źródło
Czy konkretnie ustawiłeś wysokość w css? Jeśli nie, musisz użyć
offsetHeight;
zamiastheight
źródło