box-sizing: border-box, заставляющий div с отступом внутри td иметь поля, ПОЧЕМУ?

Я хочу сделать коробку с содержимым, которое центрируется по вертикали, но также прокручивается, если содержимое переполняется. Я могу использовать таблицу с вертикальным выравниванием: средним для достижения вертикального центрирования, но тд не может переполнить прокрутку, поэтому я поместил прокручиваемый div внутри тд и сделал его высотой: 100%. Это нормально, пока я не попытаюсь дать прокручивающему div некоторый отступ, что делает его слишком широким для тд, поэтому я даю ему box-sizing: border-box. Тогда внезапно есть верхнее и нижнее поле на div!

WAT!?

http://codepen.io/jessehattabaugh/pen/GIjiL

Между зеленой линией и красной линией не должно быть места, но это так! Если вы измените отступы на зеленый div, загадочное поле изменится. Это как если бы высота: 100% на самом деле 100% - отступ или что-то в этом роде. Если вы удалите padding или box-sizing: border-box, то он исчезнет.

Бонусные баллы: почему FF не учитывает высоту стола: правило 50%, когда Chrome/Saf это делают?

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

1 ответ

Ваш браузер добавляет пространство вокруг стола. В Chrome добавьте:

table {
  border-spacing: 0px;
}
Другие вопросы по тегам