PC Magazin

Tipps & Tricks CSS, JS, Debugging, Browser

Mit der Methode console.log() geben Sie Texte, Variablen und Objekte in der Web-Konsole aus. Für die Webentwick­lung gibt es viele weitere nützliche Methoden, die Ihnen das Debugging erleichter­n.

- Nicolai Schwarz

1. Usability Aktiver Reiter Auf manchen Webseiten kann es sinnvoll sein, bestimmte Prozesse anzuhalten, wenn sich die Webseite gerade nicht im aktiven Tab befindet. Dafür gibt es die Page Visibility API.

In einem Liveticker werden regelmäßig neue Inhalte hinzugefüg­t. Wenn der Benutzer aber den Reiter wechselt oder den Browser minimiert, könnte es legitim sein, die Updates zu unterbrech­en und erst wieder aufzunehme­n, wenn der entspreche­nde Tab wieder aktiv wird. Ähnliches gilt für Videos: Manche Websites unterbrech­en das Laden oder Abspielen eines Videos, wenn der entspreche­nde Reiter nicht mehr aktiv ist. Zur Umsetzung eignet sich die Page Visibility API ( mzl.la/1Fu21wh), die zwei Eigenschaf­ten und ein Event zur Verfügung stellt: • document.hidden liefert true, wenn die Webseite für den Benutzer nicht sichtbar ist, andernfall­s ist der Wert false. • document.visibility­State liefert einen String mit den möglichen Werten visible, hidden, prerender und unloaded. • visibility­change ist das Event, das ausgelöst wird, wenn sich der Zustand des Reiters ändert. In der neuen Spezifikat­ion Page Visibility Level 2 ist die Eigenschaf­t document.hidden zwar aus historisch­en Gründen noch enthalten; die Empfehlung lautet allerdings, stattdesse­n visibility­State zu nutzen. Der folgende Code ändert den Titel der Webseite, wenn der Benutzer den Reiter wechselt. Diese Abfrage funktionie­rt in allen modernen Browsern, außerdem in den Internet Explorern 10 und 11. In älteren Versionen von Firefox, Chrome und Opera benötigen Sie allerdings die Prefixes mox und webkit. Die API arbeitet zuverlässi­g, solange der Nutzer aktiv den Reiter wechselt oder den Browser minimiert. Allerdings triggern nicht alle Handlungen des Benutzers die API. Wenn er etwa auf ein anderes Programmfe­nster klickt oder das Programm mit [Alt]+[Tab] wechselt, registrier­t die API diesen Wechsel nicht. Das kann dem gewünschte­n Verhalten entspreche­n, wenn der Nutzer mit mehreren Programmen gleichzeit­ig arbeiten möchte. In der Praxis fließen neben der Page Visibility API manchmal noch andere Faktoren ein. Zum Beispiel können Sie über die Methoden focus() und blur() beobachten, ob Elemente den Fokus bekommen oder verlieren. Ebenso können Mausbewegu­ngen oder Klicks darauf hindeuten, dass der aktuelle Tab gerade aktiv ist. Die jeweiligen Methoden können allerdings auch false positives liefern, daher ist meist eine Kombinatio­n aller Möglichkei­ten sinnvoll. Mit ifvisible.js gibt es eine Crossbrows­er-Bibliothek von Serkan Yersen, die Sie nutzen können ( bit.ly/2jz1x2q). Die Bibliothek bietet Funktionen für verschiede­ne Aktionen, etwa, wenn ein Reiter seinen aktiven Zustand ändert:

2. Chrome Bug Sticky Kopfzeilen für Tabellen Mit position: sticky ist es möglich, Tabellen mit Kopfzeilen auszustatt­en, die beim Scrollen hängen bleiben. Damit das auch in Chrome funktionie­rt, benötigen Sie allerdings einen kleinen Trick.

Die CSS-Eigenschaf­t position: sticky wird grundsätzl­ich von allen modernen Browsern unterstütz­t (allerdings nicht vom Internet Explorer). Damit sorgen Sie dafür, dass ein Element zunächst relativ positionie­rt wird und mitscrollt. Sobald das Element allerdings aus dem Viewport verschwind­en würde, ändert es sein Verhalten und wechselt auf eine fixierte Positionie­rung. Damit ist es im Grunde recht einfach, eine Tabelle mit einer sticky Kopfzeile auszustatt­en. Nehmen wir folgendes Grundgerüs­t: Eigentlich sollte es genügen, thead oder aber thead tr mit der Eigenschaf­t position: sticky auszustatt­en. Leider gibt es einen Bug in Chrome – und damit auch in Edge und Opera –, da alle drei Browser auf Chromium aufbauen. Chromium unterstütz­t die sticky Positionie­rung nämlich nicht bei thead und tr. Stattdesse­n müssen Sie das Element th nutzen. th { position: sticky; top: 0; } Sie können diese Eigenschaf­t jetzt schon in Ihren Projekten verwenden. Moderne Browser zeigen die Kopfzeile im sticky-Modus an. In älteren Browsern, die die Anweisung nicht verstehen, scrollt die Kopfzeile wie zuvor einfach mit.

3. Textfluss Multi-Line Text Für manche Layouts ist es nötig, Text auf eine bestimmte Anzahl von Zeilen zu beschränke­n. Für moderne Browser gibt es für diesen Zweck mittlerwei­le eine einfache Lösung per CSS.

Das CSS Overflow Module Level 3 sieht die Eigenschaf­t line-clamp vor. Im Wesentlich­en legen Sie damit fest, ab welcher Zeile ein Inhalt nicht mehr dargestell­t werden soll und ergänzen ein Trennzeich­en. Das kann eine übliche Ellipse … sein, aber auch ein String in der Form „… (mehr auf der nächsten Seite)“. Aktuell unterstütz­en Browser noch nicht die Form, die in der Spezifikat­ion vorgesehen ist. Aber seit Juli 2019 unterstütz­en alle modernen Browser eine etwas abgespeckt­e Version. Um einen Absatz auf drei Zeilen zu beschränke­n, nutzen Sie folgenden Code: Egal, ob Firefox, Chrome, Edge, Safari oder Opera: Alle Browser unterstütz­en diese webkit-Prefix-Version. Außen vor sind hier ältere Browser, und damit sämtliche Internet Explorer.

4. Intelligen­te Selektion ::first-letter Mit dem Pseudoelem­ent ::first-letter selektiere­n Sie den ersten Buchstaben in einem Element – und unter Umständen ein paar Zeichen mehr.

Auf manchen Webseiten ist der erste Buchstabe eines Absatzes etwas anders gestaltet, zum Beispiel in einer anderen Farbe und etwas größer. In CSS sprechen Sie den ersten Buchstaben mit der Pseudoklas­se ::first-letter an. Auch wenn hier von letter die Rede ist, die Selektion funktionie­rt ebenso bei Zahlen. Weniger bekannt ist, dass ::first-letter unter Umständen

5. Webentwick­lung Tipps für die Konsole

Eine der ersten Anweisunge­n, die Webentwick­ler bei der Arbeit mit den Developer Tools und der Konsole in Browsern lernen, ist die Ausgabe von Hinweisen oder Variablen fürs Debugging: console.log('Button A gedrückt'); console.log(var); 1 Design: Neben console.log() gibt es weitere Möglichkei­ten, um die Art der Ausgabe zu kennzeichn­en. Je nach Browser werden diese mit unterschie­dlichen Farben und Icons angezeigt. console.info('reine Informatio­nen'); console.debug('fürs Debugging'); console.warn('Warnmeldun­g, auf gelbem

Hintergrun­d'); console.error('Fehlermeld­ung, auf

rotem Hintergrun­d'); Das reicht meist, um besondere Hinweise hervorzuhe­ben. Sie haben aber auch die Möglichkei­t, Ihre Meldung mit eigenem CSS zu stylen. console.log('%c Nachricht mit eigenem CSS', 'color:red; background-color: black;') Dabei können Sie allerdings nicht die gesamte Palette an CSS benutzen. Die Konsole wird einige Angaben ignorieren, abhängig vom jeweiligen Browser.

2 Sinnvolle Ausgabe: Sie können alle genannten Methoden nutzen, um Variablen und Objekte auszugeben, etwa: const hero = { codename: 'Darkwing

Duck', realname: 'Drake Mallard' }; const villain = { codename: 'Megavolt', realname: 'Elmo Sputterspa­rk'}; console.log(hero); console.log(villain); Diese Ausgabe ist leider nur bedingt hilfreich. In beiden Fällen wird zwar das Objekt ausgegeben. Sie müssen aber wissen, in welcher Reihenfolg­e die Ausgabe erfolgt, denn die Konsole gibt Ihnen keinerlei Hinweise darüber, zu welchem Objekt die jeweiligen Werte gehören. Sinnvoller ist die Ausgabe über Computed Property Names. Dazu ergänzen Sie lediglich geschweift­e Klammern. In der Ausgabe können Sie so Werte und Objekte zuordnen. console.log( {hero, villain} ); Noch übersichtl­icher werden solche Objekte, wenn Sie sie als Tabelle ausgeben. Auch dafür gibt es eine sinnvolle Methode. console.table({ hero, villain}); 3 Performanc­e: Sobald Sie die Performanc­e Ihres JavaScript­s testen möchten, bieten sich diese Methoden an: console.time('timer1');

// Ihre Funktion console.timeEnd('timer1'); Damit starten Sie einen Timer und geben am Ende die benötigte Zeit in Millisekun­den aus. Sie müssten hier nicht unbedingt eine Variable vergeben. Aber es ist sinnvoll, gleich mit Variablen zu arbeiten; für den Fall, dass Sie verschiede­ne Events messen möchten. 4 Bedingunge­n: Manchmal möchten Sie einen Hinweis nur unter bestimmten Bedingunge­n ausgeben. Dazu könnten Sie eine einfach if-Abfrage nutzen. Es gibt aber eine kompaktere Möglichkei­t, die Methode console.assert(). var count = 110; console.assert(count <= 100,

'Zähler hat 100 überschrit­ten'); Die Zeile ist als Annahme zu lesen. Wir gehen davon aus, dass unser Zähler count maximal den Wert 100 erreicht. Falls das allerdings nicht der Fall sein sollte, wird der entspreche­nde Hinweis angezeigt. 5 Aufräumen: Nachdem wir jetzt die Konsole mit allerlei Informatio­nen gefüllt haben, könnten wir noch aufräumen und alle Einträge löschen, mit einem simplen console.clear();

mehr Zeichen beinhalten kann als nur den ersten Buchstaben. Bestimmte Zeichen, etwa öffnende und schließend­e Klammern oder Anführungs­zeichen, werden gemäß Spezifikat­ion zum ersten Zeichen hinzugezäh­lt. Das funktionie­rt in allen modernen Browsern ab Internet Explorer 9. Der Internet Explorer 8 unterstütz­t hier lediglich die veraltete (deprecated) Schreibwei­se mit einem Doppelpunk­t, also :firstlette­r statt ::first-letter. p::first-letter { background-color: #aed6f1; font-weight: bold; }

6. Tool Webhint Webhint prüft Webseiten auf mögliche Probleme. Seit Kurzem gibt es das Online-Tool auch als Erweiterun­g für die Browser Chrome, Edge und Firefox.

Mit Webhint können Sie eine Webseite auf Probleme in den Bereichen Barrierefr­eiheit, Browser-Kompatibil­ität, Performanc­e, Pitfalls, Progressiv­e Web Apps und Sicherheit prüfen. Diese Bereiche überschnei­den sich teilweise mit dem Tool Lighthouse, das in Chrome (und damit auch in den neuen Versionen von Edge) enthalten ist. Was Webhint abhebt sind die Tipps für die Cross-Browser-Kompatibil­ität. So erhalten Sie eine Liste von CSS- und JavaScript-Funktionen, die in verschiede­nen Browsern nicht unterstütz­t werden. Konkret zum Beispiel: object-fit is not supported by ie 11 oder script[defer] is not supported by opera 60,62. Sie können die gewünschte­n Browser in den Einstellun­gen selbst festlegen. Die Erweiterun­g erzeugt einen weiteren Reiter in den Developer Tools. In Chrome können Sie Webhint neben Lighthouse nutzen und eine Webseite mit beiden Tools überprüfen. Neben den neuen Browser-Erweiterun­gen bietet die Website webhint.io auch einen Online-Scanner. Alternativ können Sie das Tool auch in Ihr CLI (Command-line interface, Kommandoze­ile) integriere­n.

7. Zukunft des Webs The Web We Want Eine neue Kooperatio­n zwischen Browser-Hersteller­n sammelt auf der Website webwewant.fyi Feature Requests von Webentwick­lern.

In den letzten Jahren haben Browser zahlreiche neue Techniken unterstütz­t. Webworker wünschen sich trotzdem noch dieses oder jenes neue Feature in CSS oder JavaScript. Aaron Gustafson (Mitarbeite­r von Microsoft) hat daher das Projekt The Web We Want initiiert. Webworker können dort neue Features vorschlage­n. Die Idee ist, dass Browser-Hersteller so besser wissen, in welche Ideen sie ihre Energie stecken sollen. Das Team beinhaltet mit Marcos Cáceres (Mozilla, W3C), Stephanie Drescher (Microsoft), Brian Kardell (Igalia) und Chris Wilson (Google, W3C) Vertreter aller größerer Browser-Hersteller. Wenn Sie eigene Wünsche an Browser-Hersteller haben, können Sie diese auf der Website webwewant.fyi einreichen. Die eingereich­ten Vorschläge sind öffentlich, und es sind einige interessan­te Ideen dabei. Zum Beispiel: „Ich wünsche mir eine Möglichkei­t, die Scrollrich­tung bei Elementen zu ändern (um Interfaces wie bei Textmessag­es zu ermögliche­n)“oder „Ich wünsche mir, SVG komplett über CSS stylen zu können“.

 ??  ?? Die Page Visibility API wird von allen Browsern unterstütz­t, sogar von den Internet Explorern 10 und 11 (caniuse.com).
Die Page Visibility API wird von allen Browsern unterstütz­t, sogar von den Internet Explorern 10 und 11 (caniuse.com).
 ??  ?? Einige, wenige Nutzer nutzen Add-ons für Firefox und Chrome, um die Page Visibility API zu deaktivier­en.
Einige, wenige Nutzer nutzen Add-ons für Firefox und Chrome, um die Page Visibility API zu deaktivier­en.
 ??  ??
 ??  ??
 ??  ??
 ??  ?? Mittlerwei­le müssen Sie nicht mehr auf JavaScript zurückgrei­fen, um einen Text nach x Zeilen sauber abzuschnei­den.
Mittlerwei­le müssen Sie nicht mehr auf JavaScript zurückgrei­fen, um einen Text nach x Zeilen sauber abzuschnei­den.
 ??  ??
 ??  ??
 ??  ?? Eine sticky Kopfzeile bleibt beim Scrollen im Viewport hängen.
Eine sticky Kopfzeile bleibt beim Scrollen im Viewport hängen.
 ??  ?? Neben console.log() gibt es andere Methoden, um Informatio­nen in der Konsole auszugeben.
Neben console.log() gibt es andere Methoden, um Informatio­nen in der Konsole auszugeben.
 ??  ?? Sowohl Computed Property Names als auch die Methode table() sorgen für bessere Übersicht.
Sowohl Computed Property Names als auch die Methode table() sorgen für bessere Übersicht.
 ??  ?? Zwei Beispiele für die Methoden assert(), time() und timeEnd() und die entspreche­nde Ausgabe.
Zwei Beispiele für die Methoden assert(), time() und timeEnd() und die entspreche­nde Ausgabe.
 ??  ?? Links: Das Tool Webhint liefert zahlreiche Tipps, um eine Website in Bereichen wie Kompatibil­ität, Performanc­e und Security zu optimieren.
Links: Das Tool Webhint liefert zahlreiche Tipps, um eine Website in Bereichen wie Kompatibil­ität, Performanc­e und Security zu optimieren.
 ??  ?? Rechts: Die Website webwewant.fyi sammelt Feature Requests für HTML, CSS und JavaScript.
Rechts: Die Website webwewant.fyi sammelt Feature Requests für HTML, CSS und JavaScript.
 ??  ?? Die Pseudoklas­se ::first-letter selektiert mitunter ein paar Zeichen mehr als nur den ersten Buchstaben, hier blau unterlegt.
Die Pseudoklas­se ::first-letter selektiert mitunter ein paar Zeichen mehr als nur den ersten Buchstaben, hier blau unterlegt.

Newspapers in German

Newspapers from Germany