Projektuję wiele prostych pojedynczych stron internetowych na sprzedaż lub pocztę elektroniczną. Często mam problemy z nagłówkami i pożądanymi podziałami linii przy różnych szerokościach mediów.
Na przykład mógłbym mieć taki nagłówek, jak:
Nasz nowy rzecz jest najlepszą rzeczą od krojonego chleba!
Bez absolutnie braku uwagi na łamanie linii, łamanie linii wygląda następująco:
Nasz nowy rzecz jest najlepszą rzeczą od
krojonego chleba!
W pełnym rozmiarze strony chciałbym przerwać linię po „the”. Tworzenie dwóch linii.
Nasz nowy
rzecz jest najlepszą rzeczą od krojonego chleba!
W przypadku ekranu o średniej szerokości złamałbym dwa razy:
Nasz nowy
rzecz jest najlepszą rzeczą
od krojonego chleba!
W przypadku jeszcze węższych ekranów łamałbym się po „nowym”, po „thingamabob” i po „thing”. Tworzenie czterech linii.
Nasz nowy
thingamabob
to najlepsza rzecz
od czasu krojonego chleba!
I naprawdę nie chcesz używać znaczników Break ( <br>
), ponieważ takie trudne ustawianie przerwy we wszystkich rozmiarach. Do tej pory używałem zapytań o media i szerokość procentowych dla różnych h1
- h5
znaczniki tak, że szerokość sił tagów przerwy. Ale wydaje mi się to „hacking” ( czasami jest również bardzo temperamentne w oparciu o rzeczywisty tekst).
Jaki jest najlepszy sposób kontrolowania podziałów linii bez twardego kodowania ich w HTML?
Najlepszą praktyką jest potwierdzenie, że nie masz rzeczywistej kontroli nad łamaniem linii w sieci i najlepiej jest projektować z myślą o tym.
Każde przeciwne rozwiązanie będzie niezmiennie nieznośne. Jak będzie być hack jak HTML nie przywiera do zdefiniowanych przez użytkownika podziały wiersza poza ciężko kodowania. Możesz to zrobić z JS dość łatwo. Skonfiguruj punkty przerwania z pustymi rozpiętościami z unikalnymi klasami, a następnie w oparciu o rozmiar rzutni, do której możesz wstawić tagi BR do każdego pożądanego zakresu.
Istnieje kilka stylów CSS, które będą działać w nowszych przeglądarkach, aby kontrolować sposób, w jaki przeglądarka obsługuje zawijanie wierszy, ale nadal nie da ci dokładnej kontroli, której szukasz w tej sytuacji.
Z drugiej strony, jeśli twoim celem nie jest kontrolowanie określonych podziałów linii, ale aby upewnić się, że blok tekstowy „układa się” we względnie równych wierszach, ustawiłbym szerokość DIV inaczej dla każdej rzutni. Nie będzie idealny, ale prawdopodobnie dość blisko i może być najlepszym kompromisem.
źródło
Jest do tego wtyczka jquery, Balance Text .
Jest to wtyczka stworzona przez Adobe,
text-wrap: balance;
stworzona wraz z propozycją Adobe, aby uzyskać opcję CSS, która działałaby tak jak funkcja Balance Ragged Lines w programie Adobe InDesign (brzmi świetnie, ale nawet jeśli zostanie zaakceptowana, miną lata, zanim przeglądarki ją obsługują).Wtyczka działa jednak teraz. Równoważy wszystkie elementy, które mają klasę
balance-text
, lub przy użyciu jQuery jak$('.some-elements').balanceText();
Oto oficjalna wersja demonstracyjna Adobe , wykorzystująca uzasadniony tekst .
Oto demo, które zrobiłem przy użyciu wyrównanego do lewej
<h1>
s - hit edit, aby zobaczyć kod. To pokazuje niektóre ograniczenia w momencie pisania:W demo 4 zobaczysz, jak wszystko w swoim bloku wyważony tekst jak
<a>
łącza,<span>
S lub nacisk podobnego<em>
,<strong>
,<b>
,<i>
etc zostanie usunięty.Ponadto, porównując wersje demo 1, 2 i 5, zobaczysz, że musisz użyć zarówno klasy CSS, jak i wywołania jQuery.
Wydaje się być umiarkowanie niezawodny, ale czasami nieładny - w chwili pisania czasami odsuwa się, gdy znajduje się w bocznej kolumnie, pozostawiając samotne sieroty (ale wydaje się, że działa przez ponad 95% czasu i jeszcze nie widziałem, żeby się ślizgało, z wyjątkiem gdy znajduje się w kolumnie bocznej) i z niewyjaśnionych powodów moje dema nie działają w Firefoksie, ale dema Adobe działają (dobrze w IE9 +, nie można teraz przetestować w IE8). Jeśli go użyjesz, weź pod uwagę czas testowania.
źródło
Muszę sobie z tym poradzić dość regularnie, z wkładem projektantów, którzy chcą, aby coś się zepsuło. Znalazłem najprostszy sposób, aby to zrobić, umieszczając przedział z klasą w tekście, a następnie dostosuj go
display: block;
do zapytań o media.Więc wyglądałoby to tak:
Potem miałbym CSS z czymś takim:
Nadal musisz przejść i dopracować, aby upewnić się, że wszystko idzie tak, jak chcesz dla wszystkich szerokości.
Jeśli jest to częsty problem, możesz utworzyć własny zestaw klas podziału linii, na przykład Twitter Bootstrap lub dowolny inny system siatki, którego używasz, modelując nazwy klas na podstawie jakiejkolwiek konwencji nazewnictwa, której używasz.
źródło
Możesz użyć JavaScriptu, aby wykryć szerokość ekranu i napisać poprawną wersję (z <br> takimi, jakie masz w swoim poście) do pustego diva przez innerHTML.
Niestety „pożądane przerwy sieciowe” i „najlepsze praktyki internetowe” nie pasują do siebie. Porzuć swoje perfekcjonistyczne pragnienie, aby każde słowo znalazło się we właściwym miejscu - jest po prostu zbyt wiele możliwości ekranu i zbyt wielu czytelników, którzy nie mają nastawienia projektanta, musisz nawet dbać o podziały linii w ich tytułach. Poszukaj Responsive Web Design, aby lepiej zrozumieć te problemy.
źródło
Moja obecna metoda ...
I CSS:
Szerokości trzeba czasami pewne korekty w oparciu o rzeczywisty tekst używany, ale jest to ogólny schemat używam. Zasadniczo zmniejsza szerokość
h1
znacznika, tak że linia łamie się tam, gdzie chcę, aby się złamała.To działa, wymaga jedynie dokładnego przetestowania, aby upewnić się, że przerwy występują w razie potrzeby. Ale w każdym razie potrzebne są dokładne testy. Tak więc niekoniecznie jest to więcej pracy w tym zakresie.
źródło
margin: 0 auto; text-align: center;
tylko raz poza zapytaniem medialnym i dotyczy to wszystkichMożesz dodawać
white-space: nowrap
i umieszczać<wbr>
w miejscach, w których chcesz zezwolić na łamanie linii. Jeśli to nie wystarczy i chcesz mieć dobrą kontrolę dzięki zapytaniom o media, nadal możesz dodawać takie klasy<wbr class="mobileOnly">
<wbr>
doc: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbrźródło