Betrachten wir die Folge HTML (JSFiddle link):Warum funktioniert getBoundingClientRect nur lokal?
<div id="a" class="box">cat</div>
<div id="b" class="box rotate">cat</div>
<div id="c" class="box"><div class="rotate">cat</div></div>
und CSS:
.box { font-size:500%; }
.rotate { transform: rotate(-90deg); }
die Breite und Höhe des Elements Mess id=a
mit .getBoundingClientRect()
$(a)[0].getBoundingClientRect().width
$(a)[0].getBoundingClientRect().height
die Dimensionen (320,91)
gibt. Die gleiche Messung am Element id=b
ergibt die transponierten Abmessungen (91,320)
. Wunderbar.
Wenn ich jedoch versuche, das Element id=c
zu messen, das einfach die Drehung in einem inneren div nistet, bekomme ich die ursprünglichen Abmessungen (320,91)
! Sollten die Bounding Boxes für b
und c
nicht gleich sein?
Wenn nicht, wie kann ich die Bounding Box von c
korrekt melden?
Wenn relevant, ich bin mit Chromium, Version 37.0.2062.120 Ubuntu 12.04 (281580) (64-Bit).
'$ (a) [0] .getBoundingClientRect()' ist eine wirklich umständliche Art, 'a.getBoundingClientRect()' zu schreiben. Wenn Sie sich auf die automatischen Globals verlassen wollen, können Sie sie auch verwenden. :-) –
@ T.J.Crowder Danke für den Tipp! Dies war mein Versuch, ein minimales Arbeitsbeispiel von einem größeren Projekt, an dem ich gerade arbeite, zu versuchen. Ich bin sehr versiert im Webdesign und ich verlasse mich oft auf JQuery, um Dinge, die ich lerne, mit weniger Ausführlichkeit auszuführen. – Hooked
@Hooked: In diesem Fall wäre die jQuery-Version '$ (" # a ") [0] .getBoundingClientRect();' Ich kann mich einfach nicht auf diese automatischen Globals verlassen. :-) –