Wiem, że można to dość łatwo rozwiązać za pomocą Javascript, ale interesuje mnie tylko czyste rozwiązanie CSS.
Chcę sposób dynamicznie zmieniać rozmiar tekstu, aby zawsze mieścił się w stałym div. Oto przykładowy znacznik:
<div style="width: 200px; height: 1em; overflow: hidden;">
<p>Some sample dynamic amount of text here</p>
</div>
Myślałem, że może to być możliwe, określając szerokość kontenera w ems i sprawiając, że rozmiar czcionki odziedziczy tę wartość?
width
Wem
s rzeczy przechodzi na odwrót. Towidth
zależy odfont-size
. @JosephSilber Właśnie tak myślałem.Odpowiedzi:
Właśnie dowiedziałem się, że jest to możliwe przy użyciu jednostek VW. Są to jednostki związane z ustawieniem szerokości rzutni. Istnieją pewne wady, takie jak brak starszej obsługi przeglądarki, ale jest to zdecydowanie coś, co należy poważnie rozważyć. Ponadto nadal możesz zapewnić rezerwy dla starszych przeglądarek, takich jak:
http://css-tricks.com/viewport-sized-typography/ i https://medium.com/design-ux/66bddb327bb1
źródło
font-size:calc(100% + 2vw);
podobne czynności. To trochęmin-font-size
. Obsługa przeglądarkicalc
jest podobna dovw
.div
(200px). Jak to rozwiązuje ten problem?CSS3 obsługuje nowe wymiary względem portu widoku. Ale to nie działa w Androidzie <4.4
3.2vmax = Większa z 3.2vw lub 3.2vh
patrz css-tricks.com / .... a także spójrz na caniuse.com / ....
lub
Użyj zapytania o media. Najprostszym sposobem jest użycie wymiarów w% lub em. Wystarczy zmienić podstawowy rozmiar czcionki, wszystko się zmieni.
Użyj wymiarów w % lub em . Wystarczy zmienić podstawowy rozmiar czcionki, wszystko się zmieni. W poprzednim można po prostu zmienić czcionkę ciała, a nie h1 za każdym razem, lub pozwolić, aby podstawowy rozmiar czcionki był domyślny dla urządzenia i spoczywał w nich
zobacz kyleschaeffer.com / ...., aby uzyskać więcej informacji na temat em, px i%
źródło
Możesz być zainteresowany tym
calc
podejściem:gotowy. Zmieniaj wartości, aż pasują do Twojego gustu.
Źródło: https://codepen.io/CrocoDillon/pen/fBJxu
źródło
Jedynym sposobem byłoby prawdopodobnie ustawienie różnych szerokości dla różnych rozmiarów ekranu, ale takie podejście jest dość niedokładne i powinieneś użyć rozwiązania js.
źródło
Wiem, że zastanawiam się od dawna martwe pytanie, ale miałem to samo pytanie i chciałem coś dodać. Proszę, nie zbanuj mnie za to, uważam, że było to wystarczająco ważne, aby uzasadnić tę odpowiedź, w razie potrzeby usunę ją. @Joseph Silber się myli, kodowanie wszystkich możliwości jest realnym sposobem na zrobienie tego. Powodem jest to, że tak naprawdę nie ma nieskończonych możliwości. Technicznie są, ale 99% odwiedzających będzie korzystało ze standardowej rozdzielczości. Jest to podwójnie prawdziwe w przypadku urządzeń mobilnych (główny powód elastycznego projektowania stron internetowych), ponieważ większość mobilnych systemów operacyjnych uruchamia aplikacje na pełnym ekranie bez zmiany rozmiaru okna.
Ponadto wysokość jest praktycznie nieistotna ze względu na pasek przewijania (do tego stopnia, że od razu opuszczałbym stronę internetową, która miała więcej niż 4 lub 5 stóp długości, ale w większości jest to prawda), więc musisz się tylko martwić o szerokość. I tak naprawdę, jedyne szerokości, które musisz zakodować to: 240, 320, 480 (dla starszych iThings), 640, 800, 1024, 1280, 1440, 1600, 1920, 2048, 2560. Nawet nie zawracaj sobie głowy 4k, zbyt mocno rozleje twoje zdjęcia, a rozmiar 2560 rozciągnięty do 100% szerokości wygląda dobrze na monitorze 4k (przetestowałem to). Nie przejmuj się także 720 (720x480), jak sugerował poprzedni plakat. Jest to rozdzielczość używana prawie wyłącznie przez aparaty cyfrowe, a nawet wtedy jest bardzo rzadka.
Jeśli ktoś używa egzotycznej rozdzielczości, prawie każdy renderer wykonany w ciągu ostatnich 15 lat zaokrągli w dół, więc jeśli ktoś ma szerokość ekranu, powiedzmy. 1100, ładuje regułę 1024 CSS, twoja strona nie powinna się zepsuć. To sprawia, że rozliczanie się z egzotycznych rozdzielczości nie jest konieczne, a próba stworzenia responsywnej reguły jest niepotrzebna, a pomysł, że musisz kodować każdą możliwą konfigurację piksel po pikselu, jest absurdalny, chyba że ktoś używa przeglądarki internetowej tak przestarzałej, że Twoja witryna prawdopodobnie nie załaduje się na i tak wszystko.
źródło
Dla porównania rozwiązanie inne niż CSS:
Poniżej znajduje się część JS, która zmienia rozmiar czcionki w zależności od długości tekstu w kontenerze.
Codepen z nieco zmodyfikowanym kodem, ale taki sam pomysł jak poniżej:
Dla mnie wywołuję tę funkcję, gdy użytkownik dokonuje wyboru w menu rozwijanym, a następnie div w moim menu jest zapełniany (w tym miejscu pojawia się tekst dynamiczny).
Ponadto używam także elips CSS („...”), aby obciąć jeszcze dłużej tekst, tak jak poniżej:
Ostatecznie:
Krótki tekst: np. „JABŁKA”
W pełni renderowane, ładne duże litery.
Długi tekst: np. „JABŁKA I POMARAŃCZE”
Pobiera zmniejszone o 70%, dzięki powyższej funkcji skalowania JS.
Super długi tekst: np. „JABŁKA I POMARAŃCZE I BANAN ...”
Pobiera zmniejszone o 70% ORAZ zostaje obcięte za pomocą elips „…”, dzięki powyższej funkcji skalowania JS wraz z regułą CSS.
Możesz także zbadać grę z odstępami między literami CSS, aby zawęzić tekst przy zachowaniu tego samego rozmiaru czcionki.
źródło
Jak wielu wspomniało w komentarzach do posta @ DMTinter, OP pytał o liczbę („ilość”) zmieniających się znaków. Pytał także o CSS, ale jak wskazał @Alexander, „nie jest to możliwe tylko z CSS”. O ile mogę powiedzieć, wydaje się to w tej chwili prawdą, więc wydaje się również logiczne, że ludzie chcieliby wiedzieć następną najlepszą rzecz.
Nie jestem z tego szczególnie dumny, ale działa. Wydaje się, że jest to zbyt duża ilość kodu, aby to osiągnąć. To jest rdzeń:
Oto JS Bin: http://jsbin.com/pidavon/edit?html,css,js,console,output
Proszę zasugerować możliwe ulepszenia (nie jestem zainteresowany wykorzystaniem płótna do pomiaru tekstu ... wydaje się jak za dużo narzutu (?)).
Dzięki @Pete za funkcję MeasureText: https://stackoverflow.com/a/4032497/442665
źródło
To rozwiązanie może również pomóc:
To działało dla mnie dobrze!
źródło
Wypróbuj bibliotekę RFS (dla responsywnego rozmiaru czcionki) autorstwa MartijnCuppens, która być może zostanie zaimplementowana w Bootstrap
źródło
użyj tego równania.
Dla czegokolwiek większego lub mniejszego niż 1440 i 768 możesz albo nadać mu wartość statyczną, albo zastosować to samo podejście.
Wadą rozwiązania vw jest to, że nie można ustawić współczynnika skali, powiedzmy, że 5vw przy rozdzielczości ekranu 1440 może skończyć się czcionką o wielkości 60px, czcionką pomysłu, ale kiedy zmniejszysz szerokość okna do 768, może to skończyć się 12 pikseli, a nie minimum, którego chcesz. Dzięki takiemu podejściu możesz ustawić górną i dolną granicę, a czcionka będzie się skalować między nimi.
źródło
Utwórz tabelę odnośników, która oblicza rozmiar czcionki na podstawie długości ciągu wewnątrz
<div>
.Dostosuj i dostrój wszystkie parametry za pomocą testu empirycznego.
źródło