Ich habe mir die Svelte-Dokumentation auf meinem iPhone angesehen und bin auf einen auffälligen UI-Bug gestoßen. Die Kerbe in der REPL-Regler war völlig daneben. Ich bin immer auf der Suche nach Möglichkeiten, zu Open Source beizutragen, und dachte, dies wäre eine schnelle und einfache Korrektur. Es stellte sich heraus, dass viel mehr dahintersteckte, als nur eine Zeile CSS zu ändern.
Die Reproduktion, das Debugging und die Einrichtung der lokalen Umgebung waren interessant, schwierig und bedeutungsvoll.
Das Problem

Ich öffnete die Browser-Entwicklertools und dachte, ich würde dasselbe Problem in der Handyansicht sehen. Aber der Fehler war nicht da. *Jetzt* ist das ein wirklich kniffliges CSS-Problem.
💡 Was ich gelernt habe
Wenn Sie Chrome auf iOS als Browser verwenden, verwenden Sie immer noch den Renderer von Safari. Laut Wikipedia
Chrome verwendet WebKit für iOS – die eigene Rendering-Engine und Komponenten von Apple, entwickelt für ihren Safari-Browser – daher ist es eingeschränkt, Googles eigene V8 JavaScript-Engine zu verwenden.
Dies wird von caniuse bestätigt, das diesen Hinweis zu iPS Safari gibt.

Jetzt ist klar, warum das Problem auf meinem Rechner nicht angezeigt wurde, aber auf meinem Handy. Unterschiedliche Rendering-Engines!
Das Problem lokal reproduzieren
Ich habe das Projekt heruntergeladen und lokal ausgeführt. Ich habe bestätigt, dass es immer noch ein Problem war, indem ich den lokalen Code sowohl in einem Simulator als auch auf meinem tatsächlichen iPhone ausgeführt habe. Safari unter macOS bietet eine einfache Möglichkeit, von jeder dieser Instanzen Entwicklertools zu öffnen.

Dies bietet Zugriff auf eine Konsole, genau wie im Browser, aber für iOS Safari. Ich werde nicht lügen, Apples Entwicklererfahrung ist erstklassig (sehen Sie, was ich da gemacht habe? 😬).
Ich kann das Problem jetzt lokal reproduzieren.
💡 Was ich gelernt habe
Nachdem ich das Svelte-Repository heruntergeladen und mir den Code angesehen hatte, bemerkte ich, dass die UI und die SVGs über ein Paket namens @sveltejs/site-kit geladen wurden. Gut, jetzt brauche ich meine lokale Version von Site-Kit, die in svelte/site geladen wird, damit ich Änderungen sehen und das Problem beheben kann.
Ich musste meine lokale Kopie von site-kit in der node_modules-Datei von Svelte in der package.json angeben. Das klang nach einem Symlink. Nachdem ich die Dokumentation ohne großen Erfolg durchgesehen hatte, habe ich gegoogelt und bin zufällig auf npm-link gestoßen. Das hat mir gezeigt, was ich tue!

Ich kann jetzt lokale Änderungen an site-kit vornehmen und sie im Svelte-Projekt sehen.
Das Problem lösen
Ernsthaft, all das erforderte nur eine Ein-Zeilen-Änderung.
border: transparent;
Aber die Stelle zu finden, wo diese eine Zeile hingehört, war nicht so einfach, wie man denken könnte. Source Maps des Projekts sind noch etwas holprig und zeigen an, dass dieser CSS-Code aus der Nav.svelte-Komponente stammt, obwohl er eigentlich aus einer anderen Datei kam. Das wäre eine weitere großartige Möglichkeit, zum Projekt beizutragen!
Dann recherchiert man ein wenig und erfährt, dass dies behandelt wird und man lernt etwas mehr darüber, wie es gemacht wird. Alles sieht jetzt sowohl auf Mobilgeräten als auch auf Desktops großartig aus.

Lassen Sie uns zurückspulen
Was als schnelle Ein-Zeilen-Änderung begann, wurde zu einer kleinen Reise. Ich musste
- Die Projekt- und Komponenten-Repositorys ausführen
- Etwas über Systemverknüpfung lernen
- Dokumentation über die Verknüpfung von Site-Kit beitragen
- Etwas über verschiedene Browser-Renderer lernen
- Lernen, wie man einen iOS-Safari-Browser emuliert
- Lernen, wie man auf seinen Debugger zugreift
- Das Problem finden, als die Quellcodes nicht korrekt funktionierten
- Das Problem lösen (endlich!)
Wenn man alleine arbeitet, beschäftigt man sich normalerweise nicht mit solchen Problemen oder hat ein großes komplexes System, von dem man sich ein mentales Modell erstellen und lernen muss. Man lernt nicht von den Maintainern. Am wichtigsten ist, dass man die ganze harte Arbeit, die in den Aufbau eines beliebten technischen Produkts fließt, nicht sieht.
Als ich diese Idee bei CSS-Tricks einreichte. Chris sagte, er habe sich kürzlich mit einer ähnlichen Situation beschäftigt. **Schwieriges Lernen ist dauerhaftes Lernen.** Nehmen Sie den Kampf an.
Niemals aufhören zu lernen
Ich habe mir ein weiteres Problem aus dem Svelte-Projekt vorgenommen und lerne jetzt etwas über CSSStyleSheet, da es ein weiteres Problem (glaube ich) mit der Behandlung von Keyframe-Animationen durch Safari in stylemanager.ts gibt. Und so geht das Lernen auf Wegen weiter, die ich in meiner täglichen Arbeit nie eingeschlagen hätte.
Wenn etwas kaputt geht, genießen Sie die Reise des Lernens des Systems. Sie werden wertvolle Einblicke gewinnen, warum dieses Ding kaputt gegangen ist und was getan werden kann, um es zu reparieren. Das ist einer der großartigen Vorteile der Mitarbeit an Open-Source-Projekten und warum ich Sie ermutigen würde, dasselbe zu tun.
Deshalb möchte ich nicht in Teams arbeiten. Dieser Mehraufwand an Werkzeugen und Systemen ist deprimierend.
Ich höre Chris Coyer sagen „technische Schulden“ :).
Ich bin vor einiger Zeit auf einen Bug in Safari gestoßen, bei dem die Änderung des `animation-play-state`-Eigenschafts statt der Deklaration der vollständigen `animation`-Eigenschaft dazu führte, dass Animationen etwa die Hälfte der Zeit nicht gerendert wurden. Es könnte sich lohnen zu prüfen, ob Sveltes Animationen auf diese Weise mit dem von Ihnen am Ende des Artikels erwähnten Problem strukturiert sind. Guter Artikel!
Mich würde interessieren, wie Sie Ihren lokalen Code auf Ihrem iPhone ausgeführt haben. Ich habe ein Repository geforkt und es auf einem lokalen Server unter macOS ausgeführt, aber ich habe keine Ahnung, wie ich diesen Code auf mein iPhone zum Testen kopieren oder starten könnte. Danke (ich bin ein Anfänger-Entwickler).
Wenn Sie im WLAN des Ortes, an dem Sie am Projekt arbeiten, sind, können Sie auf alles zugreifen. Es würde ungefähr so funktionieren: IP-Adresse des PCs, auf dem Sie entwickeln/Portnummer. Sie müssten Ihren PC in den Netzwerkeinstellungen sichtbar machen und überprüfen, welche IPv4-Adresse Ihr PC hat.
Eine Möglichkeit besteht darin, den lokalen Server so zu konfigurieren, dass er Verkehr über Ihr lokales Netzwerk leitet, und Sie greifen einfach über die IP-Adresse Ihres Rechners auf dem Handy darauf zu.
Eine andere Möglichkeit ist die einfache Verwendung von ngrok (oder einem ähnlichen Tool), bei dem Sie es auf Ihren lokalen Port verweisen können und dies dann über das Internet weitergeleitet wird, wo Sie die Seite wieder auf Ihrem Handy öffnen. Solche Tools sind von Vorteil, da jeder auf Ihre Website zugreifen kann, wenn Sie sie jemandem außerhalb Ihres Netzwerks zeigen möchten, ohne einen tatsächlichen Server zu benötigen.
Wenn Sie einen lokalen LAMP-Stack eingerichtet haben, können Sie die IP-Adresse Ihres Computers (wo der Code gehostet wird) auf Ihrem iPhone aufrufen und sollten in der Lage sein, die Website / App anzuzeigen.
Wenn Sie Android haben, können Sie dasselbe tun und das Telefon sogar über USB mit dem Computer verbinden und die Chrome-Debugging-Tools auf dem Computer verwenden, um auf Ihrem Telefon zu debuggen.
Oft arbeite ich mit Systemen wie WordPress, die .htaccess-Regeln verwenden, die es mir nicht erlauben, sie aus einem lokalen Netzwerk anzuzeigen, daher verwende ich diesen Trick nicht, um auf echten Geräten zu testen und zu debuggen. Wenn ich jedoch an solchen Projekten arbeite, sind die Anforderungen nicht wirklich so komplex, dass eine so detaillierte Fehlerbehebung erforderlich wäre. :)
border: transparent;setzt implizit die `border-width` auf 0px und `border-style` auf none. Deshalb funktioniert das. Die transparente Farbe spielt eigentlich keine Rolle, da die `border-width` 0 ist. Daher würde ich sagen, dassborder: none;eine klarere Lösung ist.Dennoch gute Arbeit bei der Mitarbeit an Open Source! Die Einrichtung einer lokalen Umgebung ist selten einfach.
Bugs in Safari, sagst du...
Das. Safari wird schnell zum neuen IE. Ich hoffe, Sie haben einen Bug für Safari eröffnet.
Und viel Glück, wenn Sie das, was in diesem Artikel steht, jemals auf einem Windows-Rechner erledigen können. Erstklassiges Debugging? Eher ein spezieller Debugger für ihre spezielle Software, die ihre spezielle Hardware verwendet und Probleme verursacht. Genau wie Microsoft es über die Jahre mit mangelnder Unterstützung für IE getan hat.
Das scheint eine Fallstudie über die ungerechtfertigte Komplexität moderner Build-Prozesse zu sein. Ich kann nicht glauben, wie viel Dev-Ops-Folter Entwickler ertragen wollen, um ein paar Zeilen Code zu sparen.
Toller Beitrag. Danke, dass Sie geteilt haben, wie Sie zu einem Open-Source-Projekt beigetragen haben. Ich möchte auch anfangen beizutragen, also war das hilfreich.
Toller Artikel! Ich bin inspiriert, auch zu Open-Source-Software beizutragen!
Vielen Dank für diesen sehr informativen Artikel. Ich hatte immer das Gefühl, dass man für die Teilnahme an einem Open-Source-Projekt „echte Programmierung“ beitragen muss. Auch wenn es nicht der Fokus eines Projekts ist, ist Design ein wichtiger Bestandteil jedes Open-Source-Projekts. Die Benutzeroberfläche von Open-Source-Apps muss auch schön und angenehm zu bedienen sein.
Ich schaue mir die Apps an, die ich derzeit verwende, um zu sehen, wo meine Frontend-Kenntnisse benötigt werden könnten.
Sehr engagiert, um dem Grund auf den Grund zu gehen. Ich bin kein Programmierer, daher ist das für mich oft eine Tortur. Aber das war recht interessant zu lesen. Besonders die Tortur, den Simulationspart richtig zum Laufen zu bringen.
Diese Art von Fehlern ist wirklich widerlich, aber danke, dass Sie Ihre Erfahrungen geteilt haben ❤️
Das Problem der Schwierigkeit ist ein Mangel an Werkzeugen, die uns zur Verfügung stehen, und diese hinken der technologischen Entwicklung der Browser immer weiter hinterher. Fehler wie dieser sollten automatisch erkannt werden und das Bewusstsein dafür sollte während des ursprünglichen Entwicklungsprozesses für den ursprünglichen Entwickler erhöht werden.
sehr interessant, warum haben transparente Einstellungen eine Breite?
Es ist nicht
transparent, das die Breite auf none setzt. Wenn man nur die Farbe in der Kurzformborder: transparentverwendet, wird kein `border-style` gesetzt, sodass der Standardwert `none` übernommen wird.Siehe Hinweis im Abschnitt Syntax: https://developer.mozilla.org/en-US/docs/Web/CSS/border
Toller Artikel! Ich ermutige oft neue Junior-Entwickler, zu Open Source beizutragen, weil dies eine Möglichkeit ist zu zeigen, dass sie „professioneller“ sind als andere Junior-Kandidaten … und dieser Artikel erklärt genau, warum!
Es erfordert viel Arbeit, selbst eine Ein-Zeilen-Änderung an einem OSS-Projekt vorzunehmen, und deshalb werden Arbeitgeber, wenn sie sehen, dass Sie diese Arbeit leisten konnten, zuversichtlicher sein, dass Sie die Arbeit leisten können, die sie für den Job benötigen.
Toller Fund! Haben Sie Vorschläge für einen Windows 10-Benutzer ohne Zugriff auf einen Mac, um iPhone-CSS-Probleme in Safari zu lösen?
Ich habe ein paar Online-Emulatoren ausprobiert, aber sie sind nicht sehr robust. Würden Sie die VM-Route empfehlen?
Ich schätze, der Fehler lag auf Seiten von Safari und nicht auf Seiten einer Webanwendung. Aber wenn der Rand nicht explizit in CSS gesetzt ist, sollte er wohl den Standardwert haben.
Aber vielleicht ist es auch einfach eine andere Logik für die Vererbung von Eigenschaften, daher schätze ich, jemand könnte die Webstandards überprüfen und herausfinden, welche der beiden Implementierungen korrekt ist.