Firefox скрывает таблицы без содержимого и без заданной высоты

у меня пустой table или div С display:table:

если я теперь добавлю границу в таблицу-даже если нет контента - я ожидал бы увидеть границу.

в Chrome и IE есть граница. В Firefox-граница занимает место, но она скрыта.

демо

table,
div {
  width: 200px;
  background: tomato;
  margin-bottom: 20px;
  border: 2px solid black;
}
div + div,
table + table {
  background: green;
  height: 200px;
}
div {
  display: table;
}
<div></div>
<div></div>

<table></table>
<table></table>

аналогично, я даже могу добавить min-height к таблице-Chrome и IE оба уважают минимальную высоту свойство, но Firefox по-прежнему полностью скрывает таблицу.

демо

поэтому для того, чтобы таблица получила высоту в Firefox-таблица нуждается в контенте или высота.

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

6 ответов


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

решение:

table:after,
div:after {
    content: "";
}

Рабочий Пример (JSFiddle):

table, div {
   width: 200px;
   background: tomato;
   margin-bottom: 20px;
   border: 2px solid black;
}
div + div, table + table {
    background: green;
    height: 200px;
}

div {   
    display:table;    
}
table:after,
div:after {
    content: "";
}
<div></div>
<div></div>

<table></table>
<table></table>

обратите внимание, что в примере выше по умолчанию border-spacing: 2px; на table элементы будут оказанный. Вы можете использовать border-spacing: 0; для удаления лишних пробелов.

на вопрос min-height не работает, последствия min-height и max-height неопределено для tables.

спецификация:

в CSS 2.1 влияние "min-height" и "max-height" на таблицы, встроенные таблицы, ячейки таблицы, строки таблицы и группы строк не определено.

также нет особых причин использовать его, так как указание height не ограничивает высоту таблицы и эффективно ведет себя как min-height будет.


выделение пустых элементов в инспекторе показывает, что пустые поля таблицы отображаются с используемой высотой, равной -(border-top-width + border-bottom-width). Абсолютная абсурдность этого поведения в основном подтверждает его как ошибку, но если вам абсолютно нужна ссылка, spec говорит:

высота таблицы задается свойством "height" для элемента "table" или "inline-table". Значение "auto" означает, что высота является суммой высот строк плюс любое расстояние между ячейками или границы.

Как вы можете видеть, он говорит: "плюс" границ. Не "минус".

обратите внимание, что коробки действительно есть, так как у них все еще есть поля. По какой-то причине они просто визуализируются с отрицательной высотой.


задание table, div до height: 0; делает трюк для меня, да, странные вещи, но если он не нуждается в содержании, это должно быть хорошо.


из того, что я отметил, Firefox не позволит min-height на элементы с помощью display: table стиль. Поэтому рекомендуется изменить min-height до height и это должно сработать. Я говорил об этом ошибка


вам нужно определить высоту, FF не устанавливает автоматически высоту, если не определяет, поэтому он знает, что они 2px + 2px границ, и он удалил его по установленной высоте до-4px, как вы можете видеть на вычисляемом инспекторе: enter image description here

но Chrome понимает, что они не имеют высоты, поэтому он установил 0:

enter image description here

Добро пожаловать в разницу между браузерами!


задание высота выполнит вашу потребность.