Предположим, что у меня есть объект, <div>
который я хочу центрировать на дисплее браузера (область просмотра). Для этого мне нужно рассчитать ширину и высоту <div>
элемента.
Что я должен использовать? Пожалуйста, включите информацию о совместимости браузера.
javascript
html
xhtml
dhtml
snortasprocket
источник
источник
Ответы:
Вы должны использовать
.offsetWidth
и.offsetHeight
свойства. Обратите внимание, что они принадлежат элементу, а не.style
.var width = document.getElementById('foo').offsetWidth;
Функция
.getBoundingClientRect()
возвращает размеры и расположение элемента в виде чисел с плавающей точкой после выполнения CSS-преобразований.источник
.offsetWidth
and.offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elementsoffsetWidth
будет 0, если элемент равенdisplay:none
, в то время как вычисленноеwidth
может все еще иметь положительное значение в этом случае.visibility:hidden
не влияет наoffsetWidth
.offsetWidth
возвращает «целое» поле, включая содержимое, отступы и границы; whileclientWidth
возвращает размер только поля содержимого (поэтому оно будет иметь меньшее значение всякий раз, когда элемент имеет ненулевое заполнение и / или границу). (мод отредактирован для ясности)Взгляни на
Element.getBoundingClientRect()
.Этот метод возвращает объект , содержащий
width
,height
и некоторые другие полезные значения:Например:
Я считаю, что это не имеет проблемы, которые
.offsetWidth
и.offsetHeight
делают, где они иногда возвращаются0
(как обсуждено в комментариях здесь )Другое отличие
getBoundingClientRect()
может возвращать дробные пиксели, где.offsetWidth
и.offsetHeight
будет округлять до ближайшего целого числа.Примечание IE8 :
getBoundingClientRect
не возвращает высоту и ширину в IE8 и ниже. *Если вы должны поддерживать IE8, используйте
.offsetWidth
и.offsetHeight
:Стоит отметить, что объект, возвращаемый этим методом, на самом деле не является нормальным объектом. Его свойства не перечисляются (например,
Object.keys
не работают "из коробки").Подробнее об этом здесь: Как лучше всего преобразовать ClientRect / DomRect в простой объект
Ссылка:
.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/getBoundingClientRectисточник
offsetHeight
иoffsetWidth
не будет.ПРИМЕЧАНИЕ : этот ответ был написан в 2008 году. В то время лучшим кросс-браузерным решением для большинства людей было использование jQuery. Я оставляю здесь ответ для потомков, и, если вы используете jQuery, это хороший способ сделать это. Если вы используете какой-то другой фреймворк или чистый JavaScript, принятый ответ, вероятно, будет правильным решением.
Начиная с jQuery 1.2.6 вы можете использовать одну из основных функций CSS ,
height
иwidth
(или,outerHeight
иouterWidth
, в зависимости от обстоятельств).источник
На всякий случай, если это кому-нибудь пригодится, я помещаю текстовое поле, кнопку и div все с одним и тем же css:
Я пробовал это в chrome, firefox и ie-edge, я пробовал с jquery и без, и я пробовал с и без
box-sizing:border-box
. Всегда с<!DOCTYPE html>
Результаты:
источник
Согласно MDN: определение размеров элементов
offsetWidth
иoffsetHeight
возвращает «общий объем пространства, занимаемого элементом, включая ширину видимого содержимого, полосы прокрутки (если есть), отступы и границы»clientWidth
иclientHeight
возвращает «сколько места занимает фактически отображаемое содержимое, включая отступы, но не включая границы, поля или полосы прокрутки»scrollWidth
иscrollHeight
вернуть «фактический размер контента, независимо от того, сколько его видно в данный момент»Таким образом, это зависит от того, ожидается ли, что измеренное содержимое выйдет за пределы текущей видимой области.
источник
Вам нужно только рассчитать его для IE7 и старше (и только если ваш контент не имеет фиксированного размера). Я предлагаю использовать условные комментарии HTML, чтобы ограничить взлом старых IE, которые не поддерживают CSS2. Для всех других браузеров используйте это:
Это идеальное решение. Это центрирует
<div>
любой размер, и сокращает это к размеру его содержания.источник
Легко изменить стили элементов, но довольно сложно прочитать значение.
JavaScript не может читать никакое свойство стиля элемента (elem.style), исходящее из css (внутреннее / внешнее), если вы не используете вызов встроенного метода getComputedStyle в javascript.
Элемент: элемент для чтения значения.
псевдо: псевдоэлемент, если требуется, например, :: before. Пустая строка или отсутствие аргумента означает сам элемент.
В результате получается объект со свойствами стиля, например, elem.style, но теперь по отношению ко всем классам CSS.
Например, здесь стиль не видит границы:
Поэтому изменил ваш код javaScript, включив в него getComputedStyle элемента, для которого вы хотите получить его ширину / высоту или другой атрибут
Вычисленные и разрешенные значения
В CSS есть две концепции:
Давным-давно getComputedStyle был создан для получения вычисляемых значений, но оказалось, что разрешенные значения намного удобнее, и стандарт изменился.
Так что в настоящее время getComputedStyle фактически возвращает разрешенное значение свойства.
Пожалуйста, обратите внимание:
getComputedStyle требует полного имени свойства
Есть и другие несоответствия. Например, некоторые браузеры (Chrome) показывают 10px в документе ниже, а некоторые из них (Firefox) - нет:
для получения дополнительной информации https://javascript.info/styles-and-classes
источник
element.offsetWidth и element.offsetHeight должны делать, как предложено в предыдущем посте.
Однако, если вы просто хотите центрировать контент, есть лучший способ сделать это. Предполагая, что вы используете xhtml строгий DOCTYPE. установите поле: 0, свойство auto и необходимую ширину в пикселях для тега body. Контент выравнивается по центру страницы.
источник
... кажется, CSS помогает поместить div в центр ...
источник
Также вы можете использовать этот код:
источник
если вам нужно центрировать его в порт дисплея браузера; Вы можете достичь этого только с помощью CSS
источник
Вот код для WKWebView, который определяет высоту определенного элемента Dom (не работает должным образом для всей страницы)
источник
swift
код iOS , верно? Не JavaScript. Я отказываюсь от понижения (т.к. это может быть довольно полезно), но учтите, что это не отвечает на вопрос и, скорее всего, будет более уместным по другому, специфичному для iOS вопросу. Если ничего еще не существует, возможно, подумайте над тем, чтобы задать вопрос и ответить на него.Если offsetWidth возвращает 0, вы можете получить свойство width элемента style и найти его по номеру. "100px" -> 100
/\d*/.exec(MyElement.style.width)
источник