Jim Halls Antwort ist vorzuziehen, weil sie zwar nicht bis zum Ende scrollt, wenn nach oben gescrollt wird, aber auch rein mit CSS funktioniert.
Sehr bedauerlicherweise ist dies jedoch keine stabile Lösung: In Chrome (möglicherweise aufgrund des von dotnetCarpenter beschriebenen 1-Pixel-Problems) verhält sich scrollTop
ungenau um 1 Pixel, selbst ohne Benutzerinteraktion (beim Hinzufügen von Elementen). Sie können scrollTop = scrollHeight - clientHeight
setzen, aber das wird das
in Position halten, wenn ein weiteres Element hinzugefügt wird, d.h. die Funktion "am unteren Rand bleiben" funktioniert nicht mehr.
Also, kurz gesagt, das Hinzufügen einer kleinen Menge an Javascript (seufz) wird dies beheben und alle Anforderungen erfüllen:
So etwas wie https://codepen.io/anon/pen/pdrLEZ (Beispiel von Coo) und nach dem Hinzufügen eines Elements zur Liste auch das Folgende:
container = ...
if(container.scrollHeight - container.clientHeight - container.scrollTop <= 29) {
container.scrollTop = container.scrollHeight - container.clientHeight;
}
wo 29 die Höhe einer Zeile ist.
Also, wenn der Benutzer sich um die Hälfte einer Zeile nach oben scrollt (falls dies überhaupt möglich ist?), wird das Javascript dies ignorieren und zum Ende scrollen. Aber ich denke, dies ist vernachlässigbar. Außerdem behebt es das Chrome 1-Pixel-Problem.