Ist es irgendwie machbar, dass man mit CSS einen Text, um genauer zu sein Zahlen als Grafiken darstellen lässt?
Hier mal ein Beispiel, was ich meine:
Nehmen wir an, ich möchte auf meiner Seite die Zahl "52361249" anzeigen lassen. Da dies aber langweilig aussieht, würd ich das gern so aussehn lassen:
Meine Frage jetzt:
Wo soll ich anfangen... könnt ihr mir helfen? ^^
Möchtest du nur die Zahl anzeigen lassen oder das es immer weiter zählt ?
Wenns nur die Zahl ist füg doch einfach die Grafik ein :)
Anosnsten würde ich es mal mit Javascript versuchen.
Text und Zahlen als Bilder darzustellen ist schlechter Stil und gilt als unhöflich (Übrigens genau wie dein fettes Logo unter jedem deiner Beiträge, welches das Lesen erschwert).
Entsprechend gibt es dafür auch keine HTML / CSS Lösung.
Am sinnvollsten erscheint mir eine Schriftart zu suchen, die die Zahlen ähnlich darstellt, wie zum Beispiel
Du müsstest natürlich eine Schriftart finden, die du allen Besuchern zur Verfügung stellen kannst.
Ansonsten könntest du eine Monospace-Schriftart entsprechend mit CSS gestalten. Bei Monospace-Schriftarten haben alle Buchstaben / Zahlen die gleiche Breite. Viel Aufwändiger als Zahlen automatisiert in Grafiken umzuwandeln sollte das nicht sein.
Hab gerade keine Zeit dir etwas Code zu liefern.
Aber mal etwas Theorie, vielleicht schaffst du es damit ja auch.
Also erstmal musst du mit einer schleife jede Ziffer deiner Zahl ausgeben lassen. Dann müsstest du ein Array von 0 - 9 haben. Und in diesem Array hast du für jede Zahl diese Grafik. Du wirst ja für jede Zahl denke ich eine Grafik haben.
Dann musst du mit einer schleife deine Zahl durchgehen und dann jede Ziffer mit dem Eintrag aus dem Array ersetzen
Nicht kopieren, es ist nur pseudocode. Also es wäre eine Möglichkeit. Vielleicht bringt dich das ja schon weiter. Ansonsten musst du bis heute Abend warten, da kann ich dir es etwas genauer erklären
ich habe mal eine schlichtere Lösung als scbawik erstellt, die dadurch aber auch einfacher anzupassen ist, wenn zum Beispiel die Schriftgröße geändert werden soll. Zudem ist für jedes Zeichen nur ein span-Element erforderlich.
Um Buchstaben und Zahlen zu berücksichtigen habe ich einen Monospace-Font gewählt, da bei dem alle Zeichen die selbe Breite haben.
Außerdem werden alle Buchstaben in Großbuchstaben umgewandelt. Buchstaben wie f, g, j. u.s.w sehen auf den Tafeln nicht so schön aus und waren in der Praxis auch weniger gebräuchlich.
Ich habe es leider nicht hinbekommen den mittleren Querstrich aus einem border-Element zu erstellen. Die Lösung aus Unterstrichen gefällt mir nicht so gut. Vielleicht fällt dazu ja noch jemandem eine Lösung ein.
Ich habe es leider nicht hinbekommen den mittleren Querstrich aus einem border-Element zu erstellen. Die Lösung aus Unterstrichen gefällt mir nicht so gut. Vielleicht fällt dazu ja noch jemandem eine Lösung ein.
Statt "rem" würde ich hier übrigens eher "em" nehmen. Dann lässt es sich als einzelne Komponente beliebig skalieren.
Achja, im Safari 6 (und wahrscheinlich andere ältere Modelle) funktioniert es noch nicht so gut, liegt aber wahrscheinlich an der Flexbox.
Mit den richtigen Fallbacks würde es sicher funktionieren.
EDIT: Okay, habe gerade geschockt festgestellt dass ich auf der Arbeit ein zwei Versionen altes OS verwende. Dachte es wäre nur eine Version älter...
Ähm, du kannst der Komponente (<section>) dann ja als Standard-Schriftgröße deine 4rem geben…
Mit em könntest du es auf beliebigen Websites verwenden, welche unterschiedliche Schriftgrößen haben und die Klapptext-Komponente unabhängig davon skalieren. Mit rem hat es immer Auswirkungen auf die ganze Seite.
Das ist ein absoluter Nachteil.
Ich habe kein Problem mit rem fürs Layouten, aber um etwas abzukapseln/weiterzuverwenden ist es nicht geeignet.
@MrMurphy Bisher ganz gut. Danke für die ganze Hilfe. Jetzt brauch nurnoch bei zwei Kleinigkeiten Hilfe:
Ich werd vorher erstmal erklären was ich überhaupt mach ;):
Ich habe eine Seite erstellt in dessen Mitte die Anzahl der Abonnenten eines YouTube Kanals angezeigt wird... Über die YouTube API. Ich hab mit GIMP ein Hintergrundbild erstellt in dessen Mitte ein Feld ist, in dem später die Abozahl drinne steh soll. Ich werd einfach hier mal alle Codes einbinden:
Da sich die Seite (frame.html) immer automatisch aktualisieren soll, ohne dass der ganze Tab sich neu lädt hab ich sie in die index.html eingbunden damit sich nur der Frame aktualisiert (nciht wundern: vorher war frame.html die index.html):
@import url(http://fonts.googleapis.com/css?family=Droid+Sans+Mono);
@media all {
/* Neue HTML5-Elemente für ältere Browser als Block-Elemente übergeben */
header, nav, main, aside, footer, section, article, figure, figcaption, audio, video {
display: block;
}
* {
box-sizing: border-box;
}
html {
font-size: 120%;
}
body {
padding: 0;
}
section {
line-height: 1;
/*font-family: monospace;*/
/*font-family: sans-serif;*/
/*font-family: monospace sans-serif;*/
font-size: 4rem; /*Größe von Punkt und Komma*/
display: flex;
flex-wrap: wrap;
align-items: flex-end;
}
span {
color: white;
background-color: black;
font-family: 'Droid Sans Mono';
font-size: 5rem;
font-weight: bold;
text-transform: uppercase;
line-height: 1;
overflow: hidden;
position: relative;
padding: 0.2rem 0.8rem;
border: 1px solid black;
border-radius: 0.4rem;
margin: 0.4rem;
}
span:before {
font-size: 1rem;
content: "___________________";
color: red; /*kräftige Farbe zum Testen*/
color: silver;
position: absolute;
top: 32%;
left: -0.5rem;
}
}
/* Vorlage zum Kopieren für Media-Query */
@media only screen and (max-width: 0px) {
}
So jetzt zum Problem:
Der Counter sollte eigentlich genau in der Mitte sein, also horizontal und vertikal... Ich hab mich schon fast todgegooglet, aber nichts gefunden, deshalb hab ich alternativ "fixed; left: 48%; top: 49%;" genommen.
Das zweite Problem ist, dass ich die JSON, die ich aufrufe direkt in der Code eingebunden wird, sodass die Schriftart die Zahlen in nur einem Kästchen anzeigt, anstatt in mehreren :(.
Ich hoffe das hier mir weiterhin so super helfen könnt :)
PS: Nicht wundern warum ich SemperVideo's Abozahl eingebunden hab. Das war gerade nur ein Kanal der mir so eingefallen ist, der genug Abos hat um eine Kommazahl hinzubekommen, die nicht zu groß ist
Da sich die Seite (frame.html) immer automatisch aktualisieren soll, ohne dass der ganze Tab sich neu lädt hab ich sie in die index.html eingbunden damit sich nur der Frame aktualisiert (nciht wundern: vorher war frame.html die index.html):
Völlig unnötig. Du sendest einen AJAX Request und kannst dir das Result ohne Seitenreload wiedergeben lassen. Im Gegenteil birgt der Hinweis auf Framesets die Gefahr, dass Leute wie ich sich die Frage gar nicht erst anschauen.
Der Counter sollte eigentlich genau in der Mitte sein, also horizontal und vertikal... Ich hab mich schon fast todgegooglet, aber nichts gefunden, deshalb hab ich alternativ "fixed; left: 48%; top: 49%;" genommen.
Ohne die Seite gesehen zu haben, kann ich dir mit an Sicherheit grenzender Wahrscheinlichkeit sagen, dass sich das ohne position:abolute/fixed, top oder left lösen lässt.
Das zweite Problem ist, dass ich die JSON, die ich aufrufe direkt in der Code eingebunden wird.
Wird er nicht. Du erhältst ein JSON mit keys(s) und value(s) zurück. Beim value wird es sich wahrscheinlich um einen String handeln, den du im success Handler deines AJAX Calls beliebig bearbeiten kannst.
/Hint 1: Vereinfache den Code. Lösche den Frame und rufe den AJAX Call direkt aus der index.html auf. Schmeiss das HTML aus der Response und lasse dir das Ergebnis mit einem console.debug(data) wiedergeben. Dann siehst du direkt, was ankommt.
/Hint 2: MrMurphy schreibt gerne Code Snippets, welche die Leute copy&pasten können. Die Zeit und Lust hat dazu aber nicht jeder. Der normale Weg ist, dass der Fragesteller einen eigenen Ansatz postet, aus dem hervorgeht, dass er sich mit der Materie bereits eingehend beschäftigt hat.
Diese Seite verwendet Cookies, um Inhalte zu personalisieren und dich nach der Registrierung angemeldet zu halten. Durch die Nutzung unserer Webseite erklärst du dich damit einverstanden.