Яка різниця між шириною, внутрішньою шириною та зовнішньою шириною, висотою, внутрішньою та зовнішньою висотою в jQuery


124

Я написав якийсь приклад, щоб побачити, в чому різниця, але вони показують мені однакові результати по ширині та висоті.

<html>
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var div = $('.test');
                var width = div.width(); // 200 px
                var innerWidth = div.innerWidth(); // 200px
                var outerWidth = div.outerWidth(); // 200px

                var height = div.height(); // 150 px
                var innerHeight = div.innerHeight(); // 150 px
                var outerHeight = div.outerHeight(); // 150 px
            });

        </script>
        <style type="text/css">
            .test
            {
                width: 200px;
                height: 150px;
                background: black;
            }
        </style>
    </head>
    <body>
        <div class="test"></div>
    </body>
</html>

У цьому прикладі ви бачите, що вони дають однакові результати. Якщо хтось знає, в чому різниця, будь ласка, покажіть мені відповідну відповідь.

Дякую.


8
Ви подивилися документацію jQuery?
Бред М

1
Спробуйте додати підкладку, межу та маржу до своїх <div>, і подивіться, чи це дає різні результати;)
Niet the Dark Absol

4
api.jquery.com/category/dimensions Ця сторінка описує їх усі, і якщо ви натискаєте кожну, ви отримуєте ще більше інформації.
JClaspill

Я шукав у Google, але жодна з відповідей не відповідає моїм очікуванням.
zajke

@BradM - Немає чоловіка. Але результати для "різниці між шириною, внутрішньою шириною, зовнішньою шириною jquery" нічого не підказують у найважливіших.
zajke

Відповіді:


282

1
найкраща відповідь коли-небудь
Бенджамін

Я щойно опублікував відповідь нижче, оскільки зараз я бачу різну поведінку між двома варіантами, які не
опиняються

16

Як згадується в коментарі, документація вам точно визначає, в чому полягають відмінності. Але підсумовуючи:

  • innerWidth / innerHeight - включає прокладку, але не бордюр
  • externalWidth / externalHeight - включає прокладку, облямівку та необов'язково поле
  • висота / ширина - висота елемента (без прокладки, без запасу, без окантовки)

4
  • width = отримати ширину,

  • innerWidth = отримати ширину + прокладки,

  • externalWidth = отримати ширину + прокладка + рамка та необов'язково маржина

Якщо ви хочете протестувати, додайте до ваших .test класів трохи прокладки, поля, межі та повторіть спробу.

Також читайте в документах jQuery ... Все, що вам потрібно, є майже там


2

Здається, необхідно розповісти про призначення присвоєння значень та порівняти значення значення параметра "width" у jq: (припустимо, що new_value визначено в одиниці px)

jqElement.css('width',new_value);
jqElement.css({'width: <new_value>;'});
getElementById('element').style.width= new_value;

Три інструкції не дають однакового ефекту: адже перша інструкція jquery визначає внутрішню ширину елемента, а не "ширину". Це хитро.

Щоб отримати той самий ефект, ви повинні обчислити прокладки раніше (припустимо, що var - це колодки), правильна інструкція для jquery для отримання того ж результату, що і чистий js (або параметр css 'width'):

jqElement.css('width',new_value+pads);

Можна також відзначити, що для:

var w1 = jqElement.css('width');
var w2 = jqelement.width();

w1 - внутрішня ширина, тоді як w2 - ширина (значення атрибута css) Різниця, яка не зафіксована в документації API JQ.

З найкращими побажаннями

Трепетно


Примітка: на мою думку, це може розглядатися як помилка JQ 1.12.4, способом виходу повинно бути, щоб остаточно ввести список прийнятих параметрів для .css ('параметр', значення), оскільки за 'параметрами' є різні значення прийняті, які мають інтерес, але повинні бути завжди зрозумілими. У цьому випадку: "внутрішня ширина" не буде означати те саме, що "ширина". Дослідження цієї проблеми ми можемо знайти в документації .width (значення) з реченням: "Зауважте, що в сучасних браузерах властивість ширини CSS не включає в себе замітку"


Доданий твіст: .css('width')це те саме, що .outerWidth()(тобто включає рамку, а також прокладку), коли box-sizing: border-box;.
Боб Штейн

0

Погодьтеся з усіма відповідями, наведеними вище. Просто додавання з точки зору перспектив вікна чи браузера innerWidth/ innerheightвключає лише область вмісту вікна, нічого іншого, але

outerWidth/ outerHeight включає область вмісту Windows, і крім цього вона включає також такі речі, як панелі інструментів, смуги прокрутки тощо ... і ці значення завжди будуть рівними або більшими, ніж значення значень innerWidth / innerHeight.

Сподіваюся, що це допомагає більше ...


0

Що я зараз бачу, це те innerWidth включає весь вміст

Це, якщо вікно є, 900pxа вміст є 1200px(і є прокрутка)

  • innerWidth дає мені 1200px
  • outerWidth дає мені 900px

Зовсім несподівано в моїх очах

* У моєму випадку вміст міститься в <iframe>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.