Почему 150 + 150 не равно 300 в браузерах?
Вопрос
У меня есть следующий 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" >
<head runat="server">
<style>
.box {
border: solid black 1px;
padding: 0px;
margin: 0px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<input class="box" style="width:300px;" /><br /><!--CRLF for clarity only-->
<input class="box" style="width:150px;" /><!--CRLF for clarity only-->
<input class="box" style="width:150px;" /><!--CRLF for clarity only-->
</form>
</body>
</html>
При рендеринге 2-й ряд текстовых полей выглядит кумулятивно длиннее 1-го в первом ряду. Это несмотря на явную настройку ширины с помощью атрибута стиля
Почему это происходит и можно ли этого избежать?
Примечание. Это похоже на одинаковую работу как в FF3, так и в IE7.
Решение
jhunter верен, и я бы добавил, что вам нужен Firebug для FireFox (это бесплатно). Вы могли бы понять это сами быстро с установленным. Изучите интересующий вас элемент и посмотрите на " макет " Вкладка.
Другие советы
В текстовом поле есть рамка, которая не включена в ширину.
Действительно, ширина ваших блоков равна +2 в виде границы как слева, так и справа (что составляет 1 пиксель), что означает, что на каждый блок приходится 2 дополнительных пикселя. Таким образом, в общей сложности вы +6.
Я бы посоветовал прочитать CSS Mastery, он объясняет множество различий между различными моделями браузеров и их влияние на разметку и ширину в разных браузерах.