css - 有没有办法使用 CSS 使子 DIV 的宽度比父 DIV 宽?

有没有办法在比其父级宽的父级容器 DIV 中拥有一个子级 DIV。子 DIV 需要与浏览器视口(viewport)的宽度相同。

请看下面的例子:

子 DIV必须保持为父 div 的子级。我知道我可以在子 div 上设置任意负边距以使其更宽,但我不知道如何从本质上使其成为浏览器的 100% 宽度。

我知道我能做到:

.child-div{
    margin-left: -100px;
    margin-right: -100px;
}

但我需要 child 与动态浏览器的宽度相同。

更新

感谢您的回答,目前看来最接近的答案是使子DIV position: absolute,并将左右属性设置为0。

我遇到的下一个问题是父级有position:relative,这意味着left和right属性仍然相对于父级div而不是浏览器,请参见此处的示例:jsfiddle.net/v2Tja/2

我无法从父级中删除 position: relative 而不会搞砸其他一切。

最佳答案

这是一个将子元素保留在文档流中的通用解决方案:

.child {
  width: 100vw;
  position: relative;
  left: calc(-50vw + 50%);
}

我们将子元素的 width 设置为填充整个视口(viewport)宽度,然后通过将其移动到 left 一个视口(viewport)一半的距离,减去父元素宽度的 50%。

演示:

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  overflow-x: hidden;
}

.parent {
  max-width: 400px;
  margin: 0 auto;
  padding: 1rem;
  position: relative;
  background-color: darkgrey;
}

.child {
  width: 100vw;
  position: relative;
  left: calc(-50vw + 50%);

  height: 100px;
  border: 3px solid red;
  background-color: lightgrey;
}
<div class="parent">
  Pre
  <div class="child">Child</div>
  Post
</div>

浏览器支持 vw对于 calc()一般可以看成是IE9及更新版本。

注意:这里假设盒子模型设置为 border-box .如果没有 border-box,您还必须减去填充和边框,使这个解决方案变得一团糟。

注意:建议隐藏滚动容器的水平溢出,因为某些浏览器可能会选择显示水平滚动条,尽管没有溢出。

https://stackoverflow.com/questions/5581034/

相关文章:

HTML 编码问题 - 显示 "Â"字符而不是 " "

html - 无法滚动到溢出容器的 flex 元素的顶部

html - 使用开发者工具检查 webkit-input-placeholder

javascript - 获取文本输入字段中的光标位置(以字符为单位)

html - 为什么单选按钮不能是 "readonly"?

angularjs - 使用 AngularJS HTML5 模式重新加载页面会给出错误的 GET

validation - 我真的需要将 '&' 编码为 '&' 吗?

javascript - 禁用href标签

jquery - 如何使用 css 或 jquery 在焦点上自动隐藏占位符文本?

javascript - 如何防止点击 '#' 链接跳转到页面顶部?