Ich folge einem kleinen Teil meines Codes. Ich frage mich nur, warum die "iPhone" -Zelle nur vom iPhone flackert. PS. Ich kann keine Tabelle oder Liste für die Struktur verwenden. Ich habe es auch versucht transform: translate3d(0,0,0);
.
Grundsätzlich muss die erste Zelle sowohl für Links als auch für Oben auf iPhone und iPad klebrig sein. Ich möchte das nur mit HTML und CSS machen.
WICHTIG
Bitte antworten Sie nicht mit festen Lösungen, ich weiß nicht, wo der Tisch im Körper platziert wird. Es wird einen Header, einige Inhalte usw. usw. geben.
.table {
width: 2000px;
position: relative;
}
.tr {
overflow: visible;
display: block;
white-space: nowrap;
font-size: 0;
}
.tc {
border: 1px solid #DDD;
display: inline-block;
width: 100px;
height: 100px;
text-align: center;
font-size: 12px;
}
.trh {
background: #000;
color: #FFF;
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1;
}
.tc.first {
background: #000;
color: #FFF;
position: -webkit-sticky;
position: sticky;
left: 0;
}
<div class="table">
<div class="tr trh">
<div class="tc first">Iphone</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">2</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
</div>
Antworten:
Ich kämpfe die ganze Zeit mit iOS gegen alles andere. Es geht normalerweise darum, Kontextprobleme zu stapeln. Es scheint mir, dass das Element
position: sticky
und unterleft: 0
iOS relativ zu dieser ersten Zeile wird. iOS behandelt den Stapelkontext nicht wie alle anderen Browser.Ich habe nie wirklich genau herausgefunden, was dies verursacht. Technisch gesehen bleibt Ihre iPhone-Zelle auch beim Scrollen links hängen, da sie relativ zu der übergeordneten Zelle ist, die keine hat
left: 0
. Ich gehe davon aus, dass dies damit zu tun hat, wie iOS damit umgehtposition: sticky
. Sticky beginnt relativ und wechselt dann zu fest. Alle anderen Browser an diesem Punkt würden dazu führen, dass es links bleibt. Sie haben einposition: sticky;
Element in einemposition: sticky;
Element. Das ist ein neuer Stapelkontext. Ich glaube, iOS macht es an seinem Elternteil fixiert und nicht so, wie Sie es erwarten würden. Da hat die übergeordnete Zeile nichtleft: 0
es wird mit allem anderen scrollen. Ich hoffe das hilft. Ich sah kein Flackern, aber ich hatte ein paar kaputte Komponenten im Webframework meines Unternehmens, nachdem iOS 13 herauskam, das Scrollen und Stapeln von Kontexten beinhaltete. Ich würde auf mehreren iOS-Geräten testen.Ich bin mir sicher, dass es sich um ein Problem mit dem Stapelkontext handelt, nachdem ich noch ein bisschen damit herumgespielt habe. Ich habe den Z-Index nur auf der iPhone-Zelle auf 1000 eingestellt, und die Zeilen darunter stehen NOCH darüber.
Wenn Sie den Internet Explorer nicht unterstützen müssen, würde ich CSS-Raster verwenden, um dieses Layout zu erreichen. Dann müssen Sie sich keine Sorgen machen
position: sticky
https://css-tricks.com/snippets/css/complete-guide-grid/
https://css-tricks.com/using-css-grid-the-right-way/
Ich verwende es für dynamische datenintensive Inhalte in Geschäftsanwendungen, sodass es unglaublich flexibel sein kann, wenn es richtig eingesetzt wird.
Erneut aktualisiert - Wenn Sie das DOM überhaupt nicht ändern können, müssen Sie sich mit dem Flackern befassen, da selbst für die Rasterlösung einige Elemente umbrochen werden müssen. Nur zur Verdeutlichung ... Bei einer Rasterlösung müssen Sie NICHT wissen, wie viele Spalten oder Zeilen Sie haben werden. Sie scheinen in diesem Aspekt aufgehängt zu sein. Rasterbereiche erstellen auch einen neuen Stapelkontext und machen alles relativ zum Rasterbereich, in dem es sich befindet, während flexible Einheiten zugelassen werden. Ich kann Ihnen keine Antwort geben, bis Sie zeigen, wie Ihre dynamischen Daten eingehen. Wir benötigen mehr Kontext, um Ihnen eine Codelösung zu bieten.
Wieder tritt das Flackern auf, weil Sie ein klebrig positioniertes Element in einem anderen klebrigen Element haben. Das ist nur iOS und wenn Sie es so verwenden möchten, müssen Sie sich nur darum kümmern.
Hier finden Sie eine Dokumentation zum Stapeln von Kontexten und deren Funktionsweise. Wie ich in einem Kommentar sagte, müssen Sie einen anderen Ansatz wählen oder sich einfach damit befassen.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
Ebenfalls --
Verstecken Sie den Überlauf in Ihrem HTML und Body. Legen Sie eine Hülle um den Tisch. Legen Sie
-webkit-overflow-scrolling: auto
die Verpackung auf. Führen Sie es unter iOS 12 aus und Sie werden sehen, dass es nicht flackert. Sie werden jedoch kein Momentum-Scrolling haben. iOS13 hat die Notwendigkeit für das entfernt,-webkit-overflow-scrolling
sodass Sie es nicht einmal überschreiben können. Wenn Sie den Wert vontouch
auf setzen, werden-webkit-overflow-scrolling
Sie jetzt flackern. Führen Sie diesen Code unten aus und Sie werden sehen, dass er nicht flackert. Lange Rede, kurzer Sinn, wie ich schon oft gesagt habe, müssen Sie einen anderen Ansatz finden. Sie können dies jetzt nicht beheben, da iOS13 nicht mehr verfügbar ist und Sie das Momentum-Scrollen sowieso nicht deaktivieren wollten.quelle
Wenn Sie die Elemente neu anordnen, können Sie dies erreichen.
quelle