Почему 150 + 150 не равно 300 в браузерах? - PullRequest
2 голосов
/ 05 января 2009

У меня есть следующий 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

.

Ответы [ 4 ]

23 голосов
/ 05 января 2009

В текстовом поле есть рамка, которая не включена в ширину.

7 голосов
/ 05 января 2009

jhunter правильно, и я бы добавил, что вам нужен Firebug для FireFox (это бесплатно). Вы могли бы понять это сами быстро с установленным. Осмотрите интересующий вас элемент и посмотрите на вкладку «Макет».

4 голосов
/ 05 января 2009

Действительно, ширина ваших блоков равна +2 в виде границы как слева, так и справа (что составляет 1 пиксель), что означает, что на каждый блок приходится 2 дополнительных пикселя. Итого, вы +6.

3 голосов
/ 05 января 2009

Я бы посоветовал прочитать CSS Mastery, он объясняет множество различий между различными моделями браузеров и их влияние на разметку и ширину в разных браузерах.

Мастерство CSS

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