curved text

rernanded

Erfahrenes Mitglied
Hi, hier mein bisheriger Code:
HTML:
<style>
        .seal {
            position: relative;
            width: 600px;
            height: 600px;
            border: 10px solid #000;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        .inner-circle {
            position: absolute;
            width: 400px;
            height: 400px;
            border: 10px solid #000;
            border-radius: 50%;
        }
        .text {
            position: absolute;
            width: 100%;
            height: 100%;
            display: flex;
            align-items: center;
            justify-content: center;
            text-align: center;
            font-family: Arial, sans-serif;
            font-size: 30px;
            color: #000;
        }
        .top-text {
            position: absolute;
            top: 10%;
            transform: translateY(-50%);
            white-space: nowrap;
            text-transform: uppercase;
            font-weight: bold;
        }

    .middle-text{
            z-index: 1000;
        position: absolute;
            top: 40%;
        width: 440px;
        height: 100px;
            border: solid 10px #fff; 
        background: orange;
        white-space: nowrap;
            text-transform: uppercase;
            font-weight: bold;
-webkit-transform: rotate(-10deg);
    }

        .bottom-text {
            position: absolute;
            bottom: 10%;
            transform: translateY(50%);
            white-space: nowrap;
            text-transform: uppercase;
            font-weight: bold;
        }

.char1 {
  -webkit-transform: translate(0px, 10px) rotate(-20deg);
}
.char2 {
  -webkit-transform: translate(0px, 5px) rotate(-10deg);
}
.char3 {
  -webkit-transform: rotate(0deg);
}
.char4 {
  -webkit-transform: rotate(0deg);
}
.char5 {
  -webkit-transform: translate(0px, 5px) rotate(10deg);
}
.char6 {
  -webkit-transform: translate(0px, 10px) rotate(20deg);
}

span {
display: inline-block;
margin: 1px;
}
</style>

    <div class="seal">
        <div class="inner-circle"></div>
        <div class="text top-text"><span class="char1">H</span><span class="char2">E</span><span class="char3">A</span><span class="char4">L</span><span class="char5">T</span><span class="char6">H</span></div>
        <div class="text middle-text">WOW</div>
        <div class="text bottom-text">0987654321</div>
    </div>

Ziel ist es das Wort HEALTH, oben, kann auch ein längeres Wort werden, sowie die Zahlenreihe unten, kann auch länger werden, zu "curven".

Oben wie ein schollender Mund, unten wie ein lächelnder Mund.

Insgesamt soll der Eindruck eines Stempels/Siegels entstehen.

Habe schon Versuche mit svg hinter mir, doch alles vergebens.

Meine Lösung für den curved Text (oben) ist "mühselig" vor allem wenn der Text etwas länger ist und ich das gesamte Werk verkleinere. Dann müssten immer alle Werte für jeden char neu angepasst werden.

MONI
 
Hallo Moni,
deine mühselige Lösung könnte man zwar automatisieren, aber auch dann zu kompliziert.
Ich denke, SVG ist schon der beste Ansatz, woran ist es denn gescheitert?
Ich finde da einiges, z. B. hier auf css-tricks:
Curved Text Along a Path | CSS-Tricks
Bleibt die Aufgabe, den Pfad für einen geeigneten Kreisbogen zu erzeugen. Das wird hier beschrieben:
Paths - SVG | MDN
Wird wahrscheinlich ein wenig Winkelarithmetik erfordern, die Parameter für den Bogen auszurechnen.
Sicher hast Du selber schon recherchiert. Wenn Du mit diesen Quellen nicht zum Ziel kommst, melde dich wieder.
 
Zuletzt bearbeitet:
Hi,
hier siehst Du wo ich aufgegeben habe weil ich mit den vier Werten bei viewBox nicht klarkam:
HTML:
<div class="seal">
        <div class="inner-circle"></div>
        <div class="text top-text">
<svg viewBox="10 10 180 180" xmlns="http://www.w3.org/2000/svg">
            <path id="top-curve" d="M 100 100 C 100 90, 250 -40, 400 100" stroke="transparent" fill="transparent"/>
                <text textLength="360">
                        <textPath xlink:href="#top-curve">1234567890</textPath>
                </text>
</svg>
    </div>
        <div class="text middle-text">WOW</div> 
        <div class="text bottom-text">
<svg viewBox="10 10 180 180" xmlns="http://www.w3.org/2000/svg">
            <path id="bottom-curve" d="M 100 400 C 100 410, 250 540, 400 400" stroke="transparent" fill="transparent"/>
                <text textLength="360">
                        <textPath xlink:href="#bottom-curve">0987654321</textPath>
                </text>
</svg>
    </div>
    </div>

MONI
 
Hallo Moni, mir scheint, das Problem bei deinem Code liegt mehr am path und weniger am viewBox-Attribut: Dein Text gerät sehr groß und fällt aus der Viewbox heraus.
Weil Du schreibst, dass das am Schluss wie ein Stempel/Siegel aussehen soll, scheint mir eher ein arc-Pfad bzw. Kreisbogen geeignet zu sein. Ich habe da etwas vorbereitet:
Code:
        <svg viewBox="0 0 420 210" xmlns="http://www.w3.org/2000/svg">
            <path id="top-curve" d="M 10 210 A 200 200 0 0 1 420 210" stroke-width="0" fill="lightgray" />
            <text width="360" alignment-baseline="top" text-anchor="middle">
                <textPath startOffset="50%" xlink:href="#top-curve">1234567890</textPath>
            </text>
        </svg>
Schöner wäre es, wenn der Text innen liegen würde und sich nach innen ausdehnen würde, aber das habe ich noch nicht hin bekommen.
Versuch mal, ob Du damit weiter kommst. Im Moment fehlt mir die Zeit, da tiefer einzusteigen.
 
Schöner wäre es, wenn der Text innen liegen würde und sich nach innen ausdehnen würde
Gelöst, es geht mit dominant-baseline:
Code:
        <svg viewBox="0 0 420 210" xmlns="http://www.w3.org/2000/svg">
            <path id="top-curve" d="M 10 210 A 200 200 0 0 1 420 210" stroke-width="0" fill="transparent" />
            <text textLength="628" lengthAdjust="spacing" dominant-baseline="hanging" text-anchor="middle">
                <textPath startOffset="50%" xlink:href="#top-curve">1234567890</textPath>
            </text>
        </svg>
Zusätzlich habe ich mit lengthAdjust und textLength die Ziffern gleichmäßig über den Bogen verteilt.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück