CSS включает в себя ширину отступа? - PullRequest
139 голосов
/ 15 января 2011

Кажется, что в IE ширина включает размер отступа.в то время как в FF ширина не имеет.Как я могу заставить обоих вести себя одинаково?

Спасибо.

Ответы [ 5 ]

300 голосов
/ 15 января 2011
  • В IE использовалась более удобная, но нестандартная "рамка-рамка" коробочная модель. В этой модели ширина элемента включает отступы и границы. Например:
    #foo { width: 10em; padding: 2em; border: 1em; }
    будет 10em шириной.

  • В отличие от этого, все браузеры, поддерживающие стандарты, по умолчанию используют блочную модель "content-box" . В этой модели ширина элемента не включает отступы или границы. Например:
    #foo { width: 10em; padding: 2em; border: 1em; }
    на самом деле будет 16em ширина: 10em + 2em отступы для каждой стороны, + 1em граница для каждого края.

Если вы используете современную версию IE с допустимой разметкой , хорошим типом документа и соответствующими заголовками , он будет соответствовать стандарту. В противном случае вы можете заставить современные совместимые со стандартами браузеры использовать «рамку» с помощью:

* {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

Первое объявление необходимо для Opera, второе - для Firefox, третье - для Webkit и Chrome.

Вот простой тест, который я сделал несколько лет назад для проверки того, какое объявление размера ящика поддерживает ваш браузер: http://phrogz.net/CSS/boxsizing.html

Обратите внимание, что Webkit (Safari и Chrome) не поддерживают блочную модель padding-box через какое-либо объявление.

27 голосов
/ 15 января 2011

Простое правило - стараться избегать использования свойств padding / margin и width для одного и того же элемента. то есть используйте что-то похожее на это

<div class="width-div">
     <div class="padding-div">
     ...........
     ...........
     </div>
 </div>
18 голосов
/ 10 февраля 2014

Я столкнулся с этим вопросом, и хотя ему уже пару лет, я подумал, что мог бы добавить его на тот случай, если кто-нибудь столкнется с этим потоком.

CSS3 теперь имеет свойство изменения размера ящика.Если вы установите, скажем,

.bigbox {
    box-sizing: border-box; 
    width: 1000px; 
    border: 5px solid #333;
    padding: 10px;
}

, ваш класс будет иметь ширину 1000 пикселей вместо 1030 пикселей.Это, конечно, невероятно полезно для всех, кто использует границу размером в пиксель с жидкостными делителями, потому что это решает иным образом неразрешимую проблему.

Еще лучше, размер окна поддерживается всеми основными браузерами, кроме IE7 и ниже,Чтобы включали все элементы в измерении ширины или высоты, установите для размера поля значение border-box.Чтобы агрегировать других элементов по ширине и / или высоте, что является значением по умолчанию, вы можете установить размер поля в "content-box".

Я не уверен в текущемсостояние синтаксиса браузера, но я по-прежнему включаю префиксы -moz и -webkit:

.bigbox{
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}
1 голос
/ 15 января 2011

Есть ли у вас объявленный тип документа? Когда я начал кодировать html, у меня была эта проблема, и это было из-за отсутствия объявленного типа документа. Мой любимый это:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...
</html>
0 голосов
/ 07 июня 2018

для тех, у кого все еще будет проблема, jQuery предоставил два свойства outerWidth () и innerWitdh (), чтобы узнать ширину объекта с границами или без ... 1007 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...