Я строю многоязычный сайт, владелец которого помогает мне с некоторыми переводами. Некоторые из отображаемых фраз нуждаются в переносе строк для поддержания стиля сайта.
К сожалению, владелец не компьютерный парень, поэтому, если он увидит, foo<br />bar
есть шанс, что он каким-то образом изменит данные во время перевода.
Есть ли CSS-решение (помимо изменения ширины) для применения к элементу, который будет ломаться после каждого слова?
(Я знаю, что могу сделать это в PHP, но мне интересно, есть ли в CSS хитрый прием, о котором я не знаю, чтобы выполнить то же самое, возможно, в функциях CJK.)
РЕДАКТИРОВАТЬ
Я попытаюсь изобразить, что происходит:
---------------- ----------------
| Short Word | | Gargantuan |
| | | Word |
---------------- ----------------
Длинное слово разрывается автоматически, короткое слово - нет. Я хочу, чтобы это выглядело так:
---------------- ----------------
| Short | | Gargantuan |
| Word | | Word |
---------------- ----------------
css
line-breaks
Бен
источник
источник
Ответы:
использование
где
<parent-width>
ширина родительского элемента (или произвольное высокое значение, которое не помещается в одну строку). Таким образом, вы можете быть уверены, что после одной буквы даже стоит разрыв строки. Работает с Chrome / FF / Opera / IE7 + (и, возможно, даже с IE6, поскольку он также поддерживает межсловное пространство).источник
.parent { word-spacing: 100px; }
где100px
ширина родительского элемента. Проблема в том, что это решение не работает, если у вас текучий родитель.word-spacing: 100000px
и вам не нужно будет беспокоиться о том, что родительский элемент является изменчивым с точки зрения ширины. Установка интервала между словами 100% имела бы смысл (это была бы 100% родительской ширины), но значения, выраженные в процентах, не поддерживаются для этого свойства css.word-spacing: 2em;
а на мобильной ширине я хочу, чтобы они были однострочными:word-spacing: unset;
Ответ, данный @HursVanBloob, работает только с родительским контейнером фиксированной ширины, но не работает в случае контейнеров с жидкостью шириной .
Я пробовал много свойств, но ничего не получилось, как ожидалось. В конце концов я пришел к выводу, что
word-spacing
очень большое значение дает очень большая ценность .или, для современных браузеров вы можете использовать
vw
модуль CSS (визуальная ширина в% от размера экрана).источник
Альтернативное решение описано в отдельном предложении по одному слову в строке путем применения
display:table-caption;
к элементу.источник
Попробуйте использовать
white-space: pre-line;
. Он создает разрыв строки везде, где в коде появляется разрыв строки, но игнорирует лишние пробелы (символы табуляции и пробелы и т. Д.).Сначала напишите свои слова в отдельных строках кода:
Затем примените стиль к элементу, содержащему слова.
Будьте осторожны , каждый разрыв строки в коде внутри элемента будет создавать разрыв строки. Поэтому написание следующего приведет к дополнительному разрыву строки перед первым словом и после последнего слова:
На CSS Tricks есть отличная статья, объясняющая другие атрибуты пробелов.
источник
white-space
можно ответить на вопрос. Извините, но я не вижу как.white-space: pre;
" для отображения этих разрывов строк, как<pre>
тег? Это может сработать, и разрыв строки должен выглядеть более естественным для переводчиков, чем a<br />
. Я постараюсь отредактировать ваш ответ, чтобы добавить его :)white-space: pre-line;
возможно , было бы более уместным, так как он игнорирует лишние пробелы в вашем коде. Я обновлю ответ.white-space: pre;
для IE 7.Если вы хотите иметь возможность выбирать из разных решений, помимо приведенных ответов ...
Альтернативный метод - присвоить контейнеру ширину 0 и убедиться, что переполнение является видимым. Тогда каждое слово будет вытекать из него и будет находиться на отдельной строке.
Или вы можете использовать одно из этих новых предложенных
width
значений, если они еще существуют к тому времени, когда вы прочитаете это.источник
Вы не можете настроить таргетинг на каждое слово в CSS. Тем не менее, с небольшим количеством jQuery вы, вероятно, могли бы.
С помощью jQuery вы можете заключить каждое слово в a,
<span>
а затем в набор CSS,display:block
который поместит его в отдельную строку.В теории конечно: P
источник
:first-child
трюк или что-то там ...https://jsfiddle.net/bm3Lfcod/1/
Для тех, кто ищет решение, которое работает в гибком родительском контейнере с дочерними элементами, гибкими в обоих измерениях. например. кнопки навигации.
источник
CSS
свойство, которое вы можете дать. Скажи свойство, которое может вызватьbrowser reflow
Я столкнулся с той же проблемой, и ни один из вариантов здесь не помог мне. Некоторые почтовые сервисы не поддерживают указанные стили. Вот моя версия, которая решила проблему и работает везде, где я проверял:
ИЛИ используя CSS:
источник
Лучшее решение -
word-spacing
собственность.Добавьте
<p>
в контейнер с определенным размером (пример300px
) и после того, как вам нужно будет добавить этот размер в качестве значения в интервале слов.HTML
CSS
Таким образом, ваше предложение всегда будет разбито и помещено в столбец, но текст абзаца будет динамическим.
Вот пример Codepen
источник
В моем случае,
работал отлично, надеюсь, это поможет любому новому новичку, как я.
источник