Das SVG, das wir heute kennen und lieben, ist „SVG 1.1 2. Edition“. SVG 2 befindet sich beim W3C im Status eines Editor's Draft und es besteht die ernste Gefahr, dass es diesen nie verlassen wird, da sein Mandat möglicherweise nicht verlängert wird, bevor es den Empfehlungsstatus erreicht.
Tavmjong Bah über einen Teil des Grundes
Obwohl schockierend und unerwartet, kam es nicht aus heiterem Himmel. Die aktive Beteiligung in der Arbeitsgruppe ist auf nur eine Handvoll Leute gesunken, von denen keiner die Browser-Anbieter vertritt. Tatsächlich hatten die letzten beiden „persönlichen“ Treffen nur drei reguläre Teilnehmer, einer von Canon (das seine Mitgliedschaft im W3C Ende des Jahres beendet) und zwei eingeladene Experten, die kostenlos arbeiten.
Wie Tavmjong sprach ich kürzlich auch mit Doug Schepers über SVG 2. Er nannte mir die meisten neuen Hauptfunktionen. Diese Seite ist gut, um eine Liste davon zusammen mit ihrem Status zu sehen. Meine sofortige Meinung danach
- Es gibt nicht sehr viele Killer-Features für den gewöhnlichen Webentwickler, und es ist für mich nicht allzu überraschend, dass das Interesse insgesamt schwindet.
- Einige der wirklich nützlichen Dinge, die technisch SVG 2 sind, werden bereits ordentlich unterstützt (z. B.
non-scaling-stroke). - Ich liege normalerweise mit Dingen falsch. Es besteht eine gute Chance, dass SVG 2-Features erstaunliche Dinge freischalten, die ich mir im Moment noch nicht einmal vorstellen kann.
Es *gibt* ein paar Features, die ziemlich offensichtlich nützlich sind. Hier ist eines: z-index. Derzeit gibt es keine Möglichkeit, die Stapelreihenfolge von SVG-Elementen außer der Quellreihenfolge zu steuern. SVG 2 unterstützt z-index, und es wird *einfach funktionieren*, was nützlich sein wird. Kein Browser unterstützt es bisher, und es gilt als „gefährdet“.
Der Drei-Wege-Tanz
Normalerweise denke ich bei neuen Features im Web an einen Drei-Wege-Tanz zwischen
- Entwickler. Sie nutzen die Features. Sie sind die Stimme dessen, was gewünscht wird. Sie sind der Maßstab dafür, was tatsächlich genutzt wird.
- Browser. Sie implementieren die Features. Sie sind die Gatekeeper. Sie haben ihre eigenen Vorstellungen davon, was benötigt wird. Sie sind Unternehmen.
- Spezifikationen. Sie dokumentieren, wie Features funktionieren sollen. Browser sehen sie an, um zu sehen, wie Features implementiert werden sollen, da es einen Anreiz gibt, Features zur Interoperabilität zu implementieren. Sie sind Vermittler. Sie haben auch ihre eigenen Vorstellungen davon, was benötigt wird.
Jeder von ihnen kann Druck ausüben und Features vorantreiben, obwohl letztendlich jeder zustimmen muss. Entwickler können sehr lautstark auf ein Bedürfnis aufmerksam machen, was Browser dazu anregen könnte, es liefern zu wollen, oder Spezifikationsautoren dazu bringen, sich einzuschalten und zu definieren, wie es funktionieren würde. Spezifikationsautoren haben möglicherweise den starken Wunsch, eine Sprache und ihre APIs zu verfeinern und weiterzuentwickeln und Dinge selbst voranzutreiben. Ein Browser könnte stark das Gefühl haben, dass seine Kunden etwas wollen (oder es aus geschäftlicher Sicht sinnvoll ist, etwas bereitzustellen) und mit einer frühen Implementierung fortfahren.
Es gibt auch viele Überschneidungen. Leute von Browseranbietern können als Spezifikationsleute arbeiten. Entwickler sind überall verstreut.
SVG 2 fühlt sich größtenteils wie ein von Spezifikationen getriebenes Unterfangen an. Es gibt einiges Interesse an SVG bei Entwicklern, aber vielleicht nicht viel Gebrüll über SVG-Mängel. Ich finde, Entwickler versuchen hauptsächlich, das, was bereits vorhanden ist, zu verstehen. Aber dieser neu gewonnene Enthusiasmus ist vielleicht das, was langjährige SVG-Spezifikationsbeteiligte dazu gebracht hat, mit SVG 2 fortzufahren.
Als von Spezifikationen getriebenes Unterfangen liegt es an ihnen, die anderen Parteien zum Handeln zu bewegen. Das ist der Teil, der bisher nicht gut läuft. Aus Entwicklersicht sehe ich es als diesen *Mangel an Killer-Features*. Aus Browsersicht, hier ist Bah wieder
Es gibt nur zwei Browser-Implementierungen von Bedeutung: Blink (Chrome/Opera) und Gecko (Firefox). Von diesen hat nur Blink die Ressourcen, um neue Features schnell vollständig zu implementieren, obwohl Gecko mehr von SVG 2 implementiert hat. Chrome hat einen riesigen Vorsprung bei Marktanteilen (fast 75 %). Google hat die Angewohnheit, Features, die es nicht mag, einseitig aus Blink zu entfernen und damit im Grunde zu diktieren, dass diese Features aus Spezifikationen entfernt werden.
Zwei weitere bedeutende Browser-Implementierungen, WebKit (Safari) und Edge, sind eher Nachfolger als Vorreiter und haben relativ geringe Marktanteile (jeweils 5 % und 4 %). Microsoft hat beispielsweise ausdrücklich erklärt, dass sie sich SVG 2 erst ansehen werden, wenn die Spezifikation eine Candidate Recommendation ist.
Lesen: Blink macht, was es will; Gecko ist langsam; Edge wird es nicht anfassen; WebKit wird abwarten.
Es wird ein wenig schlimmer.
Der Drei-Vier-Wege-Tanz
Für SVG 2 ist ein wichtiger vierter Akteur beteiligt: **Software**.
Meiner Einschätzung nach wurde die überwiegende Mehrheit des im Web verwendeten SVG nicht direkt von Entwicklern erstellt, sondern von Software ausgegeben. Inkscape, Adobe Illustrator, Sketch, Affinity Designer… Es gibt jede Menge Software, die SVG exportiert.
Nehmen wir ein weiteres SVG 2-Feature, den Befehl b oder B als Teil der Pfadsyntax. Es sieht so aus, als ob er eine effizientere Pfadausgabe ermöglicht, indem er es erlaubt, den Richtungswechsel für nachfolgende Pfadbefehle zu ändern.
Das ist alles schön und gut, aber warum sollte ein Unternehmen wie Adobe sich damit befassen? Wenn sie es implementieren, riskieren sie, SVG auszugeben, das kein Browser unterstützt, was nicht nützlich ist und Kunden sicherlich verärgern würde. Sie müssen fast sicher auf eine sehr solide Browserunterstützung warten, bevor sie sich mit etwas wie diesem befassen. Das beginnt einen Teufelskreis: Warum sollten Browser etwas implementieren, das niemand zu nutzen bereit ist?
Selbst *wenn* die Spezifikation einen gewissen Fertigstellungsgrad erreicht *und* die Browser sich dafür entscheiden, sind wir immer noch auf die Gnade der Software angewiesen, die diese Features ebenfalls nutzt.
Aus dem Bauchgefühl heraus
Ohne mehr zu wissen, neige ich dazu, den Browseranbietern zuzustimmen. Bah berichtet
Der allgemeine Konsens der Browseranbieter ist, dass SVG 2 fertiggestellt werden sollte, aber auf die Behebung der Probleme mit SVG 1.1 2. Edition beschränkt sein und nur wenige ausgewählte neue Features (wie 'paint-order') enthalten sollte, die bereits von mehreren Browsern implementiert wurden. Neue Features (Meshes, Schraffuren etc.) sollten entfernt werden.
Es klingt so, als wäre das Entfernen neuer Features schmerzhaft, aber es könnte die Schatztruhe sein, die man vom Wagen werfen muss, um den Pass zu überqueren.
Nach meinem begrenzten Verständnis sind Mesh-Verläufe eine der wichtigsten und aufregendsten Funktionen. Die Vorstellung, dass man immersive und schattierte Effekte in einem SVG erstellen kann, eröffnet eine riesige Bandbreite an Möglichkeiten für responsives und performantes Webdesign.
Ich möchte einfach nur ein verdammtes
stroke-alignmentAttribut/Property.Innen-/Außen-/zentrierte Kontur ist eine häufige Anforderung (da sie in Illustrator & Sketch & anderswo unterstützt wird und einfach sehr nützlich wäre).
Es gab einen groben Vorschlag für SVG, aber als unser Inkscape-Vertreter ihn tatsächlich implementieren wollte, entdeckte er allerlei Randfälle, die nicht definiert waren. Ohne dass jemand Zeit investierte, um herauszufinden, wie bestehende Software damit umging, und ohne Zusagen von Browsern, dass sie das neue Feature implementieren würden, wenn es enthalten wäre, gab es Bedenken, dass es die Akzeptanz von SVG 2 verlangsamen würde.
Die Eigenschaft (und einige andere) wurde beiseite gelegt, um in einem separaten Modul für Kontur-Features (ein grober Entwurf hier, mit Details zu den Randfallproblemen) verfolgt zu werden. Ähnlich gibt es andere Entwürfe für „SVG Level 3“-Modul-Spezifikationen, die andere interessante Features enthalten würden, die es nicht in SVG 2 geschafft haben.
Leider ist es angesichts der Tatsache, dass die Browser sich jetzt von SVG 2-Features wie Mesh-Verläufen und z-index (von denen wir dachten, sie hätten breite Unterstützung) abwenden, ungewiss, wann die neuen Grafik-Features jemals verfolgt werden.
Es gibt nun eine vorgeschlagene Spezifikation, um Text-Konturierung in CSS zu integrieren, unter Verwendung aller bestehenden SVG-Kontur-Eigenschaften. Wenn
stroke-alignmentjemals zustande kommt, könnte es durch diese Bemühungen geschehen.Das ist wirklich schade. Es gibt immer noch viel zu tun an SVG, bevor es ein echtes, modernes und wartbares Werkzeug für alle möglichen Anwendungen wird.
Ja, z-index wäre wirklich willkommen; aber ich habe entdeckt, dass mehrere Attribute jetzt über CSS stilisiert – und animiert! – werden können, wie z.B.
xoderroder sogar der Pfadd. Wir könnten endlich die umständliche XML-Syntax für Filter und Animationen loswerden (wirklich, es ist, als würden wir immer noch dasfont-Element in HTML verwenden). Wir könnten Mesh-Verläufe haben. Wir könnten eine bessere Integration mit CSS und JavaScript haben.Müssen wir wirklich warten und hoffen, dass Google die Dinge regelt?
Bezüglich des Kommentars über Softwareanbieter, die Dinge nicht ausgeben wollen, die möglicherweise nicht funktionieren.
Adobe (und andere Anbieter) haben eine lange Geschichte der Bereitschaft, neue Features einzubinden und mehrere Ausgabeoptionen anzubieten.
Wenn Sie jemals etwas aus fast jeder Adobe-Software exportieren oder speichern, haben Sie sicher die Optionen bemerkt, die immer auftauchen und fragen, ob Sie möchten, dass es kompatibel ist oder die neuesten Features verwendet, oder welche Version der Illustrator-Datei Sie speichern möchten, oder im Fall von SVG, welche Version der SVG-Datei Sie möchten und welche Features unterstützt werden sollen.
Ich denke, es ist ziemlich klar, dass Adobe (oder andere Softwareanbieter) sicherstellen würden, dass sie nicht die sind, die zurückbleiben, falls dies an Dynamik gewinnt.
Das mag für Inkscape-Entwickler „schockierend“ sein, aber für Webentwickler ist es eine gute Nachricht.
Die nützlichsten Teile von SVG wurden bereits in CSS integriert und werden entweder von Browseranbietern implementiert oder sind in der Implementierung (Animationen, Schriftarten, Clip-Pfade, Masken, Filter, Transformationen, Verläufe usw.).
Meine Vermutung ist, dass Browseranbieter nun planen, SVG 2 einzustellen und stattdessen eine minimale Menge an Vektorelementen direkt in die HTML-Spezifikation aufzunehmen. Etwas Ähnliches wie / VectorDrawable von Android würde die Bedürfnisse der meisten Webentwickler abdecken.
Holt SMIL zurück
Bitte sehen Sie sich Mesh-Verläufe an und kommen Sie dann und sagen Sie mir, dass es keine Killer-Features gibt. Alle ernsthaften Illustratoren verwenden sie in ihren Grafikprogrammen, und dann ist das exportierte SVG voller Bitmaps, die es enorm aufblähen. Der mangelnde Enthusiasmus für SVG 2 ist größtenteils auf Unwissenheit zurückzuführen, nicht auf den Mangel an Killer-Features in der Spezifikation.
Es erstaunt mich wirklich, nach all den Jahren, dass so viele die Macht von SVG im Vergleich zu jeder anderen Alternative nicht kennen. Insbesondere die Features, die SVG schnell, responsiv (skalierbar) und zugänglich machen.
Es gibt noch eine weitere wichtige Kategorie, die nicht erwähnt wurde und nicht vergessen werden sollte – Anbieter und Programmierer von Web-Software, die Tools und/oder Code zur Vereinfachung der dynamischen SVG-Generierung auf Abruf sowie zur Unterstützung dynamischer Interaktionen haben… Google Charts ist nur ein Beispiel dafür. Und ja… Designer, die SVG-Inhalte erstellen, würden idealerweise Features beeinflussen, die „Desktop“-Softwareanbieter unterstützen (Mesh-Verläufe zum Beispiel), aber das größere Problem ist meiner Meinung nach, ein breites Publikum zu erreichen, um sie alle aufmerksam zu machen… und alle zu begeistern… für das Potenzial von Features, die für sie wichtig sein sollten (und wahrscheinlich wären).
Erstens, Konturausrichtung und z-index sind absolut Killer-Features. Der Umgang mit dynamischer Stapelreihenfolge ist ohne sie sehr schwierig. Sie sind nicht nur nette Extras. Sie können brutal schwierig zu umgehen sein. Gradientennetze sind ein *sehr* nettes Extra. SVG sieht ohne sie aus wie MacPaint. Es wird mit der Zeit immer archaischer aussehen. Auch Textfluss in SVG1 ist ein Albtraum für jeden, der sich damit beschäftigen musste. ForeignObjects mit Text funktionieren nirgendwo wie erwartet.
Um zu beginnen, brauchen wir nur eine funktionierende, knallharte Demo pro Feature, die in einem Browser funktioniert. Fehlerberichte wie „Warum funktioniert diese großartige Datenvisualisierung mit Gradientennetzen nicht in Ihrem Browser?“ haben eine legitime beschämende Kraft. Meiner Einschätzung nach hat das Blink-Team großartige Arbeit geleistet, um SVG-Tickets zu schließen, besonders seit Opera mit an Bord ist.
Allgemeiner bin ich enttäuscht, dass es keine solide Strategie zu geben scheint, um Features auf rückwärtskompatible Weise hinzuzufügen. Die Umstellung des SVG-Parsers auf den HTML5-Parser scheint hier Möglichkeiten zu eröffnen. Unerkannte Elemente und Attribute könnten einfach ignoriert werden, ohne einen Parsing-Fehler auszulösen. Es muss einen Weg geben, SVG für grundlegende progressive Verbesserung zu strukturieren, sonst werden neue Features unmöglich hinzuzufügen. HTML hat dieses Problem des Lock-ins schon vor langer Zeit gelöst.
Endlich denke ich, es ist nützlich, sich daran zu erinnern, dass SVG1 ein verrückter Weihnachtsbaum von einer Spezifikation war, mit einer ganzen Reihe von Dingen, für die es ein Jahrzehnt dauerte, eine gute Interoperabilität zu erreichen. Wir sind vom aktuellen Umfeld guter Konformität verwöhnt. Lange Zeit hatte nur Opera wirklich gute Implementierung. Aber wir haben heute etwas unglaublich Mächtiges, teilweise weil die ursprünglichen Spezifikationsautoren aspirativ dachten. Es ist ein wenig traurig zu sehen, wie der Geist dieser futuristischen Ausrichtung verblasst. Träumt weiter, Leute!
Nun, verflixt.
Use-Element
Ich bin etwas verwirrt, wie „Gecko hat mehr von SVG2 implementiert“ zu der Zusammenfassung „Gecko ist langsam (bei der Implementierung)“ geführt hat.
Marco Carosi schrieb