Проблема с Safari и столбцами CSS

Я создаю сетку элементов, используя чистый CSS и HTML. Я столкнулся с проблемой при тестировании в Safari. Я извлек код в CodePen, который работает так же, как моя сетка.

Это код, который я использую для воспроизведения проблемы:

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html,
body {
  height: 100%;
  width: 100%;
  background: WhiteSmoke;
}

.wrapper {
  display: block;
  font: 400 14px/1.3 "Helvetica", sans-serif;
  width: 100%;
  padding: 0 20px;

  @media only screen and (min-width : 768px) {
    column-count: 2;
    font-size: 17px;
    column-gap: 20px;
  }

  @media only screen and (min-width : 992px) {
    column-count: 3;
  }
}

.wrapper > * {
  @media only screen and (min-width : 768px) {
    -webkit-column-break-inside: avoid;
    page-break-inside: avoid;
    break-inside: avoid-column;
  }
}

.wrapper > *:last-child {
  margin-bottom: 0;
}

.card {
  box-sizing: border-box;
  display: block;
  width: 100%;
  overflow: hidden;
  background: #FFF;
  border: 1px solid red;
  margin-bottom: 20px;
  padding: 15px;
  font-family: "Helvetica", sans-serif;
}

<div class = "wrapper">
  <div class = "card">A</div>
  <div class = "card">B</div>
  <div class = "card">C</div>
  <div class = "card">D</div>
  <div class = "card">E</div>
</div>

Ниже приведены два снимка экрана (оба сняты в macOS 10.13), демонстрирующие разные результаты в Chrome и Safari.

Проблема в том, что Safari, похоже, переносит маржу из предыдущего элемента во второй столбец. Есть ли способ заставить поведение, подобное Chrome?

Проблема с Safari и столбцами CSS

Редактировать:

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

Ниже приведен еще один снимок экрана, на котором сравниваются Chrome и Safari, на этот раз с .card, имеющим display: inline-block;, и первый элемент намного больше остальных.

Проблема с Safari и столбцами CSS

Вроде связано с stackoverflow.com/questions/14148078/…

Andy 19.06.2018 18:09

@Andy Похоже, что у Safari свой собственный подход к столбцам, ни одно из решений, к сожалению, не применимо.

J. Pinkman 19.06.2018 18:26

Да, я не понимаю, почему, если вы удалите нижнюю границу в своем коде, она работает

Andy 19.06.2018 18:34

Поля переносятся, единственное решение, которое я могу придумать, - это обернуть каждый элемент в div, к которому будет применяться дополнение вместо поля.

J. Pinkman 19.06.2018 18:39
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
6
4
2 054
2

Ответы 2

У моей команды была такая же проблема, и мы исправили ее, добавив дополнительный div внизу столбца с высотой требуемого поля margin-bottom и шириной 100%.

Чтобы избежать добавления элемента html, вы также можете добавить :после с дисплей: блок после вашего атрибута div.

figure {
     &:after {
            content: "";
            height: 80px;
            display: block;
            @media @mobile {
              height: 40px;
            }
          }
}

Другие вопросы по теме