« Forum zum Forum  |

·gelöst· Dark Mode CSS kommt zu spät

Teilen: facebook    whatsapp    email
 1  2  3 
  •  christoph1703
30.4. - 18.9.2024
55 Antworten | 12 Autoren 55
55
Hallo @­energiesparhaus,

zuerst mal ein fettes DANKE dafür, dass ihr diese Plattform zur Verfügung stellt!

Mir ist aufgefallen, dass ihr das CSS für den Dark Mode erst im JS ladet. Das führt dazu, dass bei jedem Seitenaufruf zuerst alles hell gerendert wird und erst später auf dunkel umgeschaltet wird. Das ist gerade am Abend unangenehm, wenn man bei fast jedem Seitenwechsel von einem Lichtblitz geblendet wird.

Könnt ihr da vielleicht was machen und das dunkle CSS ins Haupt-CSS integrieren? Vielleicht sogar mit dem prefers-color-scheme media query?

  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
2.5.2024  (#21)
Ja so ist es jetzt eh wieder. Mit dem Schönheitsfehler, dass ein Cookie ausgelesen werden muss, und dass das eben diese Zeitverzögerung mit sich bringt, die fallweise zum Aufblitzen der weißen Seite führt. Wir werden das serverseitig lösen.

1
  •  christoph1703
2.5.2024  (#22)

zitat..
purrtastic schrieb: Dann wär mMn aus Usersicht die Optionen: default (nimmt perfers-color-scheme), override light, override dark zu bevorzugen.

Sinngemäß funktioniert es eh schon so, nur die Implementierung ist scheinbar nicht so einfach. Man kann media queries nicht overriden, also muss man auf jeden Fall mit JS direkt das CSS manipulieren. Und das halt im Idealfall so, dass man nichts nachladen muss und das JS auch schon im HTML embedded. Ob man dann noch die media queries einbaut oder gleich alles selber macht, ist glaub ich schon fast egal.

Bezüglich Reihenfolge hast du natürlich Recht, da hatte ich einen Denkfehler.


1
  •  christoph1703
2.5.2024  (#23)
@­energiesparhaus das Problem ist nicht das Cookie, sondern dass zwei zusätzliche sequentielle Requests passieren. Zuerst wird das JS geladen, dann ausgeführt, dann aus dem JS noch das CSS. Da kann man schön zuschauen, wenn man im Browser eine langsame Verbindung simuliert.
Serverseitige Lösung finde ich super, das Cookie ist ja schon da 🙂

1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
2.5.2024  (#24)
@­christoph1703 : und serverseitig ist es auch wieder nicht einfach weil der Server nicht weiß ob der User im Browser prefers-color-scheme (bzw. halt die Auswahl des Betriebssystems verwenden will) gewählt hat. Diese Eigenschaft ist serverseitig nicht bekannt, somit muss erst recht wieder über JS abgefragt werden. Ideen werden gerne angenommen...

1
  •  christoph1703
2.5.2024  (#25)
Eigentlich müsste der Server das schon mitbekommen. Die Einstellung wird ja als Cookie gespeichert und Cookies werden mit jedem Request vom Browser an den Server mitgeschickt. Was für ein Backend habt ihr denn in Verwendung?

1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
2.5.2024  (#26)
Die Präfernz des Users wird als Cookie gespeichert, die Systemeinstellung kennen wir nicht. Evtl. müssen wir da über die Logik noch nachdenken.

1
  •  purrtastic
  •   Bronze-Award
2.5.2024  (#27)

zitat..
energiesparhaus schrieb:

Die Präfernz des Users wird als Cookie gespeichert, die Systemeinstellung kennen wir nicht. Evtl. müssen wir da über die Logik noch nachdenken.

Der Server bekommt prinzipiell das Cookie sehr wohl mit dem Request vom Browser mitgeschickt. Kann also sehr wohl im Reply den entsprechenden Link von unterschiedliche CSS Varianten im Header auswählen. Kein Clientseitiges Javascript nötig. Weiß natürlich nicht wie euer System tickt aber mit node.js könnte ich sowas programmieren.


1
  •  christoph1703
2.5.2024  (#28)
Die high-level Logik wäre dann:
- Cookie sagt hell: helles CSS
- Cookie sagt dunkel: dunkles CSS
- Cookie sagt System: CSS mit prefers-color-scheme
- kein Cookie (neues Gerät): auch CSS mit prefers-color-scheme

Wie @­purrtastic schon gesagt hat, wir helfen gern.

1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
2.5.2024  (#29)
Ja der Server kann natürlich das Cookie auslesen, nur nicht die Systemeinstellung am Handy. Deshalb müssen wir sa noch etwas nachdenken. 
@­christoph1703 : Über Dark Mode trauen wir uns ohne dezidierte Auswahl vom User nicht drüber. Ansonsten ist das eh die aktuelle Logik. Nur halt nicht optimal umgesetzt wg. Skript am Client. 


1
  •  Solarbuddys
  •   Gold-Award
2.5.2024  (#30)
Juhuuuuu normale Ansicht 
Bei uns auch alles Darkmode , Hsndy im permanenten Nightshiftmodus, aber Forumsseite geht nur im Light Mode angenehm 😀😀

1
  •  christoph1703
2.5.2024  (#31)
@­energiesparhaus ich glaube wir reden aneinander vorbei. Die Auswahl in den Benutzereinstellung soll nicht verschwinden. Das war wohl ein Missverständnis von Beginn an, weil mir da noch nicht bewusst war, dass man media queries nicht overriden kann. Die clientseitige Implementierung bis zum Setzen des Cookies braucht keine Änderung.
Nur serverseitig könnte man optimieren wie folgt:
Cookie aus dem Request auslesen - dabei können die Werte "light", "dark" und "system" rauskommen. Für jede der drei Optionen gibt es dann ein eigenes CSS. Die für "light" und "dark" sind selbsterklärend - jeweils das entsprechende Theme. Das für "system" enthält beide Themes (da der Server ja die Systemeinstellung des Clients nicht kennt) und schaltet mit prefers-color-scheme dazwischen um.


1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
2.5.2024  (#32)
Ja das ist genau das was es brauchen würde.
Jetzt haben wir noch das kleine Problem dass wir einen Haufen statischer HTML-Seiten haben wo wir serverseitig gar keinen dynamischen Code ausliefern.
Weiß jemand was man am IIS umstellen muss damit htm auch durch den compiler laufen wie cshtml? Handler-Zuordnung adaptieren bringt die Fehlermeldung

2024/20240502527776.png

1
  •  christoph1703
2.5.2024  (#33)
Ui, von IIS hab ich leider gar keinen Plan. Wärs vielleicht eine Option, das in den Handler fürs CSS zu integrieren? Dann müssten die statischen Seiten gar nichts davon mitkriegen - also im HTML würde immer das gleiche CSS referenziert werden und der Server liefert dann unter diesem Pfad eine dynamische Antwort.

1
  •  christoph1703
2.5.2024  (#34)
Schuss ins Blaue: Was passiert, wenn man die Files auf cshtml umbenennt?

In dem Fall wäre die Lösung mit dem dynamischen CSS Handler aber eleganter, dann müsste man nicht den gleichen Code auf X Seiten duplizieren.

1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
3.5.2024  (#35)
Umbenennen wäre möglich aber schlecht für SEO. Man müsste umbenennen und die alten URLs per url_rewrite umbiegen. Ginge schon, eleganter wärs wohl anders.

1
  •  christoph1703
3.5.2024  (#36)
Ja, das spricht dann mehr für die Lösung mit dem dynamischen CSS Handler.

1
  •  purrtastic
  •   Bronze-Award
15.5.2024  (#37)
Weil ich gerade vor einem ähnlichen Problem stehe und bei die User auch light oder dark pro Gerät in Seiteneigenen Settings überschreiben können sollen. Bei mir ist das in localStorage und daher auch erst aktiv wenn js zum laufen beginnt.

Aber ich finde es total okay, im Ladevorgange CSS prefers-color-scheme zu verwenden und erst dann evt. einen User override aktiv zu machen. Wer z.B: an einem OLED-Gerät sitzt wo light mode wirklich unangenhm hell sein kann, der soll halt das einstellen, bzw. wird sich kaum über aufblitzen beschwerden, wenn er sonst einen light mode als default hat.

Wobei dazu zu sagen ist, für meine Seite gilt das nur beim ersten Aufruf, bewegungen in der Seite sind über pseudo history und dynamisches js fetching..

1
  •  christoph1703
15.5.2024  (#38)
Ja, grundsätzlich spricht nicht viel dagegen, die finale Einstellung im JS zu machen. Das sollte halt besser ohne zusätzliche Requests zum Server gehen, dann ist das Aufblitzen ziemlich sicher auch kein Thema. So wie es jetzt umgesetzt ist, habe ich 2x 23 ms Netzwerklatenz bis das dunkle CSS da ist, plus die Zeit die der Browser braucht um das Ganze auszuführen.
Ich habs jetzt für mich mit einem Proxy gelöst, der mir das CSS ersetzt. Bookmarks geändert und passt 😉

1
  •  christoph1703
19.5.2024  (#39)
Die serverseitige Umschaltung funktioniert! Vielen Dank dafür @­energiesparhaus !

Ich hätte noch zwei Verbesserungsvorschläge:

In /ressources/tinymce/skins/ui/oxide/content.min.css die Textfarbe von schwarz auf weiß ändern:
@media (prefers-color-scheme: dark) {
  .mce-content-body {
    color: #c0c0c0 !important;
  }
}
Und an dark.css hab ich auch noch ein paar rudimentäre Anpassungen gemacht: https://gist.github.com/typerat/ad8aa896a2e48fd04d965c713ad6c594
Ein bisschen mehr Liebe schadet sicher nicht, aber so ist es größtenteils schon sehr gut verwendbar 🙂

1
  •  energiesparhaus
  •   Dieses Logo kennzeichnet einen Beitrag des energiesparhaus.at-Teams
19.5.2024  (#40)
Schauen wir uns an, danke.
Allerdings können wir in die tinymce-skin das nicht direkt eintragen sonst greift die Einstellung nicht mehr wenn jemand die Systemeinstellungen überschreiben will (heißt laut persönlichen Einstellungen immer light mode haben will)

1
  •  christoph1703
19.5.2024  (#41)

zitat..
energiesparhaus schrieb: Allerdings können wir in die tinymce-skin das nicht direkt eintragen sonst greift die Einstellung nicht mehr wenn jemand die Systemeinstellungen überschreiben will

Richtig, das habe ich jetzt nicht bedacht. Eigentlich müsste man das aber auch im dark.css einbauen können, oder? Dem Browser ist es ja egal, aus welcher Datei die Regel kommt (solange die Reihenfolge stimmt).

1


Beitrag schreiben oder Werbung ausblenden?
Einloggen

 Kostenlos registrieren [Mehr Infos]


next