Поля или отступы для пробелов? - PullRequest
0 голосов
/ 15 января 2010

Следующий пример идентичен почти во всех браузерах, включая IE6:

http://jsbin.com/adica3

#one  {border : 1px solid red;padding:20px}
#two  {border : 1px solid yellow}
p     {border: 1px solid blue;}
.marg {margin: 0;padding: 0}
.padd {margin:  20px}
</style>
</head>
<body>

<div id="one">
  <p class="marg">Padding to div</p>

</div>

<div id="two">
  <p class="padd">margin tp P</p>

</div>

Но когда я даю width div, секунда div становится короче первой div.

Как мы должны решить, что уместно?

О каких проблемах совместимости браузера я должен знать?

Ответы [ 3 ]

3 голосов
/ 15 января 2010

Поля на внешней стороне, прокладки на внутренней стороне относительно границы. Очевидно, что если у вас есть что-то вроде фонового изображения и текста, и вы хотите, чтобы текст располагался между краем изображения bg, вы использовали бы отступы. То же самое с границами.

Если вам нужно пространство снаружи, а также пространство между изображениями border / bg, вы должны использовать поля.

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

Если вы зададите для #one и #two ширину 200 пикселей, #one займет 240 пикселей без учета горизонтальных границ, поскольку он имеет отступ в 20 пикселей по горизонтали.

Движок рендеринга IE5 и режим причуд IE6 / IE7 некорректно отображают правильное количество пространства, если вы укажете горизонтальное заполнение и ширину, width:100px; padding:20px; заставит блок фактически занимать 100 пикселей ширины, вместо того, чтобы фактически быть 140 пикселями как и должно быть правильно.

Еще одна ошибка, на которую следует обратить внимание, - ошибка с двумя полями; если у вас есть элемент с плавающей точкой и поле в том же направлении, что и у объекта с плавающей точкой, например, float:left;margin-left:100px;, он случайно удваивается. Это исправлено добавлением display:inline;, что заставляет его просто иметь 100px вместо 200px слева.

Я замечаю, что вы задаете много вопросов, на которые можно было бы ответить, просто прочитав приличную книгу переднего плана - рассматривали ли вы чтение:

Те, вероятно, ответят на многие ваши вопросы ...

0 голосов
/ 15 января 2010

Я думаю, что самый простой способ - думать о границе элемента.

поля пробелов за пределами границы, а отступы внутри.

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

0 голосов
/ 15 января 2010

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

Например, является ли <p> единственной вещью, которая появится в вашем div? Если так, то это, вероятно, не имеет значения.

Если есть другие элементы, которые будут внутри div, вы хотите добавить вокруг них или нет?

Что касается измененной ширины, это, вероятно, будет связано с различными моделями бокса между браузерами.

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