La dernière colonne de la première ligne est renvoyée à la ligne suivante lors de l'affichage dans Safari et certains autres navigateurs basés sur iOS.
Safari:
Chrome/Autres:
Code:
.flexthis {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.flexthis .col-md-4 {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
<div class="row flexthis">
<div class="col-md-4 col-sm-6 text-center">
<div class="product">
<img src="img.jpg" alt="" class="img-responsive">
<h3>Name</h3>
<p>Description</p>
</div>
</div>
</div>
Juste pour mettre à jour ma question
C’est la solution à laquelle je vais, ceci est évidemment résolu pour Bootstrap4, qui est compatible avec flexbox. Donc, cela ne concerne que bootstrap3.
.row.flexthis:after, .row.flexthis:before{
display: none;
}
Explication
Cela est dû au fait que Safari traite les pseudo-éléments avant et: après comme s'il s'agissait d'éléments réels. Par exemple. Pensez à un conteneur de 7 objets. Si le conteneur a: avant et: après, Safari positionnera les éléments comme suit:
[:before ] [1st-item] [2nd-item]
[3rd-item] [4th-item] [5th-item]
[6th-item] [7th-item] [:after ]
Solution
En guise d'alternative à la réponse acceptée, je supprime: before &: after des conteneurs flex au lieu de modifier le code HTML. Dans ton cas:
.flexthis.container:before,
.flexthis.container:after,
.flexthis.row:before,
.flexthis.row:after {
content: normal; // IE doesn't support `initial`
}
Je sais que le problème est assez ancien, mais je l’ai rencontré aujourd’hui et j’ai perdu plus de 12 heures à le régler. Environ 10 heures de cela ont été consacrées à réaliser que safari échouait avec une grille de démarrage à 12 colonnes, et ce n’est pas un autre problème.
La solution que j'ai faite est plutôt simple. Voici la version pour Visual Composer. Les noms de classe peuvent varier pour d'autres cadres.
.vc_row-flex:before, .vc_row-flex:after{
width: 0;
}
Je ne voulais pas ajouter plus de classes pour résoudre ce type de bogue, alors vous pouvez également réparer la classe .row.
.row {
&:before {
content: none;
}
&:after {
content: '';
}
}
Nous avons trouvé ce problème en essayant de créer une grille simple en utilisant Bootstrap pour le TwentyThree CMS, et nous avons eu le même bug dans Safari. Quoi qu'il en soit, cela a résolu pour moi:
.flex-container:before {
display: inline;
}
Bootstrap 4 a des problèmes avec display: block; Cette propriété est définie à partir de CSS ou de JavaScript sur la classe .row. J'ai imaginé une solution pour cela Créez simplement une classe comme:
.display-block {
display: -webkit-box !important;
display: -ms-flexbox !important;
display: flex !important;
-ms-flex-wrap: wrap !important;
flex-wrap: wrap !important;
}
Et appliquez ensuite cette classe lorsque vous souhaitez afficher la ligne.
J'ai pu le réparer en ajoutant
.row:before, .row:after {
display: flex !important;
}
Évidemment, ce n'est pas la solution la plus élégante, mais cela peut fonctionner pour certains jusqu'à ce qu'ils la réparent.
J'ai eu le même problème et la réponse a été que Flex Box sur Safari ne semble pas aimer que les flotteurs soient effacés sur le même div que display: flex.
.row:before, .row:after {
content:'';
display:block;
width:100%;
height:0;
}
.row:after {
clear:both;
}
J'ai également passé quelques heures à ce sujet. Dans mon cas, j’ai inséré flexbox dans un projet existant pour que tous les éléments de la variable row
aient la même hauteur. Tous les navigateurs, à l'exception de Safari, l'ont rendu correctement, mais aucune des réponses ci-dessus n'a semblé résoudre mon problème.
Jusqu'à ce que je découvre qu'il y avait toujours un Bootstrap
clearfix
hack utilisé: (Le code provient d'un projet laravel , mais Bootstrap générique sinon)
@foreach ($articles as $key => $article)
@if ($key % 3 === 0)
<div class="clearfix hidden-xs hidden-sm"></div>
@endif
@if ($key % 2 === 0)
<div class="clearfix hidden-lg hidden-md"></div>
@endif
etc...
@endforeach
Apparemment, d'autres navigateurs que Safari ignorent le .clearfix
d'une manière ou d'une autre lorsque la flexbox est utilisée.
Ainsi, lorsque vous utilisez flexbox sur vos colonnes, vous n'avez plus besoin d'utiliser le clearfix de Bootstrap.