Ich weiß, dass dies mit Javascript ziemlich einfach gelöst werden kann, aber ich bin nur an einer reinen CSS-Lösung interessiert.
Ich möchte eine Möglichkeit, die Größe von Text dynamisch zu ändern, damit er immer in ein festes Div passt. Hier ist das Beispiel-Markup:
<div style="width: 200px; height: 1em; overflow: hidden;">
<p>Some sample dynamic amount of text here</p>
</div>
Ich dachte, dass dies möglicherweise möglich sein könnte, indem die Breite des Containers in ems angegeben und die Schriftgröße ermittelt wird, um diesen Wert zu erben.
width
inem
s-Dings geht umgekehrt. Es ist daswidth
, was davon abhängtfont-size
. @ JosephSilber Genau das habe ich mir gedacht.Antworten:
Ich habe gerade herausgefunden, dass dies mit VW-Einheiten möglich ist. Dies sind die Einheiten, die mit dem Festlegen der Breite des Ansichtsfensters verbunden sind. Es gibt einige Nachteile, wie z. B. mangelnde Unterstützung für ältere Browser, aber dies ist definitiv etwas, über das man ernsthaft nachdenken sollte. Außerdem können Sie für ältere Browser wie folgt Fallbacks bereitstellen:
http://css-tricks.com/viewport-sized-typography/ und https://medium.com/design-ux/66bddb327bb1
quelle
font-size:calc(100% + 2vw);
Ähnliches tun . Es ist irgendwiemin-font-size
. Die Browserunterstützung fürcalc
ist ähnlich wievw
.div
(200 Pixel) entspricht. Wie löst dies das Problem?CSS3 unterstützt neue Dimensionen, die sich auf den Ansichtsport beziehen. Aber das funktioniert nicht in Android <4.4
3,2 vmax = größer als 3,2 vw oder 3,2 vh
siehe css-tricks.com / .... und siehe auch caniuse.com / ....
oder
Verwenden Medienabfrage .Simplest Weg Dimensionen in% oder em zu verwenden. Ändern Sie einfach die Grundschriftgröße, alles wird sich ändern.
Verwenden Sie die Abmessungen in % oder em . Ändern Sie einfach die Grundschriftgröße, alles wird sich ändern. In der vorherigen Version konnten Sie einfach die Hauptschriftart und nicht jedes Mal h1 ändern oder die Basisschriftgröße auf die Standardeinstellung des Geräts zurücksetzen und alle in em ruhen lassen
Weitere Informationen zu em, px und% finden Sie unter kyleschaeffer.com / ....
quelle
Der
calc
Ansatz könnte Sie interessieren :getan. Passen Sie die Werte an, bis sie Ihrem Geschmack entsprechen.
Quelle: https://codepen.io/CrocoDillon/pen/fBJxu
quelle
Der einzige Weg wäre wahrscheinlich, unterschiedliche Breiten für unterschiedliche Bildschirmgrößen festzulegen, aber dieser Ansatz ist ziemlich ungenau und Sie sollten eine js-Lösung verwenden.
quelle
Ich weiß, dass ich eine lange tote Frage wiederbelebe, aber ich hatte dieselbe Frage und wollte etwas hinzufügen. Bitte verbieten Sie mich nicht dafür. Ich fand es wichtig genug, um diese Antwort zu rechtfertigen. Ich werde sie bei Bedarf löschen. @Joseph Silber ist falsch, das Codieren aller Möglichkeiten ist tatsächlich ein praktikabler Weg, dies zu tun. Der Grund ist, dass es tatsächlich keine unendlichen Möglichkeiten gibt. Technisch gesehen gibt es das, aber 99% Ihrer Besucher verwenden eine Standardauflösung. Dies gilt in zweifacher Hinsicht für Mobilgeräte (der Hauptgrund für reaktionsschnelles Webdesign), da auf den meisten mobilen Betriebssystemen Apps im Vollbildmodus ohne Fenstergrößenänderung ausgeführt werden.
Außerdem spielt die Höhe aufgrund der Bildlaufleiste keine Rolle (bis zu einem gewissen Punkt würde ich sofort eine Webseite hinterlassen, die länger als 4 oder 5 Fuß ist, dies gilt jedoch meistens), sodass Sie sich nur um die Breite kümmern müssen. Die einzigen Breiten, für die Sie codieren müssen, sind die folgenden: 240, 320, 480 (für ältere iThings), 640, 800, 1024, 1280, 1440, 1600, 1920, 2048, 2560. Machen Sie sich nicht einmal die Mühe 4k, es wird Ihre Bilder zu sehr aufblähen und die auf 100% Breite gedehnte Größe 2560 sieht auf einem 4k-Monitor gut aus (ich habe dies getestet). Kümmern Sie sich auch nicht um 720 (720 x 480), wie im vorherigen Poster vorgeschlagen. Es ist eine Auflösung, die fast ausschließlich von Digitalkameras verwendet wird, und selbst dann ist es sehr ungewöhnlich.
Wenn jemand eine exotische Auflösung verwendet, wird fast jeder Renderer, der in den letzten 15 Jahren hergestellt wurde, abgerundet. Wenn also jemand eine Bildschirmbreite hat, sagen wir. 1100, es wird die 1024 CSS-Regel geladen, Ihre Site sollte nicht brechen. Dies macht die Berücksichtigung exotischer Auflösungen unnötig, indem versucht wird, eine Reaktionsregel zu erstellen, und die Idee, dass Sie Pixel für Pixel für jedes mögliche Setup codieren müssen, ist lächerlich, es sei denn, jemand verwendet einen Webbrowser, der so veraltet ist, dass Ihre Website wahrscheinlich nicht geladen wird alles sowieso.
quelle
Als Referenz eine Nicht-CSS-Lösung:
Im Folgenden finden Sie einige JS, die die Größe einer Schriftart abhängig von der Textlänge in einem Container ändern.
Codepen mit leicht modifiziertem Code, aber der gleichen Idee wie unten:
Für mich rufe ich diese Funktion auf, wenn ein Benutzer eine Auswahl in einem Dropdown-Menü trifft und dann ein Div in meinem Menü ausgefüllt wird (hier tritt dynamischer Text auf).
Darüber hinaus verwende ich auch CSS-Ellipsen ("..."), um noch längeren Text abzuschneiden, wie zum Beispiel:
Also letztendlich:
Kurztext: zB "ÄPFEL"
Vollständig gerenderte, schöne große Buchstaben.
Langtext : zB "ÄPFEL & ORANGEN"
Wird über die obige JS-Skalierungsfunktion um 70% verkleinert.
Super langer Text: zB "APPLES & ORANGES & BANAN ..."
Wird um 70% verkleinert UND wird über die obige JS-Skalierungsfunktion zusammen mit der CSS-Regel mit "..." - Ellipsen abgeschnitten.
Sie können auch das Spielen mit CSS-Buchstabenabständen untersuchen, um den Text bei gleicher Schriftgröße enger zu gestalten.
quelle
Wie viele in den Kommentaren zu @ DMTinters Beitrag erwähnt haben, fragte das OP nach der Anzahl ("Anzahl") der sich ändernden Zeichen. Er fragte auch nach CSS, aber wie @Alexander anzeigte, "ist es nicht nur mit CSS möglich". Soweit ich das beurteilen kann, scheint dies zu diesem Zeitpunkt der Fall zu sein, daher scheint es auch logisch, dass die Leute das nächstbeste wissen möchten.
Darauf bin ich nicht besonders stolz, aber es funktioniert. Scheint eine übermäßige Menge an Code zu sein, um dies zu erreichen. Das ist der Kern:
Hier ist ein JS-Bin: http://jsbin.com/pidavon/edit?html,css,js,console,output
Bitte schlagen Sie mögliche Verbesserungen vor (ich bin nicht wirklich daran interessiert, Canvas zum Messen des Textes zu verwenden ... scheint wie zu viel Overhead (?)).
Vielen Dank an @Pete für die MeasureText-Funktion: https://stackoverflow.com/a/4032497/442665
quelle
Diese Lösung könnte auch helfen:
Es hat bei mir gut funktioniert!
quelle
Probieren Sie die RFS- Bibliothek (für reaktionsfähige Schriftgrößen) von MartijnCuppens aus, die möglicherweise in Bootstrap implementiert wird
quelle
Verwenden Sie diese Gleichung.
Für alles, was größer oder kleiner als 1440 und 768 ist, können Sie entweder einen statischen Wert angeben oder denselben Ansatz anwenden.
Der Nachteil bei der vw-Lösung besteht darin, dass Sie kein Skalierungsverhältnis einstellen können. Angenommen, ein 5vw bei einer Bildschirmauflösung von 1440 hat möglicherweise eine Schriftgröße von 60 Pixel, Ihre Ideenschriftgröße. Wenn Sie jedoch die Fensterbreite auf 768 verkleinern, kann dies zu einer Verkleinerung führen 12px, nicht das Minimum, das Sie wollen. Mit diesem Ansatz können Sie Ihre obere und untere Grenze festlegen, und die Schriftart skaliert sich dazwischen.
quelle
Erstellen Sie eine Nachschlagetabelle, die die Schriftgröße basierend auf der Länge der Zeichenfolge in Ihrer berechnet
<div>
.Passen Sie alle Parameter durch empirische Tests an und stimmen Sie sie ab.
quelle