Es gibt keine super einfache standardisierte Methode, Web-Typografie auf einem Kreis (oder einer beliebigen Kurve) zu setzen. Aber es ist machbar! Hier werden wir eine Methode erkunden. Aber sei gewarnt, wir werden etwas CSS3 und JavaScript verwenden und uns nicht darum kümmern, ältere Browser, die einige der benötigten Technologien nicht unterstützen. Wenn Sie an so etwas für ein echtes Projekt interessiert sind, ist diese Art von Dingen wahrscheinlich immer noch am besten mit einem Bild mit richtigem Alt-Text oder einer ordnungsgemäßen Feature-Erkennung bedient, die das Bild für diese ausgefallene Technik in Browsern, die sie bewältigen können, umschalten kann.
Ein Beispiel

Gehen wir etwas Einfacheres vor.
Der gesamte Prozess
Nehmen wir als Beispiel einen einfachen Satz

Stellen Sie sich vor, wir würden die Wörter, die wir in einem Kreis setzen wollten, nehmen und in einzelne Buchstaben zerlegen.

Stellen wir sicher, dass jede Box exakt gleich groß ist, indem wir eine nichtproportionale Schriftart verwenden.

Machen wir nun jede dieser Boxen lang, wie ein Fahrradspeiche.

Dann bündeln wir all diese Speichen, sodass sie übereinander liegen.

Stellen Sie sich nun vor, wir befestigen die Enden dieser Speichen an einer zentralen Nabe. Wir drehen jede Speiche ein kleines bisschen mehr als die letzte.

Wenn wir das übergeordnete Element gegen den Uhrzeigersinn drehen und unsere roten Hilfslinien entfernen, haben wir etwas Text auf einem Kreis!

Technische Details
Um jeden Buchstaben so manipulieren zu können, müssen Sie ihn in ein anderes Element einpacken. Lettering.js kann das einfach für Sie erledigen (jQuery und Plugin-Abhängigkeit).
Sie haben also das hier.
<h1>Established 2012</h1>
Sie laden jQuery und Lettering.js und rufen dann dies auf
$("h1").lettering();
Und es wird im DOM zu diesem hier
<h1>
<span class="char1">E</span>
<span class="char2">s</span>
<span class="char3">t</span>
<span class="char4">a</span>
<span class="char5">b</span>
<!-- you get the idea -->
</h1>
Das funktioniert wirklich nur gut mit nichtproportionalen Schriftarten. Selbst wenn Sie die Nichtproportionalität erzwingen, indem Sie jeden Span eine feste Breite geben, ist der Abstand zwischen den Buchstaben falsch und es sieht seltsam aus. Sie könnten es manuell mit Kerning versehen, indem Sie jede Drehung manuell anpassen, wenn Sie verrückt wären.
Für jeden Span möchten Sie die Höhe festlegen, alle an derselben Stelle positionieren und dann den transform-origin auf den unteren Rand der Box setzen (damit sie sich um diese Nabe drehen. Herstellerpräfix hinzufügen).
h1 span {
font: 26px Monaco, MonoSpace;
height: 200px;
position: absolute;
width: 20px;
left: 0;
top: 0;
transform-origin: bottom center;
}
Jetzt brauchen Sie eine ganze Menge Klassenauswähler, die jeweils ein bisschen mehr drehen.
.char1 { transform: rotate(6deg); }
.char2 { transform: rotate(12deg); }
.char3 { transform: rotate(18deg); }
/* and so on */
Siehe den Pen Set Text on a Circle – 2012 von CSS-Tricks (@css-tricks) auf CodePen.
Aber das kann mühsam und unübersichtlich werden. Mit Sass und Compass ist es ein Drei-Zeiler
@for $i from 1 through 100
.char#{$i}
+transform(rotate(($i*6)+deg))
Update
Hier ist ein Sass (.sass) Mixin von Chris Eppstein für ein erweiterbareres Textrotations-Mixin
=rotated-text($num-letters: 100, $angle-span: 180deg, $angle-offset: 0deg)
$angle-per-char: $angle-span / $num-letters;
@for $i from 1 through $num-letters
.char#{$i}
+transform(rotate($angle-offset + $angle-per-char * $i))
Das ist ein sehr netter Trick.
Runde Logos sind im Internet mittlerweile sehr groß geworden. Das sollte es jetzt noch besser machen!
Gut wäre ein JavaScript-Plugin, das das auch macht; Sie geben einfach die Höhe (Radius) an und es erledigt die Arbeit für Sie.
Ja, ein JavaScript-Plugin wäre großartig. :)
Dieser Artikel ist jedoch sehr nützlich. Danke!
Wenn mein Köpfchen richtig versteht, ist mein Beispiel wegen Helvetica immer noch schief?
Transform origin hat geholfen, aber Text sieht immer noch wack aus.
http://codepen.io/grayghostvisuals/pen/volume-knobs/34
Fantastisches Beispiel, Grey Ghost! Sie sind vielleicht schon darüber informiert, aber ich glaube, ein Teil des Grundes, warum die Zahlen auf den Zifferblättern etwas schief aussehen, ist, dass Sie
i-Tags verwendet haben und diese standardmäßig einen `font-style` von "italic" haben.Wenn Sie
i {font-style: normal;}
zu Ihrem CSS hinzufügen, verbessert es die Sache (meiner Meinung nach). Vielleicht immer noch nicht ganz perfekt, aber es würde die Mehrheit der Augen täuschen...
Ja, die kursive Schrift lässt es komisch aussehen, aber es ist trotzdem eine tolle Idee.
Hier ist ein weiterer Tipp für Sie
Beim Überfahren mit der Maus drehen sich die Knöpfe, was großartig aussieht, aber der Schatten wird ebenfalls mitgedreht. Das lässt den ganzen Knopf um eine falsche Betonung schwanken. Sie können dies vermeiden, indem Sie ein separates Fake-Element direkt hinter dem Knopf erstellen, um einen Schatten zu werfen, und dieses Element nicht drehen. Ich denke, das könnte nur mit Pseudo-Elementen erreicht werden, aber ich habe sie bereits für den äußeren Ring verwendet.
Sehr coole Technik :)
Es könnte sich lohnen, sich auch SVG für Text entlang eines Pfades anzusehen. Siehe meine Text um einen Kreispfad Demo (Bonus: Übelkeit erregende CSS-Animation).
@david,
Tolles Beispiel! Das ist wirklich eine großartige Nutzung von SVG. Ich glaube, ich werde das für zukünftige Referenzen in meinen eigenen Codepen kopieren :)
Wow, erstaunlich.
Ich möchte so etwas machen, wie?
Es ist immer gut, die Grenzen einer Technik zu testen, aber ich würde sagen, das ist nichts für Produktionsseiten. Und wird es auch niemals sein.
Jeden Buchstaben in einen Span zu setzen, was macht das für die Barrierefreiheit? Wahrscheinlich wird der Text unleserlich. SEO? Den Bach runter.
SVG ist das Werkzeug für diese Aufgabe. Und ja, Google indiziert mittlerweile SVG.
Tolle Arbeit!
@Billy: Ich habe vor einiger Zeit ein jQuery-Plugin namens Arctext.js entwickelt, das ähnlich funktioniert und bei dem der Text auch animiert werden kann.
Sehr ähnlich wie das hier, nur dass man kein CSS schreiben muss
aber es ist eine gute Übung, Code und coole Effekte von Grund auf zu erstellen, nicht wahr.
Hallo Dan. Das war ein wunderbarer Vorschlag. Ich habe nach etwas Ähnlichem gesucht. Ich kann sogar Links aus dem Code erstellen. Vielen Dank für das Teilen
SVG!
Hervorragend, genau das, was ich gesucht habe. Danke, Kumpel ;)
Hier ist mein Versuch, das mit einer Schriftart mit variabler Breite zu machen
http://codepen.io/carlbennettnz/pen/1/2
Dennoch stimme ich den anderen zu, dass SVG ein weitaus besserer Weg wäre, dies zu tun.
Hey,
Chris, das hat mir gefallen…!
Erstaunliche Technik, nur schade, dass die Schriftart etwas verpixelt ist, zu sehr, als dass es sich lohnen würde, sie anstelle eines Bildes zu verwenden.
<grammarnazi-modus>
sich nicht darum scheren, ältere Browser, die nicht unterstützen
-> Browser, die nicht unterstützen …
</grammarnazi-modus>
Schöner Artikel aber.
Hallo!
Ich habe auf CodePen gesagt, diese Art von Tricks ist ziemlich nett. Schade, dass es eine Qual ist, das ohne ein Tool wie SASS zu tun. Schleifen (insbesondere For-Schleifen) müssen eines Tages in CSS-Standards implementiert werden.
Trotzdem, danke für das Teilen, super Demo!
Sie sind es, irgendwie. Sie können Zähler innerhalb von `nth-child(n)`-Situationen verwenden, um etwas Ähnliches wie eine Schleife zu erhalten.
Sehr coole Technik. Ich habe sie mit ems refaktoriert, um die Spirale rekursiv zu zeichnen, was zu einer viel kleineren CSS- und HTML-Datei führt. Ich liebe Sass-Schleifen, aber sie können eine Menge Code ausspucken.
http://codepen.io/scottkellum/pen/101/
Ein weiterer extrem guter Beitrag. Ich werde das ausprobieren. Danke.
Warum ist das so verdammt genial?
Die Kombination aus SCSS, Compass und CSS3 ist einfach erstaunlich. Tolle Arbeit, Chris.
Das ist wunderschön. Wie ein Leser oben schrieb – es ist nicht so gut für SEO und natürlich kann man immer eine Grafik verwenden. Nichtsdestotrotz bin ich beeindruckt. Was für eine schöne und elegante Verwendung von CSS.
Das ist großartig.
Aber wir können jedes Zeichen mit einer einzigen CSS-Klasse drehen. Es ist nicht erforderlich, für jedes Zeichen eine eigene CSS-Klasse zu erstellen.
Versuch es hier
http://jsfiddle.net/3EUfs/
Schön! Ich denke, ich werde das in Zukunft verwenden! :)
Wenn Ihnen nur moderne Browser wichtig sind, ist dies mit SVG viel besser bedient. Hier ist, wie ich es für meine Aufkleber verwendet habe: http://lea.verou.me/sticker.svg
Das ist ein verdammt cooler Trick.
Das ist wirklich cool, aber wie Gilbert oben sagte, was sind die Auswirkungen auf SEO-Zwecke?
Ich schätze, Sie würden dies für ein Logo verwenden und normalerweise sind Logos Bilder mit Alt-Text, daher schadet dies Ihrer SEO wahrscheinlich nicht so sehr, wenn überhaupt?
Es gibt jetzt eine Menge Kommentare zu diesem Beitrag, die alle auf eine dieser beiden Positionen hinauslaufen
a. „Das ist so cool“, „Ich werde es benutzen“
b. „SVG ist viel besser für die gestellte Aufgabe geeignet“.
Da es immer noch viele Kommentare von der (a)-Fraktion gibt (Leser, die kommentieren, ohne vorherige Kommentare zu lesen?), wäre es zu viel verlangt, den Einführungsparagraphen um eine Erwähnung der Überlegenheit von SVG und nicht nur von Bildern mit Alt-Text zu ergänzen?
Um es zu wiederholen, warum ist SVG besser?
1. SEO
2. Barrierefreiheit
3. Einfachheit, wodurch Text leichter aktualisiert, wiederverwendet oder angepasst werden kann.
4. Leistung: Sie können dem Text weitere grafische Effekte hinzufügen.
Ich wünschte, das würde funktionieren
Dann setzen Sie den Zähler so, dass er um die Anzahl der benötigten Grad inkrementiert, um es zum Laufen zu bringen.
Ich bin mit LESS CSS noch etwas neu, also entschuldigen Sie meine Unwissenheit, aber könnten Sie eine ähnliche Variablen-Gleichung wie die von Ihnen angegebene mit Sass erstellen?
Ich sollte klarstellen, ich frage mich nur, ob es möglich ist. Ich bitte niemanden, es tatsächlich zu schreiben.
LESS macht keine Schleifen wie traditionell. Es mag eine ausgefallene Methode geben, dies mit rekursiven Mixins zu tun, aber es sähe etwas umständlich aus (meine Meinung).
Das ist mit Sass cool, aber reines CSS zu schreiben ist einfach verschwendet.
Gut, habe es in SCSS ausprobiert
Großartig, großartig, Spiraltext hat meinen Tag gemacht! ;)
Ich bin sicher, Google wird Sie dafür lieben :3
-Miles
Das ist cool, aber nicht praktisch. Es wird mich weniger Zeit kosten, dieses Logo in Illustrator oder Photoshop zu erstellen, als mit dem Code dafür herumzuspielen.
Super cool! Danke für das Teilen. Ich wünschte, andere Kommentatoren wären keine Hater und würden dieses CSS einfach für das schätzen, was es ist. Wir sind hier alle erfahrene Entwickler und können eine ordnungsgemäße Anwendung für diesen Trick finden.
Wow! Interessant und auch ein perfektes Beispiel, gute Arbeit.
Übrigens glaube ich, wir können mit einer einzigen CSS-Klasse coole Effekte erzielen.
Natürlich, benutzt ein paar CSS-Tricks, Jungs.
Fantastischer Trick und erstaunliche Ergebnisse. Text sieht auf einem Kreis großartig aus.
Wie einige sagten, ist das mit SVG einfacher und konsistenter. Wenn Sie Raphael JS verwenden, können Sie es sogar für IE6 zum Laufen bringen.
Das ist etwas abseits des Themas: Aber wie heißt das Farbschema, das CodePen für die Syntaxhervorhebung verwendet? Es ist wirklich nett. :)
Text auf einer Spirale zu setzen ist eine Achterbahnfahrt
Ich versuche, Mixins zu verstehen… Ich habe eine .SCSS-Variante des rotierten Textbeispiels und bin mir nicht sicher, wie ich es „ausführen“ kann. Im Moment fügt es keinen CSS-Code für die .char# hinzu.
Alles, was ich versuche, verursacht einen Fehler in CodeKit. Hier ist, was ich habe
Was muss ich noch „tun“, um das zu erreichen?
Netter Trick. Aber das krümmt nur einen Satz. Ist es möglich, eine Reihe von divs zu krümmen, die viele Sätze ergeben? Z.B. Hairy Croc (0 Grad); Blue Cat (30 Grad); Brown Fox (60 Grad); Purple Lizard (90 Grad); White Toothless Lion (120 Grad); Green Dingo (150 Grad)…