Сжать границу HTML-элемента, который делит пространство с плавающим элементом

Когда плавающий элемент занимает некоторое пространство, «обычный» текст освобождает место для размещения плавающего элемента. Но граница вокруг обычного текста не пересекается с плавающим элементом.

Как в приведенном ниже примере сделать так, чтобы первый красный прямоугольник заканчивался до того, как синий прямоугольник начнется с некоторым зазором, а не перекрывался? И пусть второй красный квадратик, которому не нужно делить пространство с плавающим элементом, всё равно занимает 100%?

div#toc {
  float: right;
  width: 300px;
  padding: 20px;
  border: 1px solid blue;
}

div.warn {
  padding: 20px;
  border: 1px solid red;
}
<div id = "toc">
  <h2>Table of contents</h2>
  <ol>
    <li>Chapter 1</li>
    <li>Chapter 2</li>
    <li>Chapter 3</li>
  </ol>
</div>
<div id = "main">
  <h1>Chapter 1</h1>
  <p>In the beginning ...</p>
  <div class = "warn">
    Fairy tale, watch out!
  </div>
  <p>... and were married happily ever after.</p>
  <div class = "warn">
    Don't retell!
  </div>
</div>

Первым вопросом будет «почему?», потому что текст внутри этого div будет делать именно то, что должен (при необходимости переноситься для размещения плавающего элемента).

Mike 'Pomax' Kamermans 07.05.2024 02:27

Почему? Потому что я хочу, чтобы поле «Предупреждение» имело красную рамку.

Johannes Ernst 07.05.2024 02:37

Хотя что еще нужно сделать? Должна ли она иметь ширину 100 % от «всего существующего пространства» или это может быть обычный встроенный текстовый блок?

Mike 'Pomax' Kamermans 07.05.2024 02:47

Я не думаю, что понимаю вопрос. Если есть фон, он также должен сжаться до доступного пространства. Если есть другие элементы, такие как imgs, они, вероятно, также должны сжиматься, хотя сейчас у меня нет в этом необходимости. Моя основная потребность — обычный текст с рамкой.

Johannes Ernst 07.05.2024 02:51

Похоже, то, что вы хотите, — это одна из тех вещей, которые не может сделать стандартная блочная модель CSS. Вы могли бы взглянуть на сетку CSS и, в частности, на ее макет, но это все еще экспериментально, так что вам, возможно, придется просто обратиться к решению JS здесь (для этого существует ряд библиотек, использующих ту же «кладку кладки»). " срок). Если, конечно, это не касается уже написанного вами конкретного контента и вы просто хотите, чтобы он хорошо выглядел. В этом случае нет ничего плохого в том, чтобы просто адаптировать CSS к конкретному контенту.

Mike 'Pomax' Kamermans 07.05.2024 03:18
Улучшение производительности загрузки с помощью 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
5
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Блоки уровня блока, которые устанавливают независимый контекст форматирования, сжимаются, чтобы избежать плавающих элементов. Самый прямой способ заставить блок установить контекст форматирования блока (в данном случае это наиболее подходящий тип независимого контекста форматирования) — дать ему display: flow-root.

Используйте margin на поплавке, чтобы создать зазор.

div#toc {
  float: right;
  width: 300px;
  padding: 20px;
  border: 1px solid blue;
  margin-left: 10px;
}

div.warn {
  padding: 20px;
  border: 1px solid red;
  display: flow-root;
}
<div id = "toc">
  <h2>Table of contents</h2>
  <ol>
    <li>Chapter 1</li>
    <li>Chapter 2</li>
    <li>Chapter 3</li>
  </ol>
</div>
<div id = "main">
  <h1>Chapter 1</h1>
  <p>In the beginning ...</p>
  <div class = "warn">
    Fairy tale, watch out!
  </div>
  <p>... and were married happily ever after.</p>
  <div class = "warn">
    Don't retell!
  </div>
</div>

Всегда есть еще одно ключевое слово CSS, о котором я никогда не слышал! И оно это делает!!

Johannes Ernst 07.05.2024 19:49

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