Почему ширина тела не увеличивается до ширины его дочерних элементов

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

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

К сожалению, он останавливается на ширине корпуса. Вы могли бы подумать, что body также изменит размер, чтобы соответствовать ширине своих дочерних элементов, но это не так.

Как мне сделать так, чтобы тело и/или другие элементы настраивались автоматически? Это происходит в chrome, firefox, edge и ie11.

См. рабочий пример и код:

body {
  border: 1px solid red;
  padding: 1rem;
}

#extra-long {
  background-color: salmon;
  width: 200vw;
}

#other-element {
  background-color: cornflowerblue;
}
<div id = "extra-long">This extends beyond the view port</div>
<div id = "other-element">This should automatically extend beyond the viewport, but it doesn't</div>
Улучшение производительности загрузки с помощью 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
0
165
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

вы можете управлять этим, добавив небольшой css в свой «#extra-long» следующим образом:

<style>
#extra-long{
white-space: nowrap;
}
</style>

добавив выше css, ваш текст всегда будет идти в одну строку, а я прокручиваю автоматически.

Проблема не в переносе текста, а в ширине контейнера. Он автоматически остановится на краю тела, позволяя детям переливаться через край.

Dave Maison 20.05.2019 20:30

Возможно, это поведение элемента body по умолчанию. Вы можете добавить это правило.

body {
    min-width: min-content;
}

body будет автоматически подстраиваться под содержание других элементов

Вы не указали ширину для второго div, просто цвет фона:

    #other-element {
  background-color: cornflowerblue;
  width: 200vw;
}

Это создает проблему, заключающуюся в том, что ширина может быть только 200vw вместо автоматического расширения до ширины содержимого.

Dave Maison 20.05.2019 20:31
Ответ принят как подходящий

Unfortunately, it stops at the width of the body. You would think body would also resize to match the width of its children, but it doesn't.

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


Вы можете получить желаемое поведение, используя inline-block — см. демо ниже:

body {
  border: 1px solid red;
  padding: 1rem;
  display: inline-block; /* added */
}

#extra-long {
  background-color: salmon;
  width: 200vw;
}

#other-element {
  background-color: cornflowerblue;
}
<div id = "extra-long">This extends beyond the view port</div>
<div id = "other-element">This should automatically extend beyond the viewport, but it doesn't</div>

Вы можете получить тот же эффект, используя контейнер встроенный гибкий столбец — см. демонстрацию ниже:

body {
  border: 1px solid red;
  padding: 1rem;
  display: inline-flex; /* added */
  flex-direction: column; /* added */
}

#extra-long {
  background-color: salmon;
  width: 200vw;
}

#other-element {
  background-color: cornflowerblue;
}
<div id = "extra-long">This extends beyond the view port</div>
<div id = "other-element">This should automatically extend beyond the viewport, but it doesn't</div>

И вы также можете использовать width: min-content, но обратите внимание, что это имеет неожиданная обрезка поля body в конце — см. демо ниже:

body {
  border: 1px solid red;
  padding: 1rem;
  width: min-content; /* added */
}

#extra-long {
  background-color: salmon;
  width: 200vw;
}

#other-element {
  background-color: cornflowerblue;
}
<div id = "extra-long">This extends beyond the view port</div>
<div id = "other-element">This should automatically extend beyond the viewport, but it doesn't</div>

Извините за поздний отзыв, который был отслежен другими проектами. Это здорово! Спасибо

Dave Maison 20.05.2019 20:33

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