Ширина 100% больше, чем родительский div

Я работаю над темой vBulletin, но в списке нитей каждый поток имеет 100% ширины, но потоки также больше, чем их родители, но когда я удаляю границу потоков, они будут соответствовать родительскому div:). поэтому подумайте, что эта проблема находится на границах.

Вы можете видеть, что лучше на jsfiddle (нить - белая фигура с черной рамкой)

<body>
   <div class="after-body">
        <div class="body-wrapper">
             <div class="threadlist">
                    <ol class="threads">
                        <li class="threadbit"><div class="thread"></div></li>
                        <li class="threadbit"><div class="thread"></div></li>
                    </ol>
             </div>
        </div>
   </div>
</body>

Ответы

Ответ 1

Проблема здесь в том, что width представляет собой размер внутренней области с текстом, а прокладка с границей "обернута" вокруг него. Эта спецификация не имеет смысла, но за ней следуют самые современные браузеры.

Ваш спаситель называется box-sizing: border-box;.

.threadbit .thread {

    /* ... some stuff ... */

    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;         /* Opera/IE 8+ */
}

Посмотрите здесь: jsFiddle

Подробнее об этой собственности здесь и здесь.

Ответ 2

Да, вы правы, границы вытесняют "ширину" элемента. Это стандартный box-sizing современных браузеров. В большинстве случаев это может быть изменено с помощью объявления типа:

.threadbit .thread { 
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;         /* Opera/IE 8+ */
}

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

ИЗМЕНИТЬ

Прошло некоторое время, так как мой оригинальный ответ и поддержка браузера немного изменились. Firefox 29, Chrome 10, Safari 5.1 и Internet Explorer 8 поддерживают всю поддержку box-sizing unprefixed, однако есть несколько известных проблем из определенных версий.

Полный/обновленный список доступен на caniuse.com, но вот несколько из них, которые я нашел важными с сайта:

  • IE8: игнорирует box-sizing: border-box, если используется min/max-width/height
  • IE8: свойство min-width применяется к content-box, даже если для параметра box-sizing установлено значение border-box
  • IE9: ширина полосы прокрутки вычитается из ширины элемента при установке на position: absolute и либо overflow: auto, либо overflow-y: scroll

По мере снижения доли рынка для IE8 и IE9 эти проблемы и другие, перечисленные на caniuse, будут в меньшей степени проблемой в будущем.

Ответ 3

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

  *, *:before, *:after {
      -moz-box-sizing: border-box;
      -webkit-box-sizing: border-box;
      box-sizing: border-box;
     }

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

Вот ссылка для свойства box-sizing http://www.paulirish.com/2012/box-sizing-border-box-ftw/