Angenommen, ich habe eine <div>
, die ich in der Anzeige des Browsers (Ansichtsfenster) zentrieren möchte. Dazu muss ich die Breite und Höhe des <div>
Elements berechnen .
Was soll ich verwenden? Bitte geben Sie Informationen zur Browserkompatibilität an.
javascript
html
xhtml
dhtml
snortasprocket
quelle
quelle
Antworten:
Sie sollten die Eigenschaften
.offsetWidth
und.offsetHeight
verwenden. Beachten Sie, dass sie nicht zum Element gehören.style
.var width = document.getElementById('foo').offsetWidth;
Die Funktion
.getBoundingClientRect()
gibt nach Durchführung von CSS-Transformationen Dimensionen und Position des Elements als Gleitkommazahlen zurück.quelle
.offsetWidth
und.offsetHeight
: developer.mozilla.org/de/Determining_the_dimensions_of_elementsoffsetWidth
ist 0, wenn das Element istdisplay:none
, während das berechnete Elementwidth
in diesem Fall möglicherweise noch einen positiven Wert hat.visibility:hidden
wirkt sich nicht auf dieoffsetWidth
.offsetWidth
Gibt das "ganze" Feld einschließlich Inhalt, Auffüllung und Rahmen zurück. whileclientWidth
gibt nur die Größe des Inhaltsfelds zurück (daher hat es einen kleineren Wert, wenn das Element eine Auffüllung und / oder einen Rand ungleich Null aufweist). (Mod aus Gründen der Klarheit bearbeitet)Schau es dir an
Element.getBoundingClientRect()
.Diese Methode wird ein Objekt zurückgeben , die enthalten
width
,height
und einige andere nützliche Werte:Zum Beispiel:
Ich glaube, dies hat nicht die Probleme, die
.offsetWidth
und.offsetHeight
tun, wo sie manchmal zurückkehren0
(wie in den Kommentaren hier diskutiert )Ein weiterer Unterschied ist ,
getBoundingClientRect()
kann fraktionierten Pixel zurückzukehren, wo.offsetWidth
und.offsetHeight
rundet auf die nächste ganze Zahl.IE8 Hinweis : Gibt
getBoundingClientRect
in IE8 und darunter keine Höhe und Breite zurück . *Wenn Sie IE8 unterstützen müssen , verwenden Sie
.offsetWidth
und.offsetHeight
:Es ist erwähnenswert, dass das von dieser Methode zurückgegebene Objekt kein normales Objekt ist. Seine Eigenschaften sind nicht aufzählbar (
Object.keys
funktioniert also beispielsweise nicht sofort ).Weitere Informationen hierzu finden Sie hier: So konvertieren Sie ein ClientRect / DomRect am besten in ein einfaches Objekt
Referenz:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectquelle
offsetHeight
undoffsetWidth
wird nicht.HINWEIS : Diese Antwort wurde 2008 geschrieben. Zu der Zeit war die beste browserübergreifende Lösung für die meisten Menschen die Verwendung von jQuery. Ich lasse die Antwort hier für die Nachwelt und wenn Sie jQuery verwenden, ist dies eine gute Möglichkeit, dies zu tun. Wenn Sie ein anderes Framework oder reines JavaScript verwenden, ist die akzeptierte Antwort wahrscheinlich der richtige Weg.
Ab 1.2.6 jQuery können Sie eine der Kern verwenden CSS - Funktionen ,
height
undwidth
(oderouterHeight
undouterWidth
, je nach Bedarf).quelle
Nur für den Fall, dass es für irgendjemanden nützlich ist, habe ich ein Textfeld, eine Schaltfläche und ein Div mit demselben CSS eingefügt:
Ich habe es in Chrom, Firefox und ie-Edge versucht, ich habe es mit jquery und ohne versucht, und ich habe es mit und ohne versucht
box-sizing:border-box
. Immer mit<!DOCTYPE html>
Die Ergebnisse:
quelle
Laut MDN: Ermittlung der Abmessungen von Elementen
offsetWidth
undoffsetHeight
geben Sie die "Gesamtfläche zurück, die ein Element einnimmt, einschließlich der Breite des sichtbaren Inhalts, der Bildlaufleisten (falls vorhanden), des Auffüllens und des Rahmens".clientWidth
und geben SieclientHeight
zurück, "wie viel Platz der tatsächlich angezeigte Inhalt einnimmt, einschließlich Auffüllen, jedoch ohne Rand, Ränder oder Bildlaufleisten".scrollWidth
undscrollHeight
geben Sie die "tatsächliche Größe des Inhalts zurück, unabhängig davon, wie viel davon derzeit sichtbar ist".Es hängt also davon ab, ob der gemessene Inhalt voraussichtlich außerhalb des aktuell sichtbaren Bereichs liegt.
quelle
Sie müssen es nur für IE7 und älter berechnen (und nur, wenn Ihr Inhalt keine feste Größe hat). Ich schlage vor, HTML-bedingte Kommentare zu verwenden, um den Hack auf alte IEs zu beschränken, die CSS2 nicht unterstützen. Verwenden Sie für alle anderen Browser Folgendes:
Dies ist die perfekte Lösung. Es zentriert
<div>
jede Größe und verkleinert es auf die Größe seines Inhalts.quelle
Es ist einfach, die Elementstile zu ändern, aber es ist etwas schwierig, den Wert zu lesen.
JavaScript kann keine Elementstileigenschaft (elem.style) lesen, die von CSS (intern / extern) stammt, es sei denn, Sie verwenden den integrierten Methodenaufruf getComputedStyle in Javascript.
Element: Das Element, für das der Wert gelesen werden soll.
pseudo: Ein Pseudoelement, falls erforderlich, zum Beispiel :: before. Eine leere Zeichenfolge oder kein Argument bedeutet das Element selbst.
Das Ergebnis ist ein Objekt mit Stileigenschaften wie elem.style, jetzt jedoch in Bezug auf alle CSS-Klassen.
Zum Beispiel sieht der Stil hier nicht den Rand:
Ändern Sie daher Ihren JavaScript-Code so, dass er den getComputedStyle des Elements enthält, dessen Breite / Höhe oder ein anderes Attribut Sie erhalten möchten
Berechnete und aufgelöste Werte
In CSS gibt es zwei Konzepte:
Vor langer Zeit wurde getComputedStyle erstellt, um berechnete Werte abzurufen. Es stellte sich jedoch heraus, dass aufgelöste Werte viel praktischer sind, und der Standard wurde geändert.
Heutzutage gibt getComputedStyle den aufgelösten Wert der Eigenschaft zurück.
Bitte beachten Sie:
getComputedStyle benötigt den vollständigen Eigenschaftsnamen
Es gibt andere Inkonsistenzen. Einige Browser (Chrome) zeigen im folgenden Dokument beispielsweise 10 Pixel an, andere (Firefox) - nicht:
Weitere Informationen finden Sie unter https://javascript.info/styles-and-classes
quelle
element.offsetWidth und element.offsetHeight sollten dies tun, wie im vorherigen Beitrag vorgeschlagen.
Wenn Sie den Inhalt jedoch nur zentrieren möchten, gibt es eine bessere Möglichkeit. Angenommen, Sie verwenden xhtml strict DOCTYPE. Setzen Sie den Rand: 0, die Auto-Eigenschaft und die erforderliche Breite in px auf das Body-Tag. Der Inhalt wird mittig auf die Seite ausgerichtet.
quelle
... scheint CSS zu helfen, div in den Mittelpunkt zu stellen ...
quelle
Sie können auch diesen Code verwenden:
quelle
wenn Sie es im Anzeigeport des Browsers zentrieren müssen; Sie können dies nur mit CSS erreichen
quelle
Hier ist der Code für WKWebView, der die Höhe eines bestimmten Dom-Elements bestimmt (funktioniert nicht richtig für die gesamte Seite).
quelle
swift
Code, oder? Nicht JavaScript. Ich halte eine Ablehnung zurück (b / c kann dies tatsächlich ziemlich nützlich sein), aber bitte beachten Sie, dass dies die Frage nicht beantwortet und wahrscheinlich für eine andere, iOS-spezifische Frage angemessener wäre. Wenn es noch keine gibt, sollten Sie vielleicht eine fragen und sich selbst beantworten.Wenn offsetWidth 0 zurückgibt, können Sie die Eigenschaft style width des Elements abrufen und nach einer Zahl suchen. "100px" -> 100
/\d*/.exec(MyElement.style.width)
quelle