【问题标题】:CSS Grid & overflow issue with SafariSafari 的 CSS 网格和溢出问题
【发布时间】:2020-10-12 04:37:44
【问题描述】:

我目前正在研究一个项目,在该项目中我发现了一个仅在 safari 上发生的问题,我找不到合适的方法来解决它而不会带来太多的复杂性。让我解释一下。

问题发生在我的弹出式设计中,主块 (.popup-bg) 有一个显示网格和放置项目中心,以便居中并在他的内容中具有动态高度,但他不应该出站屏幕窗口.这在 Chrome、Firefox 甚至 Edge(减去位置项)中效果很好,但在 Safari 中它不能正常工作并且网格井喷。这发生在内部 div 的 display flex 和 overflow 设置为滚动时。

当我将.popup-bg 设置为display: flex; 而不是grid 时,Safari 会正确调整其大小,但不能保证内部项目的高度。

我怎样才能使它与网格一起工作?感谢您的帮助

重现此问题的示例:

* {
    box-sizing: border-box;
}
.popup-bg {
    min-width: 320px;
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    background-color: green;
    display: grid;
    align-content: center;
    justify-items: center;
    padding: 40px;
}

.popup {
    background-color: white;
    width: 100%;
    max-width: 800px;
    display: flex;
    flex-direction: column;
    place-items: stretch;
    overflow: hidden;
}
.vertical-container {
    display: flex;
    flex-direction: column;
    place-items: stretch;
    overflow-y: auto;
}
.displayer {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
    align-content: flex-start;
    overflow-y: auto;
    flex: 1;
}
.block {
    background: blue;
    border: solid 1px yellow;
    display: flex;
}
.block:after {
  content: '';
  width: 50px;
  height: 50px;
}
.selector {
    display: flex;
    flex-direction: row;
    overflow-x: auto;
    width: 100%;
}
<div class="popup-bg">
    <div class="popup">
        <div class=vertical-container>
            <div class="displayer">
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
            </div>
            <div class="selector">
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
                <div class="block"></div>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

    标签: css safari


    【解决方案1】:

    尝试将display: grid 放在父元素上,这对我有帮助 https://stackoverflow.com/a/63197330/14101530

    【讨论】:

    【解决方案2】:

    在正确的位置添加flex: 0 0 auto;

    .displayer {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: center;
        align-content: flex-start;
        overflow-y: auto;
        // flex: 1;
    }
    .selector {
        display: flex;
        flex-direction: row;
        overflow-x: auto;
        // width: 100%;
        flex: 0 0 auto;
    }
    

    【讨论】:

      【解决方案3】:

      @Nagarian47 尝试在您的样式部分添加媒体查询

      【讨论】:

      • 你说的是哪个媒体查询?
      • 您可以搜索“浏览器的媒体查询”。例如喜欢这个博客ryadel.com/en/…
      • 您的回答对我没有任何帮助,您希望我在媒体查询中添加什么内容?你的意思是对我重写所有 CSS 的 Safari 进行媒体查询吗?这不应该是有效的维护
      • 将您的 css 代码放入 safari 的媒体查询中,如果您需要其他浏览器,则可以在该浏览器的媒体查询中添加您的 css 部分
      • 似乎与@media 查询问题无关。
      猜你喜欢
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多