В word-break: break-word я хочу использовать первое слово в следующей строке с заглавной буквы с помощью CSS/JS. Возможно ли это?

У меня есть требование использовать заглавную букву в первом слове обернутого предложения (перенести на следующую строку из-за разрыва слова). Я знаю о селекторах первой буквы, первой строки, но ни один из них не подходит для этого случая. Я застрял, помогите мне!!!

Дальнейшее объяснение: например в одном представлении было бы
Лорем ипсум и
Прометей

при дальнейшем уменьшении должно быть так:
Лорем
Ипсум
И
Прометей

Я не думаю, что есть способ добиться этого с текущим CSS.

CBroe 17.03.2022 12:49

Я уверен, что у вас есть свои причины, но TBH, это был бы ужасный UX (IMO).

freedomn-m 17.03.2022 12:50

Вы не можете выбрать первую букву каждого разрыва

Ateet Shekhar 17.03.2022 12:58

Вам понадобится немного JS, чтобы постепенно помещать текст в элемент по одному каналу за раз и замечать, когда его высота увеличивается. Это должно быть сделано всякий раз, когда вносятся изменения, например, изменение размера области просмотра.

A Haworth 17.03.2022 12:59

Я вижу здесь только решение JavaScript. Ваши текущие примеры не соответствуют необходимостьword-break: break-word, поэтому, если каждое отдельное (нет прерывание) слово было заключено в отдельный диапазон, вы можете перебрать их и проверить их offsetLeft - если в настоящее время это 0, тогда этот элемент потребуется чтобы добавить класс, сделать первую букву прописной. Конечно, вам нужно будет повторно запустить это, когда произойдут какие-либо соответствующие изменения ширины контейнера или когда изменится сам контент. [...]

CBroe 17.03.2022 13:01

[...] Добавление word-break: break-word в микс делает его еще более сложным, потому что тогда вам придется завернуть каждый отдельный символ в отдельный элемент, потому что разрывы могут происходить в произвольной позиции Любые.

CBroe 17.03.2022 13:01
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
2
6
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

С текущим CSS невозможно использовать первое слово каждой строки с заглавной буквы.

Самое близкое, что вы можете получить, - это использовать преобразование текста для заглавных букв каждого слова. то есть text-transform: uppercase;

Ответ принят как подходящий

Вы можете преобразовать текст, чтобы каждое слово было в своем собственном span, а затем проверять position каждого span каждый раз при изменении размера страницы.

Это может работать не очень хорошо, поэтому вы, вероятно, захотите debounce изменить размер.

Чтобы использовать ::first-letter, элемент должен быть элементом блочного уровня, а span по умолчанию таковым не является. Так и должно быть display:inline-block.

Это не обрабатывает «разрывное слово», поскольку образцы OP не включают его в качестве примера, а break-word устарел.

// wrap each word in a span
$("p").each(function() {
  $(this).html($(this).text().split(" ").map(t => "<span>" + t + "</span>").join(" "));
});

// determine what is "left" (it's not 0)
var farLeft = $("p").position().left;

// add a class to each "left" element and let css handle the rest
function firstLetter() {
  $(".farleft").removeClass("farleft");
  $("p>span").each(function() {
    if ($(this).position().left == farLeft) {
      $(this).addClass("farleft");
    }
  })
}

$(window).on("resize", firstLetter);
firstLetter();
p>span { display:inline-block; }

.farleft::first-letter {
  text-transform: uppercase;
  font-weight:bold;
}


/* these are just for the demo so it's easier to see what's going on */
p { width: 50% } 
.farleft { background-color: pink; }
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>

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