Как отформатировать HTML-текст, чтобы он охватывал ключевые слова

Итак, у меня есть код с абзацем с ключевыми словами и текстом.

Мне нужно сделать формат так, чтобы ключевые слова отображались рядом с другими, текст начинался там, где заканчиваются ключевые слова, а затем текст также обтекал ключевые слова.

Я попробовал сделать это с помощью display: flex, но так и не смог придумать, как добиться желаемого результата. Кроме того, текст в строке после первой должен иметь небольшой отступ слева, то есть не соответствовать началу ключевых слов.

Я размещаю здесь свой код, а также скриншот того, каким должен быть желаемый результат.

Любая помощь приветствуется. Спасибо.

.paragraph {
  display: flex;
  width: 320px;
}

.keywords {
  display: flex;
}

.keywords .item {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  white-space: nowrap;
}

.keywords .item::after {
  content: "-";
  margin-left: 5px;
  margin-right: 5px;
  font-family: "Times New Roman", Times, serif;
  font-weight: 500;
}

.text {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  font-weight: 300;
}
<div class = "paragraph">
  <div class = "keywords">
    <div class = "item">KEYWORD 1</div>
    <div class = "item">KEYWORD 2</div>
  </div>
  <div class = "text">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</div>
</div>

Правильный формат должен выглядеть так:

Взгляните на display: inline-block

phuzi 05.04.2024 10:43

@phuzi Я попробовал код из ответа @Meher Khurana, который использует display: inline-block, но, к сожалению, не выполняет правильное форматирование. Я делаю что-то не так?

Chris Costa 05.04.2024 10:45
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Для обтекания элемента текстом в значительной степени требуется использование float.

По этой причине оболочка «абзаца» не может быть display: flex, поскольку это сводит на нет использование float. Вместо этого я использовал inline-block.

.paragraph {
  display: inline-block;
  width: 320px;
}

.keywords {
  display: flex;
  float: left;
}

.keywords .item {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  white-space: nowrap;
}

.keywords .item::after {
  content: "-";
  margin-left: 5px;
  margin-right: 5px;
  font-family: "Times New Roman", Times, serif;
  font-weight: 500;
}

.text {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  font-weight: 300;
  margin-left: 1em;
}
<div class = "paragraph">
  <div class = "keywords">
    <div class = "item">KEYWORD 1</div>
    <div class = "item">KEYWORD 2</div>
  </div>
  <div class = "text">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</div>
</div>

Есть ли способ добавить небольшое поле слева от текста под ключевыми словами?

Chris Costa 05.04.2024 10:55

Конечно, только что добавил margin-left: 1em...

Paulie_D 05.04.2024 11:11

Удалите display: flex, он делает не то, что вы хотите.

С помощью display: inline вы можете заставить все элементы отображаться один за другим.

Используя комбинацию положительных и отрицательных левых полей, вы также можете имитировать висячий отступ в абзаце.

.paragraph {
  width: 320px;
  margin-left: 2em; // indent the whole paragraph
}

.keywords {
  display: inline;
  margin-left: -2em; // Push these back over to the left
}

.keywords .item {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  white-space: nowrap;
  display: inline-block;
}

.keywords .item::after {
  content: "-";
  margin-left: 5px;
  margin-right: 5px;
  font-family: "Times New Roman", Times, serif;
  font-weight: 500;
}

.text {
  font-family: "Times New Roman", Times, serif;
  color: #000;
  font-style: italic;
  font-weight: 300;
  display: inline;
}
<div class = "paragraph">
  <div class = "keywords">
    <div class = "item">KEYWORD 1</div>
    <div class = "item">KEYWORD 2</div>
  </div>
  <div class = "text">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</div>
</div>

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