Chrome и Safari отображают столбцы CSS по-разному, когда количество элементов равно количеству столбцов

У меня есть список каталогов, который использует столбцы CSS, но ведет себя по-разному в Chrome и Safari. Каждый раздел каталога имеет оболочку, которая размещает списки в два столбца.

У меня есть CSS, поэтому Chrome отображает его так, как я хочу:

Chrome правильно отображает столбцы

В Safari первый элемент во втором столбце иногда имеет видимое поле над ним.

Safari отображает второй столбец с видимым запасом

Я могу исправить это в Safari, добавив display: inline-block; к элементам списка. Это нарушает макет в Chrome, так как разделы, в которых есть только два элемента, перечисляют оба элемента в первом столбце.

с исправлением inline-block, chrome не отображает столбцы только с 2 элементами правильно

Snippet:

ul {
 moz-column-count:2;
 -webkit-column-count:2;
 column-count:2;
  column-gap: 2em;
}

li {
   -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
  width:100%;
 list-style-type:none;
 padding:10px;
  box-sizing:border-box;
  background-color: #90cdc0;
  margin-bottom: 2em;
}
<h3>
A
</h3>
<ul>
  <li>Anna<p>Sometimes there is additional content</p></li>
    <li>Anya</li>
</ul>
<h3>
B
</h3>
<ul>
    <li>Bartolo <p>Sometimes there is additional content. The boxes are of variable size.</p></li>
    <li>Beatriz</li>
    <li>Benedicto</li>
  <li>Boggins</li>
</ul>

Можно ли стилизовать этот каталог из двух столбцов так, чтобы он правильно отображался во всех браузерах?

1 ответ

Решение

Я разобрался с этим, по крайней мере, для Safari против Chrome.

Так как это применимо только тогда, когда количество элементов равно количеству столбцов, и, поскольку это число известно, я могу применить display: inline-block; в li а затем переопределить это, когда 2-й листинг также является последним листингом.

В моем случае решение состоит в том, чтобы добавить в CSS:

li {
  display: inline-block; 
}

li:last-child:nth-child(2) {
  display: block;
}

Полный CSS:

ul {
  moz-column-count:2;
  -webkit-column-count:2;
  column-count:2;
  column-gap: 2em;
}

li {
  display: inline-block;
  -webkit-margin-before: 0;
  -webkit-margin-after: 0;
  -webkit-column-break-inside: avoid;
  page-break-inside: avoid;
  break-inside: avoid;
  width:100%;
  list-style-type:none;
  padding: 1em;
  box-sizing:border-box;
  background-color: #90cdc0;
  margin-bottom: 2em;
}

li:last-child:nth-child(2) {
  display: block;
}
Другие вопросы по тегам