Как разбить список HTML на последний возможный пробел

У меня есть простой список HTML:

<ul>
  <li>First Item</li>
  <li>Second Item</li>
  <li>Third Item</li>
</ul>

Я хочу отобразить список со следующими функциями:

  1. Предметы подряд.
  2. Список будет иметь максимальную ширину, после которой ожидается, что элементы перейдут на следующую строку.
  3. Элементы должны прерываться только в начале/пробелах (не в середине слова).
  4. Строки должны содержать как можно больше текста до разрыва.

Желаемый результат:

[   maximum width   ]
First Item * Second
Item * Third Item

Неудачные попытки:

№1 (разрывы слов)

[   maximum width   ]
First Item * Second I
tem * Third Item

#2 (предмет не ломается должным образом)

[   maximum width   ]
First Item * Second Item
* Third Item

№3 (разрыв строки «преждевременно»)

[   maximum width   ]
First
Item * Second Item *
Third Item

Обновлять: Простой li {display: inline;} не будет работать, если HTML не имеет отступа/расстояния (некоторые фреймворки, например, GatsbyJS, автоматически «сжимают» HTML):

<ul><li>First Item</li><li>Second Item</li><li>Third Item</li></ul>

(пример скрипки)

li {display:inline} должно хватить
Temani Afif 14.07.2019 14:44

Связано: stackoverflow.com/questions/5078239/…

Eyal Roth 15.07.2019 09:53
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
267
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как уже сказал Темани li {display: inline;} работает нормально. (Скрипка)

Это, кажется, отлично работает с простым HTML, но не работает для меня с GatsbyJS (получение № 3). Я заметил, что в версии gatsby первый элемент (который имеет 2 пробела и прерывается преждевременно) имеет на один глиф меньше в представлении визуализированных шрифтов (Инструменты разработки -> Элементы -> Стили -> Вычисленные -> Визуализированные шрифты) . Что это может означать? Возможно, что-то с моим окружением? Мой сервер gatsby работает через WSL.

Eyal Roth 14.07.2019 17:00

Хорошо, это не GatsbyJS как таковой. Это не будет работать, если в HTML нет отступа: jsfiddle.net/8puLkcry

Eyal Roth 14.07.2019 17:12
Ответ принят как подходящий

Кажется, это работает для меня:

ul {
    max-width: 100px;
}
ul li {
    display: inline;
}
ul li::after {
  content:" ";
}

Почему часть after?

Ну, если после каждого <li> в HTML источник нет пробела/новой строки, строка не будет разрываться в конце элементов, что вполне может привести к «преждевременному» разрыву строки (как в неудачном попытка №3). Некоторые фреймворки автоматически «сжимают» HTML — в основном удаляя эти пробелы — и это требует явного добавления пробела после каждого элемента.

Вот примеры скрипки (попробуйте удалить after из css и посмотрите, как вы получите неудачную попытку № 3).

Другие вопросы по теме