So erhalten Sie die Bildlaufleiste mit CSS-Überlauf unter iOS

81

Entwickeln einer iPad-Website Ich habe versucht, die CSS-Eigenschaft overflow: autozu verwenden, um die Bildlaufleisten bei Bedarf in einem zu erhalten div, aber mein Gerät weigert sich, sie anzuzeigen, selbst wenn der Bildlauf mit zwei Fingern funktioniert.

Ich habe es mit versucht

overflow: auto;

und

overflow: scroll;

und das Ergebnis ist das gleiche.

Ich teste nur auf einem iPad (auf Desktop-Browsern funktioniert einwandfrei).

Irgendwelche Ideen?

mat_jack1
quelle
1
Mein Problem ist hier sehr gut beschrieben: webmanwalking.org/library/experiments/…
mat_jack1

Antworten:

115

Bearbeiten Sie nach dem Kommentar von kritzikratzi :

[Beginnend] mit ios 5beta kann eine neue Eigenschaft -webkit-overflow-scrolling: touchhinzugefügt werden, die zum erwarteten Verhalten führen sollte.

Einige, aber sehr wenig weiterführende Literatur:


Ursprüngliche Antwort für die Nachwelt.

Leider erzeugt keiner overflow: autooder scrollauf den iOS-Geräten Bildlaufleisten, anscheinend aufgrund der Bildschirmbreite, die für solche nützlichen Mechanismen benötigt würde.

Wie Sie festgestellt haben, müssen Benutzer stattdessen das overflowWischen mit zwei Fingern ausführen, um durch den Inhalt von -ed zu scrollen . Die einzige Referenz, da ich das Handbuch für das Telefon selbst nicht finden kann, ist hier: tuaw.com: iPhone 101: Scrollen mit zwei Fingern .

Die einzige Lösung, die ich mir vorstellen kann, ist, wenn Sie möglicherweise JavaScript und möglicherweise jQTouch verwenden könnten, um Ihre eigenen Bildlaufleisten für overflowElemente zu erstellen . Alternativ können Sie @ media-Abfragen verwenden , um den overflowInhalt zu entfernen und vollständig anzuzeigen. Als iPhone-Benutzer erhält dies meine Stimme, schon allein aus Gründen der Einfachheit. Zum Beispiel:

<link rel="stylesheet" href="handheld.css" media="only screen and (max-device width:480px)" />

Der vorhergehende Code stammt aus A List Apart , aus demselben Artikel, auf den oben verwiesen wurde (ich bin mir nicht sicher, warum sie von dem übrig geblieben sind type="text/css", aber ich gehe davon aus, dass es Gründe gibt.

David sagt, Monica wieder einsetzen
quelle
das ist sehr nützlich! Es gibt also keine CSS-Möglichkeiten, um dies zu erreichen?
mat_jack1
Leider nicht, alle Variationen von CSS, die Bildlaufleisten auf Seitenelemente anwenden könnten, sind leider verboten . Die einzigen Optionen sind: 1 Verwenden Sie JavaScript zum Emulieren (was eine native Funktion sein sollte) oder vorzugsweise 2 Verwenden Sie die @ media-Abfragen, um mobile spezifische Stylesheets zu erstellen, die das Scrollen von Elementen überflüssig machen.
David sagt, Monica
13
Beginnend mit ios 5beta wird eine neue Eigenschaft -webkit-overflow-scrolling: touch hinzugefügt, die zum erwarteten Verhalten führen sollte.
kritzikratzi
@kritzikratzi: Danke für das Update! Ich hatte bis jetzt nichts davon gehört; interessanter Fund :)
David sagt, Monica
2
Sehr interessante Lösung .... leider ist mit dieser Methode die Bildlaufleiste nur während des Bildlaufs sichtbar und nicht immer .....
Luca Detomi
20

Wenden Sie diesen Code in Ihrem CSS an

::-webkit-scrollbar{

    -webkit-appearance: none;
    width: 7px;

}

::-webkit-scrollbar-thumb {

    border-radius: 4px;
    background-color: rgba(0,0,0,.5); 
    -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
}
Prafull
quelle
1
Dies funktionierte perfekt im IPAD-Simulator von Chrome. Ich habe es noch nicht auf einem tatsächlichen IPAD ausprobiert, aber Daumen drücken, danke!
user2808054
19

Ich habe einige Tests durchgeführt und CSS3 verwendet, um die Bildlaufleisten neu zu definieren. Sie können Ihr Overflow:scroll;oder behaltenOverflow:auto

Am Ende hatte ich so etwas ...

::-webkit-scrollbar {
    width: 15px;
    height: 15px;
    border-bottom: 1px solid #eee; 
    border-top: 1px solid #eee;
}
::-webkit-scrollbar-thumb {
    border-radius: 8px;
    background-color: #C3C3C3;
    border: 2px solid #eee;
}

::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.2); 
} 

Der einzige Nachteil, den ich noch nicht herausfinden konnte, ist die Interaktion mit den Bildlaufleisten auf iProducts, aber Sie können mit dem Inhalt interagieren, um ihn zu scrollen

Vex_man
quelle
Auch diese Bildlaufleiste befindet sich nicht über dem Inhalt, sondern wie in Fenstern, in denen sie ihren eigenen Platz einnimmt (verschiebt den Inhalt nach links). oder irgendwelche Ideen, um das zu vermeiden?
Hans
Für die Aufzeichnung ::-webkit-scrollbarfunktioniert nicht für iPhone 4 / iOS 7.
Lulalala
6

Lösung von Chris Barr hier gegeben

function isTouchDevice(){
    try{
        document.createEvent("TouchEvent");
        return true;
    }catch(e){
        return false;
    }
}

function touchScroll(id){
    if(isTouchDevice()){ //if touch events exist...
        var el=document.getElementById(id);
        var scrollStartPos=0;

        document.getElementById(id).addEventListener("touchstart", function(event) {
            scrollStartPos=this.scrollTop+event.touches[0].pageY;
            event.preventDefault();
        },false);

        document.getElementById(id).addEventListener("touchmove", function(event) {
            this.scrollTop=scrollStartPos-event.touches[0].pageY;
            event.preventDefault();
        },false);
    }
}

Funktioniert gut für mich. Entfernen Sie event.preventDefault, wenn Sie einige Klicks benötigen ...

mikmikmik
quelle
2

Die iScroll4- Javascript-Bibliothek wird das Problem beheben. Es gibt eine hideScrollbarMethode, die Sie festlegen können, um falsezu verhindern, dass die Bildlaufleiste verschwindet.

Dan Gayle
quelle
2

Andere 2 Leute auf SO schlugen eine mögliche Nur-CSS-Lösung für das Problem vor. Die Lösung von David Thomas ist perfekt, hat jedoch die Grenze, dass die Bildlaufleiste nur während des Bildlaufs sichtbar ist.

Damit Bildlaufleisten immer sichtbar sind, können Sie die Richtlinien befolgen, die auf den folgenden Links vorgeschlagen werden:

Luca Detomi
quelle
2

Stellen Sie sicher, dass Ihr Körper und Ihre Divs keine haben

  position:fixed

sonst würde es nicht funktionieren

Matoeil
quelle
1

Nach meiner Erfahrung müssen Sie sicherstellen, dass das Element display:block;für die Funktion angewendet wurde -webkit-overflow-scrolling:touch;.

Camslice
quelle
1
es funktioniert nicht für mich .. chorme sagt, dass -webkit-overflow-scrolling: touch; ist ungültig
Victor Hugo Arango A.
1

Funktioniert gut für mich, bitte versuchen Sie:

.scroll-container {
  max-height: 250px;
  overflow: auto;
  -webkit-overflow-scrolling: touch;
}
Himmel Yip
quelle
1
::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

::-webkit-scrollbar-thumb {
    border-radius: 8px;
    background-color: #C3C3C3;
    border: 2px solid #eee;
}

Verwenden Sie diesen Code, es funktioniert in ios / android APP Webview; Es löscht einige nicht tragbare CSS-Codes;

junfeng_feng
quelle
0

Wenn Sie versuchen, horizontales divScrollen mit Touch auf Mobilgeräten zu erreichen, funktioniert der aktualisierte CSS-Fix nicht (getestet auf mehreren Versionen von Android Chrome und iOS Safari), z.

-webkit-overflow-scrolling: touch

Ich habe eine Lösung gefunden und sie für das horizontale Scrollen vor dem CSS-Trick geändert. Ich habe es auf Android Chrome und iOS Safari getestet und die Listener-Touch-Ereignisse gibt es schon lange, daher wird es gut unterstützt: http://caniuse.com/#feat=touch .

Verwendung:

touchHorizScroll('divIDtoScroll');

Funktionen:

function touchHorizScroll(id){
    if(isTouchDevice()){ //if touch events exist...
        var el=document.getElementById(id);
        var scrollStartPos=0;

        document.getElementById(id).addEventListener("touchstart", function(event) {
            scrollStartPos=this.scrollLeft+event.touches[0].pageX;              
        },false);

        document.getElementById(id).addEventListener("touchmove", function(event) {
            this.scrollLeft=scrollStartPos-event.touches[0].pageX;              
        },false);
    }
}
function isTouchDevice(){
    try{
        document.createEvent("TouchEvent");
        return true;
    }catch(e){
        return false;
    }
}  

Modifiziert von der vertikalen Lösung (Pre-CSS-Trick):

http://chris-barr.com/2010/05/scrolling_a_overflowauto_element_on_a_touch_screen_device/

Steve Seeger
quelle