Исходя из вашего исходного предложения (установка отрицательных полей), я попробовал и придумал аналогичный метод, использующий процентные единицы для динамической ширины браузера:
HTML
<div class="grandparent">
<div class="parent">
<div class="child">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolore neque repellat ipsum natus magni soluta explicabo architecto, molestias laboriosam rerum. Tempore eos labore temporibus alias necessitatibus illum enim, est harum perspiciatis, sit, totam earum corrupti placeat architecto aut minus dignissimos mollitia asperiores sint ea. Libero hic laudantium, ipsam nostrum earum distinctio. Cum expedita, ratione, accusamus dicta similique distinctio est dolore assumenda soluta dolorem quisquam ex possimus aliquid provident quo? Enim tempora quo cupiditate eveniet aperiam.</p>
</div>
</div>
</div>
CSS:
.child-div{
margin: 0 -100%;
padding: 0 -100%;
}
.parent {
width: 60%;
background-color: red;
margin: 0 auto;
padding: 50px;
position:relative;
}
.grandparent {
overflow-x:hidden;
background-color: blue;
width: 100%;
position:relative;
}
Отрицательные поля позволят контенту вытекать из родительского 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 недостатка этого метода обхода:
- Требуется дополнительная разметка (т. Е. Элемент «прародитель» (точно так же, как метод вертикального выравнивания таблицы «добрый день», не так ли ...)
- Левая и правая границы Child DIV никогда не будут отображаться, просто потому, что они находятся вне области просмотра браузера.
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы с этим методом;). Надеюсь, это поможет.