Есть ли способ иметь дочерний DIV внутри родительского контейнера DIV, который шире, чем его родительский. Дочерний DIV должен быть такой же ширины окна просмотра браузера.
Смотрите пример ниже:
Ребенок DIV должен оставаться дочерним по отношению к родительскому div. Я знаю, что могу установить произвольные отрицательные поля для дочернего элемента div, чтобы сделать его шире, но я не могу понять, как сделать его шириной браузера на 100%.
Я знаю, что могу это сделать:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Но мне нужно, чтобы ребенок был такой же ширины, как браузер, который является динамическим.
Обновить
Спасибо за ваши ответы, кажется, что самый близкий ответ на данный момент состоит в том, чтобы сделать дочернюю позицию DIV: абсолютной, и установить свойства left и right равными 0.
Следующая проблема, которую я имею, состоит в том, что у родителя есть положение: относительное, что означает, что левые и правые свойства все еще относительно родительского div, а не браузера, см. Пример здесь: jsfiddle.net/v2Tja/2
Я не могу удалить положение относительно родителя, не испортив все остальное.
position: relative
? Для чего тебе нужноposition: relative
? Я думаю, что я спрашиваю: что вы пытаетесь сделать?Ответы:
Используйте абсолютное позиционирование
источник
position:fixed
. почему это не работает должным образом?Вот общее решение, которое сохраняет дочерний элемент в потоке документов:
Мы устанавливаем
width
дочерний элемент так, чтобы он занимал всю ширину области просмотра, затем мы приближаем его к краю экрана, перемещая его кleft
расстояние, равное половине области просмотра, минус 50% ширины родительского элемента.Демо-версия:
Браузерная поддержка для vw и для calc () обычно может рассматриваться как IE9 и новее.
Примечание. Предполагается, что для блочной модели задано значение
border-box
. Безborder-box
этого вам также придется вычитать отступы и границы, что делает это решение беспорядочным.Примечание. Рекомендуется скрывать горизонтальное переполнение контейнера прокрутки, поскольку некоторые браузеры могут отображать горизонтальную полосу прокрутки, несмотря на отсутствие переполнения.
источник
position: relative
родительский!Я долго искал решение этой проблемы. В идеале мы хотим, чтобы ребенок был больше, чем родитель, но не зная заранее ограничений родителя.
И я наконец нашел блестящий общий ответ здесь . Копирование это дословно:
источник
90vw
. Кроме того, похоже, что неmargin-right
имеет никакого эффекта в любом случае.Исходя из вашего первоначального предложения (установка отрицательных полей), я попробовал и придумал аналогичный метод, использующий процентные единицы для динамической ширины браузера:
HTML
CSS:
Отрицательные поля позволят контенту вытекать из родительского DIV. Поэтому я установил,
padding: 0 100%;
чтобы содержимое возвращалось к исходным границам Chlid DIV.Отрицательные поля также увеличивают общую ширину .child-div из области просмотра браузера, что приводит к горизонтальной прокрутке. Следовательно, нам нужно обрезать ширину выдавливания, применяя
overflow-x: hidden
к DIV деду (который является родителем родительского Div):Вот JSfiddle
Я пробовал Нильса Касперссона
left: calc(-50vw + 50%)
; он прекрасно работал в Chrome и FF (пока не уверен насчет IE), пока я не обнаружил, что браузеры Safari не делают это должным образом. Надеюсь, они скоро это исправят, так как мне действительно нравится этот простой метод.Это также может решить вашу проблему, где родительский элемент DIV должен быть
position:relative
2 недостатка этого метода обхода:
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы с этим методом;). Надеюсь, поможет.
источник
Flexbox можно использовать, чтобы сделать ребенка шире, чем его родитель, с помощью трех строк CSS.
Только ребенок
display
,margin-left
иwidth
нужно установить.margin-left
зависит от ребенкаwidth
. Формула:Переменные CSS могут использоваться, чтобы избежать ручного вычисления левого поля.
Демонстрация № 1: Ручной расчет
Демонстрация № 2: Использование переменных CSS
источник
Я использовал это:
HTML
CSS
источник
Вы можете попробовать положение: абсолют. и дать ширину и высоту, сверху: «ось у сверху» и слева: «ось х»
источник
У меня была похожая проблема. Содержимое дочернего элемента должно было оставаться в родительском элементе, в то время как фон должен был расширять всю ширину области просмотра.
Я решил эту проблему, создав дочерний элемент
position: relative
и добавив к нему псевдоэлемент (:before
)position: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. Псевдоэлемент остается за фактическим дочерним элементом как псевдоэлементный элемент. Это работает во всех браузерах (даже IE8 + и Safari 6+ - нет возможности протестировать более старые версии).Небольшой пример скрипки: http://jsfiddle.net/vccv39j9/
источник
overflow-x: hidden
.Добавляя к решению Нильса Касперссона, я также определяю ширину вертикальной полосы прокрутки. Я использую
16px
в качестве примера, который вычитается из ширины порта просмотра. Это позволит избежать появления горизонтальной полосы прокрутки.источник
16px
что вам нужно вычесть, потому что оно вызывает горизонтальную полосу прокрутки, является полем /html, body{ margin:0; padding:0 }
отступом по умолчанию для браузера, вместо того, чтобы вычитать его, просто используйте это, таким образом, вам не нужно делать дополнительные вычисления для16px
Предполагая, что родительский элемент имеет фиксированную ширину, например,
#page { width: 1000px; }
и центрирован#page { margin: auto; }
, вы хотите, чтобы дочерний элемент соответствовал ширине области просмотра браузера, которую вы могли бы просто сделать:источник
Чтобы разделить дочерний элемент по ширине с содержимым, попробуйте следующее:
источник
источник
Я знаю, что это старо, но для любого, кто придет к этому за ответом, вы сделаете это так:
Переполнение скрыто в элементе, содержащем родительский элемент, например в теле.
Дайте вашему дочернему элементу ширину, намного более широкую, чем ваша страница, и расположите его абсолютно слева на -100%.
Вот пример:
Также вот JS Fiddle: http://jsfiddle.net/v2Tja/288/
источник
Тогда решение будет следующим.
HTML
CSS
источник
Я попробовал некоторые из ваших решений. Вот этот :
безусловно лучший, так как нам не нужны дополнительные CSS для меньшего экрана. Я сделал codePen, чтобы показать результаты: я использовал родительский div с фоновым изображением и дочерний div с внутренним содержимым.
https://codepen.io/yuyazz/pen/BaoqBBq
источник