带有 flexbox 的引导列在 iOS 和 Safari 上的宽度不合适

Posted

技术标签:

【中文标题】带有 flexbox 的引导列在 iOS 和 Safari 上的宽度不合适【英文标题】:Bootstrap columns with flexbox are not taking proper width on iOS and Safari 【发布时间】:2017-08-14 09:36:30 【问题描述】:

我正在尝试将弹性框与引导列一起使用,以便所有列始终水平居中。下面提到的标记适用于 firefox、chrome 和 android,但在 ios 和 safari 上失败。我还没有测试过IE。

HTML:

<!-- The fourth column falls down -->
<div class='row row-1 text-center'>
    <div class="col-xs-3 red">Hi</div>
    <div class="col-xs-3 blue">Hi</div>
    <div class="col-xs-3 blue">Hi</div>
    <div class="col-xs-3 blue">Hi</div>
</div>
<!-- Works Fine and centers the columns -->  
<div class='row text-center'>
    <div class="col-xs-3 red">Hi</div>
    <div class="col-xs-3 blue">Hi</div>
    <div class="col-xs-3 blue">Hi</div>
</div>

CSS:

.row 
    display: flex;
    display: -webkit-flex; 
    flex-wrap:wrap;
    -webkit-flex-wrap: wrap;
    -webkit-justify-content: center;
            justify-content: center;

div[class^=col-] 
  float: none;  
  display: inline-block;
  vertical-align: top;

在 Chrome、Firefox 和 Android 上

在 Safari 和 iOS 上

JSFIDDLE

有什么我应该添加到列中以使它们出现在一行中。

【问题讨论】:

【参考方案1】:

.row 中的pseudo-element 导致了问题。

这是因为 Safari 浏览器处理 :before:after 伪元素,就好像它们是真实元素一样。

试试

 .row:before, .row:after
      display: none;
    

或者更好地创建一个类,比如 .flex-row 并执行此操作

<div class="row flex-row">
  contents here..
</div>


.flex-row
     display: flex;
    display: -webkit-flex; 
    flex-wrap:wrap;
    -webkit-flex-wrap: wrap;
    -webkit-justify-content: center;
            justify-content: center;

.flex-row:before, .flex-row:after
   display: none;

FIDDLE

【讨论】:

非常感谢您提供的信息。这解决了这个问题。祝你有美好的一天 欢迎朋友,我在开始使用 flex 时遇到了同样的问题。美好的一天:) 你好基努。您是否有任何解决方案可以在不使用 flexbox 的情况下使引导列居中?我正在使用 Modernizr 来检测是否不支持 flexbox 并将元素浮动到左侧。但我也希望将它集中在不支持 flexbox 的浏览器上。 @KiranDash 看看这篇很棒的文章scotch.io/bar-talk/… 非常感谢您的网址。【参考方案2】:

如果有人仍然找不到解决方案,我遇到了一个问题,我的列在 Safari 中太高了:

为了解决这个问题,我简单地添加了这个 CSS 选择器(我知道 !important 不是最佳实践,但我尝试了几种解决方案并最终找到了这个):

.d-flex 
    display: block !important;

现在,我的专栏看起来像这样,这就是它最初在 Chrome、Firefox 等中的样子:

【讨论】:

display: block 使弹性元素成为块元素。因此,如果您不想使用 flexbox,请一开始就不要使用它们。

以上是关于带有 flexbox 的引导列在 iOS 和 Safari 上的宽度不合适的主要内容,如果未能解决你的问题,请参考以下文章

引导列在 Firefox 中未正确显示

Flexbox 100% 高度问题

每3列在引导程序中循环行

带有引导选择的 FormValidation.io

Bootstrap flexbox,2 行,1 列布局和对齐内容

使用 vuetify、flexbox 和列表进行自动换行