Обходной путь Flexbox для Safari

Я закончил свой веб-сайт, но я не понял, что сафари не поддерживает разрыв flexbox. Есть ли способ обойти это, ничего не испортив? Это в основном для моих медиа-запросов.

<div class = "social-media">
  <a href = "https://github.com/">
    <img class = "social-media__icon" src = "img/github.png" alt = "Github">
  </a>
  <a href = "https://www.linkedin.com/">
    <img class = "social-media__icon" src = "img/linkedin.png" alt = "LinkedIn">
  </a>
</div>
.social-media {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    gap: 8rem;
    margin-top: 10rem;
    padding-bottom: 2rem;
}

.social-media img {
    width: 90px;
    height: 90px; 
}
    
@media only screen and (max-width: 400px) {
    .social-media {
        gap: 3rem;
        margin-top: 5rem;
    }
    .social-media img {
        width: 62px;
        height: 62px;
    }
}
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
Введение в отзывчивый дизайн с использованием CSS
Введение в отзывчивый дизайн с использованием CSS
Поскольку число людей, пользующихся интернетом с помощью мобильных устройств, продолжает расти, важно, чтобы веб-сайты адаптировались к различным...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
21
0
36 586
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я думаю, вы могли бы сделать контейнер div и поместить justify-content: space-between; тогда думаю должно работать

куда вставить див? Я что-то пробовал, и это не работает

RDX10290 25.12.2020 23:09

поместите div вокруг элементов, которым нужен зазор, а затем поместите display: flex; и обосновать-содержание: пробел-между; в теме. затем сделайте ширину каждого элемента примерно 30%, если это три элемента, а оставшийся процент будет промежутком между ними.

Humza Din 25.12.2020 23:14
Ответ принят как подходящий

Используйте селектор Lobotomized owl: .parent > * + * {}, чтобы добавить поле слева, которое дает вам пространство между элементами, которые идут после другого элемента, таким образом вы устраняете нежелательное поле, которое оно создает, когда вы помещаете поле непосредственно в первый элемент ребенка (.social-media img{})

    .social-media > * + * { margin-left: 8rem;}

Здесь вы можете узнать больше о Селекторе лоботомированных сов

Обновлено: Gap теперь поддерживается в Safari 14.1 (сентябрь 2021 г.), поэтому вы сможете использовать его без проблем.

Ни пробел, ни пробел в колонке у меня в Safari по-прежнему не работали. Это сработало как шарм.

zinndesign 10.09.2021 22:41

на всякий случай, если вам интересно, как использовать это внутри mui, мы могли бы просто сделать в родительском элементе: '& > *+*': { marginTop: '16px' }

alexandre_anicio 22.09.2022 14:18

В сафари работало нормально. Большой.

Vương Hữu Thiện 14.11.2022 22:58

Gap работает как по вертикали, так и по горизонтали. Что делать, если у нас есть много элементов, которые создают разрывы строк? левое поле не будет вести себя так, как ожидалось

KCarnaille 06.12.2022 15:57

@KCarnaille добавление margin-right (включая первое), вероятно, даст наилучший результат в этом случае, каждый первый элемент в новой строке будет начинаться с одного и того же места по вертикали, но будет иметь пробел справа, который все еще будет равен если элементы имеют одинаковую ширину, что похоже на поведение flex-wrap, вы также можете поиграть с отрицательными полями/отступами в контейнере, чтобы устранить нежелательное пространство в конце строки

Elazar Zadiki 16.01.2023 13:53

Свойство gap с display: flex не поддерживается версией Safar < 14 https://caniuse.com/flexbox-gap. Возможно, вы захотите заменить отображение flex на grid:

display: grid;
grid-gap: 8rem; /* Safari 10-11 */
gap: 8rem;      /* Safari 12+ */

потому что разрыв сетки поддерживается в старых версиях Safari: https://caniuse.com/mdn-css_properties_gap_grid_context

Принятый ответ имеет проблему, заключающуюся в том, что у вас будет неправильное поле для первого элемента, если есть только одна строка. Также центрированные элементы всегда будут на 8rem слишком далеко вправо.

Лучшее решение, которое всегда будет работать с правильными интервалами:

.container {
  display: flex;
  // the trick is to set margins around boxes, but correct the margins around elements that are situated at the border of the container with negative margins
  margin: 0 -10px -20px -10px;
}

.box {
  min-width: 100px;
  height: 100px;
  background-color: deeppink;
  margin: 0 10px 20px 10px;
}
<div class='container'>
  <div class='box'>1</div>
  <div class='box'>2</div>
  <div class='box'>3</div>
  <div class='box'>4</div>
</div>

Вы можете удалить класс пробела и добавить еще один к дочерним элементам.

<div class = "d-flex"> // it was "d-flex gap" previously
  <div class = "mx-2">
    //content
  </div>
  <div class = "mx-2">
    //content
  </div>
</div>

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