Problem mit der Cross-Browser-Kompatibilität von SVG-Text

Zunächst muss ich sagen, dass ich nicht gut in Illustrator bin. Ich erstelle nur einige grundlegende Grafiken für die Websites, an denen ich arbeite.

Hier ist eine, die ich gemacht habe:Geben Sie hier die Bildbeschreibung ein

Ich habe es im SVG-Format exportiert und in eine Website eingefügt. Aber wenn ich die Größe des Browsers ändere, nimmt die Textgröße zu oder ab.

So sieht es auf einer Webseite in Chrome aus:Geben Sie hier die Bildbeschreibung ein

Wenn ich die Größe des Browsers erhöhe, werden Buchstaben in ein Rechteck umgewandelt:

Geben Sie hier die Bildbeschreibung ein

Ich hatte nie ein solches Problem. Es ist so seltsam und ich konnte keine Lösung dafür finden.

Auch in Safari funktioniert alles einwandfrei.

Im Firefox sieht das so aus:

Geben Sie hier die Bildbeschreibung ein

Der Text ist völlig anders. Können Sie mir sagen, was los ist? Sind SVG-Grafiken nicht genau wie Bilder? Warum habe ich so viele Probleme?

Hier ist der SVG-Code als Referenz:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 821.4 353.7" enable-background="new 0 0 821.4 353.7" xml:space="preserve">
  <rect x="0" y="0" opacity="0.8" width="682.3" height="214.5" />
  <text transform="matrix(0.8101 0 0 1 25.8074 165.8717)">
    <tspan x="0" y="0" fill="#307FB7" font-family="'MyriadPro-Regular'" font-size="196.5103" letter-spacing="28.4">C</tspan>
    <tspan x="143.4" y="0" fill="#FFFFFF" font-family="'MyriadPro-Regular'" font-size="196.5103" letter-spacing="28.4">agdas</tspan>
  </text>
  <rect x="139.2" y="138.7" opacity="0.8" width="682.3" height="214.5" />
  <text transform="matrix(0.8101 0 0 1 170.9687 304.5814)" opacity="0.8">
    <tspan x="0" y="0" fill="#307FB7" font-family="'MyriadPro-Regular'" font-size="196.5103" letter-spacing="28.4">Y</tspan>
    <tspan x="135.8" y="0" fill="#FFFFFF" font-family="'MyriadPro-Regular'" font-size="196.5103" letter-spacing="28.4">onder</tspan>
  </text>
</svg>
Können wir den exportierten SVG-Code sehen? Meine Vermutung ist, dass das SVG es als Text darstellt, daher wird die verwendete Schriftart nicht in FireFox angezeigt und verursacht die Diskrepanzen zwischen den Browsern
Warum versuchst du das überhaupt in SVG zu rendern? Warum nicht als Klartext?
SVG sieht genau so aus, wie es im ersten Bild gezeigt wird, das ich in der Frage geteilt habe. Außerdem verwende ich Illustrator mit der gleichen Logik wie Photoshop. Ich weiß nicht, was du mit rendern meinst. Hier ist der Link für die SVG-Datei: uploaded.net/file/35c5858j
Bitte verwenden Sie einen Dienst wie Pastebin, um den SVG-Code zu teilen, oder fügen Sie ihn in die Frage selbst ein. Ich möchte keine Datei herunterladen, von der ich nicht weiß, was sie enthält :)
Was meinen zweiten Kommentar betrifft, meine ich, warum nicht einfaches HTML + CSS dafür verwenden? Warum müssen Sie SVG verwenden? Es ist sehr einfach in HTML + CSS zu tun. Was Rendering bedeutet, erfahren Sie in diesem Wikipedia-Artikel
@ZachSaucier Ich kann SVG nicht in Frage stellen und Pastebin ist für Text, also weiß ich nicht, wie ich es dir sonst schicken kann.
Sie können das SVG im Texteditor öffnen und in Pastebin kopieren :)
@ZachSaucier Wow, das wusste ich nicht. Hier ist der Link: pastebin.com/4QxAiThZ
Konvertieren Sie den Text in Konturen, bevor Sie das SVG exportieren
@CAI Sie sind ein Lebensretter. Ich habe alle Objekte ausgewählt und expandunter das Objektmenü geklickt und jetzt ist alles perfekt. Also das hat mir gefehlt. Vielen Dank.

Antworten (2)

Das Problem ist, dass das SVG Text anstelle von Pfaden verwendet, der Browser diesen Text dann mit seiner eigenen Text-Rendering-Engine rendert, was zu Inkonsistenzen bei der Benennung und Skalierung von Schriftarten führen kann (wie bei normalem HTML- und CSS-Text).

Eine Lösung besteht darin, den Text zu skizzieren, bevor Sie das SVG exportieren.

Klicken Sie entweder mit der rechten Maustaste auf den Text und Create Outlinesoder gehen Sie zuObject -> Expand

Das Problem ist, dass Ihr SVG-Buchstabenabstand nicht wie die anderen Teile basierend auf der Bildschirmgröße geändert wird. Da die Rechtecke selbst nicht mit dem Text in Beziehung stehen, sondern nur dahinter positioniert sind, enthalten sie den Text nicht gut.

Die einfachste Lösung wäre, das SVG als Pfad statt als Text zu exportieren, aber das ist keine perfekte Lösung, da es Benutzer daran hindert, den Text auszuwählen.

Wenn Sie möchten, dass Benutzer diese Fähigkeit behalten, gibt es sehr wahrscheinlich eine Möglichkeit, Ihr SVG zu reparieren, während es als Text beibehalten wird, aber da Sie es nur mit Text und einigen Rechtecken zu tun haben und es für eine Website erstellen, empfehle ich Ihnen Verwenden Sie einfaches HTML + CSS, um dies neu zu erstellen.

Der einzige Haken ist, dass Sie Myriad Pro selbst hosten oder von Typekit verwenden müssen, da es standardmäßig nicht kostenlos ist . Sie können eine alternative Schriftart verwenden, ich verwende PT Sans, wenn sie unten nicht unterstützt wird.

HTML:

<div class="site-title-container">
    <h1 class="site-title first-line"><span>C</span>agdas</h1>
    <h1 class="site-title second-line"><span>Y</span>onder</h1>
</div>

CSS:

@import url(https://fonts.googleapis.com/css?family=PT+Sans);

/* For demo only - not recommended */
body { font-size: 2vw; }
/* End of demo only section */


.site-title-container {
    font-family: "Myriad Pro", 'PT Sans', sans-serif;
}
.site-title {
    position: relative;
    color: white;
    padding: 0.3em 0.7em;
    display: inline-block;
    font-size: 2.5em;
    letter-spacing: 0.2em;
}
.site-title span {
    color: #3580B9;
}
.site-title.first-line::before {
    content: '';
    background-color: #161616;
    position: absolute;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
}
.site-title.second-line {
    position: absolute;
    top: 1.1em;
    left: 1em;
    background-color: #161616;
    z-index: -1;
}

Demo-Link

Zach, danke für deine Arbeit, aber @CAI hat mir im Kommentarbereich gesagt, wie ich das beheben kann. Aber ich habe diese Antwort als Dankeschön hochgestimmt.
@cyonder Richtig, wie in dieser Antwort erwähnt, ist der einfachste Weg, wie er vorschlägt :)
@Zach Sie möchten nicht immer, dass der Text auswählbar ist. Bei einem Logo ist beispielsweise die Pfadgenauigkeit viel wichtiger als wählbarer Text.
@CAI Ich kann mir keine Situation vorstellen, in der Sie nicht möchten, dass der Text auswählbar ist. Ja, Genauigkeit ist wichtiger, aber man kann genau sein, während man die Auswahl beibehält, wenn man es richtig macht
Es gibt keine Möglichkeit, mit Text/CSS 100 % genau zu sein. Würden Sie jedem Unternehmen empfehlen, das Logo auf seiner Website durch eine Schriftart und CSS zu ersetzen? Ich würde sicherlich nicht.
@CAI Ich empfehle es, wenn es angebracht ist :)
Ich stimme zu, wenn möglich, ist die Verwendung von CSS in den meisten Fällen die bessere Option. Ich weise nur darauf hin, dass es Fälle gibt, in denen dies nicht der Fall ist ... Und diese Frage betrifft SVG-Text, nicht CSS