Кажется, что в IE ширина включает размер отступа. в то время как в FF ширина не имеет. Как я могу заставить обоих вести себя одинаково?
Спасибо.
Кажется, что в IE ширина включает размер отступа. в то время как в FF ширина не имеет. Как я могу заставить обоих вести себя одинаково?
Спасибо.
Ответы:
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блочную модель через какое-либо объявление.
Простое правило - стараться избегать использования свойств padding / margin и width для одного и того же элемента. т.е. использовать что-то похожее на это
<div class="width-div">
<div class="padding-div">
...........
...........
</div>
</div>
Я столкнулся с этим вопросом, и хотя ему уже пару лет, я подумал, что мог бы добавить это на тот случай, если кто-нибудь столкнется с этой веткой.
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;
}
У вас есть заявленный тип документа? Когда я начал писать 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>