Ok voici le html:
<div style="height: 200px; position: relative;" id="filterOptionsContainer">
<table id="filterOptionsTable" class="table table-striped table-hover">
</table>
</div>
Fondamentalement, j'ajoute dynamiquement des lignes à la table et je voudrais que le conteneur fasse défiler le débordement. J'ai d'abord essayé l'évidence:
#filterOptionsContainer {
overflow-y: auto;
}
et cela fonctionne bien partout sauf pour Safari sur les appareils mobiles ios.
Depuis lors, j'ai passé des heures à essayer toutes les combinaisons de styles auxquelles je peux penser et à lire, mais je ne peux pas obtenir le défilement de débordement standard. Le plus proche que j'ai obtenu était d'afficher la barre de défilement (elle ne défilait pas en fait cependant).
Toute aide est appréciée. Il m'est difficile de croire qu'il n'est pas possible de faire défiler le contenu d'un div dans un modal dans Safari ...
Edit: Toujours sur cette question. Je dois le résoudre.
J'ai résolu ce problème en passant à une multisélection (et en masquant le div à défilement) sur les appareils mobiles (donc pas de vraie solution). Merci pour toute l'aide à tous.
Edit: J'ai enfin compris cela. Fondamentalement, ce qui s'est passé, c'est qu'après que je suis passé à l'utilisation d'une multisélection, il agissait aussi étrangement dans les appareils IOS lors de l'utilisation de Safari.
En examinant plus en détail un de mes collègues, j'ai remarqué des événements tactiles dojo à la fois sur le div défilable et sur la multisélection (le modèle que j'utilise utilise dojo). J'ai commencé à chercher dans la source du modèle pour comprendre pourquoi ces événements étaient attachés à tous ces éléments et j'ai remarqué un module de dojo appelé "dojo/touch". Après avoir supprimé ce module du projet, les éléments fonctionnent correctement dans Safari.
Le point à retenir est que 'dojo/touch' et IOS Safari sont totalement incompatibles.
Essayez d'appliquer ce en ligne, ou via un script Jquery
style="overflow-y: scroll; -webkit-overflow-scrolling: touch;"
ou via un script Jquery
$("#filterOptionsContainer").css({
"overflow-y": "scroll",
"-webkit-overflow-scrolling": "touch"
});
Je n'ai pas de produit IOS pour vérifier cela, mais il semble que overflow: auto
est un bogue connu de Safari.
Essaye ça:
#filterOptionsContainer {
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
Code pour utiliser deux div imbriqués pour afficher uniquement la barre de défilement verticale.
<!DOCTYPE html>
<html>
<body>
<div class="div1">
<div class="div2">
111111<br>
222222222222222222222<br>
3333333333333333333333333333333333<br>
44444444<br>
55555555555555555555555555555<br>
6666666666666666666666666666<br>
77777777777<br>
88888888888888888888888888<br>
99999999999999999999999<br>
0000000000000000000000000000000<br>
aaaaaaaaaaaaaaaaaa<br>
bbbb<br>
cccccccccccccccc<br>
</div>
</div>
</body>
</html>
<style>
.div1{
overflow:auto;
width:100px;
height:100px;
}
.div2{
overflow:hidden;
width:100%;
}
</style>
Si aucune des solutions ne fonctionne, vous pouvez essayer flex: 1 1; Cela prend en charge plusieurs navigateurs.
vous pouvez essayer ça, ça marche bien pour moi
#filterOptionsContainer {
overflow: auto;
overflow-y: auto;
overflow-x: hidden;
}
Vous pouvez définir overflow-y:hidden;
après le débordement automatique, et en safari au moins cette règle sera appliquée. Réf.
Vérifiez votre version du navigateur Safari. Et correspond aux critères ci-dessous:
si vous êtes contre les conditions, passez aux mesures suivantes:
Appliquer ClearFix
.clearfix:after {visibility: hidden;}
Raison: Le réglage du débordement n'efface pas le flotteur de l'élément
OU
Définissez la position de l'élément relatif au niveau racine/corps comme ceci:
body { position:relative; overflow-x:hidden; }
Remarque: Appliquez un seul d'entre eux.
Merci et bravo