Как мне одновременно (1) не допустить, чтобы <div> занимал всю доступную ширину и (2) заставить его сжимать поля со своими соседями?

Возможно ли, чтобы <div> одновременно (1) не занимал всю доступную ширину и (2) сжимал поля со своими соседями?

Недавно я узнал, что установка div на display:table остановит его расширение, чтобы занять всю ширину родительского контейнера, но теперь я понимаю, что это создает новую проблему: он перестает разрушать поля со своими соседями.

В приведенном ниже примере красный div не может свернуться, а синий div слишком широкий.

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

<div style = "margin: 100px; border: solid red 2px; display: table;">
  This is a div with 100px margin all around and display:table.
  <br/>
  The problem is that it doesn't collapse margins with its neighbors.
</div>

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

<div style = "margin: 100px; border: solid blue 2px; display: block;">
  This is a div with 100px margin all around and display:block.
  <br/>
  The problem is that it expands to take up all available width.
</div>

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

Есть ли способ удовлетворить оба критерия одновременно?

Улучшение производительности загрузки с помощью 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
0
478
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете обернуть display: tablediv другим div и вместо этого положить запас на обертку div. Противно, но работает.

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

<div style = "margin: 100px"><div style = "border: solid red 2px; display: table;">
  This is a div which had 100px margin all around and display:table, but the margin was moved to a wrapper div.
  <br/>
  The problem was that it didn't collapse margins with its neighbors.
</div></div>

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

<div style = "margin: 100px; border: solid blue 2px; display: block;">
  This is a div with 100px margin all around and display:block.
  <br/>
  The problem is that it expands to take up all available width.
</div>

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

Я бы, вероятно, просто разместил бы div (чтобы он не занимал доступную ширину), а затем, если бы это необходимо, очистил плавающее значение.

<p style = "margin:100px">This is a paragraph with 100px margin all around.</p>

<div style = "border: solid red 2px; float: left;">
  This should work.
</div>

<p style = "margin:100px;clear:both;">This is a paragraph with 100px margin all around.</p>

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