Tworzę witrynę wielojęzyczną, a właściciel pomaga mi w tłumaczeniach. Niektóre z wyświetlanych wyrażeń wymagają podziału wiersza, aby zachować styl witryny.
Niestety właściciel nie jest informatykiem, więc jeśli zobaczy foo<br />bar
, jest szansa, że w jakiś sposób zmodyfikuje dane podczas tłumaczenia.
Czy istnieje rozwiązanie CSS (poza zmianą szerokości), które można zastosować do elementu, który pęka po każdym słowie?
(Wiem, że mogę to zrobić w PHP, ale zastanawiam się, czy jest sprytna sztuczka, o której nie wiem w CSS, aby osiągnąć to samo, być może w funkcjach CJK.)
EDYTOWAĆ
Spróbuję sporządzić diagram, co się dzieje:
---------------- ----------------
| Short Word | | Gargantuan |
| | | Word |
---------------- ----------------
Długie słowo łamie się automatycznie, krótkie nie. Chcę, żeby wyglądało to tak:
---------------- ----------------
| Short | | Gargantuan |
| Word | | Word |
---------------- ----------------
css
line-breaks
Ben
źródło
źródło
Odpowiedzi:
Posługiwać się
gdzie
<parent-width>
jest szerokością elementu nadrzędnego (lub dowolną wysoką wartością, która nie mieści się w jednej linii). W ten sposób możesz być pewien, że po jednej literze występuje nawet koniec wiersza. Działa z Chrome / FF / Opera / IE7 + (a prawdopodobnie nawet IE6, ponieważ obsługuje również odstępy między wyrazami).źródło
.parent { word-spacing: 100px; }
gdzie100px
jest szerokość elementu nadrzędnego. Problem polega na tym, że to rozwiązanie nie działa, jeśli masz płynnego rodzica.word-spacing: 100000px
a nie będziesz musiał się martwić, że rodzic będzie płynny pod względem szerokości. Ustawienie odstępu między wyrazami na 100% miałoby sens (byłoby to 100% szerokości rodzica), ale wartości wyrażone w procentach nie są obsługiwane dla tej właściwości css.word-spacing: 2em;
a przy szerokości mobilnej chcę, aby były jednowierszowe:word-spacing: unset;
Odpowiedź udzielona przez @HursVanBloob działa tylko z kontenerem nadrzędnym o stałej szerokości, ale zawodzi w przypadku kontenerów o płynnej szerokości .
Wypróbowałem wiele właściwości, ale nic nie działało zgodnie z oczekiwaniami. W końcu doszedłem do wniosku, że podanie
word-spacing
bardzo dużej wartości działa idealnie.lub w nowoczesnych przeglądarkach możesz użyć
vw
jednostki CSS (szerokość wizualna w% rozmiaru ekranu).źródło
Alternatywne rozwiązanie opisano w sekcji Oddziel zdanie do jednego słowa w wierszu , stosując
display:table-caption;
do elementuźródło
Spróbuj użyć
white-space: pre-line;
. Tworzy znak końca wiersza w każdym miejscu, w którym pojawia się koniec wiersza w kodzie, ale ignoruje dodatkowe białe znaki (tabulatory i spacje itp.).Najpierw napisz swoje słowa w oddzielnych wierszach kodu:
Następnie zastosuj styl do elementu zawierającego słowa.
Uważaj jednak, każdy podział wiersza w kodzie wewnątrz elementu spowoduje podział wiersza. Tak więc napisanie następującego spowoduje dodatkowy podział wiersza przed pierwszym słowem i po ostatnim słowie:
Jest świetny artykuł na temat sztuczek CSS wyjaśniający inne atrybuty spacji.
źródło
white-space
można odpowiedzieć na pytanie. Przepraszam, ale nie wiem jak.white-space: pre;
do wyświetlania tych podziałów " " tak, jak<pre>
zrobiłby to znacznik? To może zadziałać, a podział wiersza powinien wyglądać bardziej naturalnie dla tłumaczy niż plik<br />
. Postaram się edytować Twoją odpowiedź, aby ją dodać :)white-space: pre-line;
to prawdopodobnie byłoby bardziej odpowiednie, ponieważ ignoruje dodatkowe białe znaki w kodzie. Zaktualizuję odpowiedź.white-space: pre;
do IE 7.Jeśli chcesz mieć możliwość wyboru spośród innych rozwiązań oprócz podanych odpowiedzi ...
Alternatywną metodą jest nadanie kontenerowi szerokości 0 i upewnienie się, że przepełnienie jest widoczne. Wtedy każde słowo wypłynie z niego i znajdzie się w osobnym wierszu.
Możesz też użyć jednej z tych nowo zaproponowanych
width
wartości, pod warunkiem, że nadal będą istnieć w chwili, gdy to przeczytasz.źródło
Nie możesz kierować reklamy na każde słowo w CSS. Jednak z odrobiną jQuery prawdopodobnie mógłbyś.
Dzięki jQuery możesz zawijać każde słowo w a,
<span>
a następnie ustawić zakres CSS, dodisplay:block
którego umieściłby je w osobnym wierszu.Oczywiście w teorii: P.
źródło
:first-child
sztuczka lub coś ...https://jsfiddle.net/bm3Lfcod/1/
Dla tych, którzy szukają rozwiązania działającego w elastycznym kontenerze nadrzędnym z elementami podrzędnymi, które są elastyczne w obu wymiarach. na przykład. przyciski paska nawigacyjnego.
źródło
CSS
właściwość, jaką możesz dać. Podaj właściwość, która może spowodowaćbrowser reflow
Miałem ten sam problem i żadna z opcji tutaj nie pomogła. Niektóre usługi pocztowe nie obsługują określonych stylów. Oto moja wersja, która rozwiązała problem i działa wszędzie tam, gdzie sprawdziłem:
LUB używając CSS:
źródło
Najlepszym rozwiązaniem jest
word-spacing
własność.Dodaj
<p>
w kontenerze o określonym rozmiarze (przykład300px
) i po tym, jak musisz dodać ten rozmiar jako wartość w odstępach między wyrazami.HTML
CSS
W ten sposób Twoje zdanie będzie zawsze łamane i umieszczane w kolumnie, ale z akapitu będzie dynamiczne.
Tutaj przykład Codepen
źródło
W moim przypadku,
działało perfekcyjnie, mam nadzieję, że pomoże to każdemu nowemu nowicjuszowi, jak ja.
źródło