【问题标题】:Escape the bounds of a div container逃离 div 容器的边界
【发布时间】:2011-10-14 01:48:08
【问题描述】:

好的,我知道 DIV 的目的是包含其内部元素 - 我不想说其他话让任何人不高兴。但是,请考虑以下情况:

我的网页(仅占整个页面的 70% 的宽度)被一个容器(一个 div)包围。但是,在页面顶部的导航栏下,我想创建占整个页面宽度 100% 的 w 横幅(这意味着它必须延伸到其容器的边界之外,因为容器仅占页面宽度的 70%)。

这是我想要实现的基本理念:http://www.petersonassociates.biz/

有没有人对我如何做到这一点有任何建议?如有任何帮助,我将不胜感激。

埃文

【问题讨论】:

标签: css html banner


【解决方案1】:

如果您只想让元素的背景延伸到整个页面,这也可以通过负边距来实现。

简而言之(评论更正):

.bleed {
padding-left: 3000px;
margin-left: -3000px;
padding-right: 3000px;
margin-right: -3000px;
}

这为您提供了水平滚动条,您可以使用以下方法删除:

body {overflow-x: hidden; }

http://www.sitepoint.com/css-extend-full-width-bars/ 有指南。 使用伪元素执行此操作可能更具语义:http://css-tricks.com/full-browser-width-bars/

【讨论】:

  • 太棒了!我在一个 Thrive Themes WordPress 网站上使用了这个解决方案(减去溢出:隐藏)来克服他们预设的一些愚蠢的样式,它就像一个魅力。
  • 这应该是公认的答案,因为 position: absolute; fix 从流的主体中删除元素,这需要对其他元素进行额外标记,以确保所述元素不会被全角代码重叠。
  • 在body上设置overflow-x是否有负面影响?手机还是什么?
【解决方案2】:

编辑(2019 年): 有一个 new trick 可以使用这个 CSS 实用程序来获得一个完整的出血:

width: 100vw;
margin-left: 50%;
transform: translateX(-50%);

我猜所有的解决方案都有些过时了。

摆脱元素边界的最简单方法是添加:

    margin-left: calc(~"-50vw + 50%");
    margin-right: calc(~"-50vw + 50%");

可以在herehere 找到讨论。对于即将到来的grid-layouts,还有一个不错的解决方案。

【讨论】:

  • 这条评论非常有用。试图找到一个很好的解决方案来打破 Materialise CSS 网格布局容器,这成功了
【解决方案3】:

如果我理解正确的话,

style="width: 100%; position:absolute;"

应该实现你的目标。

【讨论】:

    【解决方案4】:

    有几种方法可以做到这一点。

    绝对定位
    就像其他人建议的那样,如果您为要在页面上拉伸的元素提供 100% 宽度和绝对位置的 CSS 属性,它将跨越页面的整个宽度。

    但是,它也会位于页面顶部,可能会遮挡您的其他内容,这不会为您现在 100% 的内容腾出空间。绝对定位会从文档流中删除元素,因此它会表现得好像新定位的内容不存在一样。除非您准备好准确计算新元素的位置并为其腾出空间,否则这可能不是最好的方法。

    图片:您还可以使用一组图片来获得您想要的,但祝您好运,更新它或更改页面任何部分的高度等。同样,不是非常适合可维护性。

    嵌套 DIV
    这就是我建议你这样做的方式。在我们担心任何 100% 宽度的东西之前,我将首先向您展示如何设置 70% 居中的外观。

    <div class="header">
    <div class="center">
      // Header content
    </div>
    </div>
    <div class="mainContent">
    <div class="center">
      // Main content
    </div>
    </div>
    <div class="footer">
    <div class="center">
      // Footer content
    </div>
    </div>
    

    使用这样的 CSS:

    .center {
      width: 70%;
      margin: 0 auto;
    }
    

    现在您有了看起来围绕中心内容的容器,而实际上在页面中向下移动的每一行内容都由一个包含 div 的包含 div 组成,具有语义和描述性类 (如标题、mainContent 等),其中包含一个“中心”类。

    通过这样的设置,让标题看起来“脱离容器 div”就像这样简单:

    .header {
      background-color: navy;
    }
    

    颜色到达页面边缘。如果出于某种原因您希望 内容本身 跨越页面,您可以这样做:

    .header .center {
      width: auto;
    }
    

    并且该样式会覆盖 .center 样式,并使页眉的内容延伸到页面的边缘。

    祝你好运!

    【讨论】:

      【解决方案5】:

      这样做在语义上更正确的方法是将标题放在主容器之外,避免使用position:absolute

      例子:

      <html>
        <head>
          <title>A title</title>
          <style type="text/css">
            .main-content {
              width: 70%;
              margin: 0 auto; 
            }
          </style>
        </head>
        <body>
          <header><!-- Some header stuff --></header>
          <section class="main-content"><!-- Content you already have that takes up 70% --></section>
        <body>
      </html>
      

      另一种方法(将其保留在&lt;section class="main-content"&gt; 中)正如您所说,不正确,因为 div(或部分​​)应该包含元素,而不是让它们超出其父 div/部分的范围。如果您的子 div 延伸到父 div 之外,您还将在 IE 中遇到问题(我相信任何 7 或更低版本,但这可能只是 IE6 或更低版本)。

      【讨论】:

      • +1 这与我的做法很接近,但您可以将宽度声明从.header 样式中去掉(或使用width: auto)。默认情况下,块级元素与包含元素一样宽。这样你在添加边距/填充时就不会遇到问题。我不会说这是更“语义”的方法,但它不那么混乱。
      • 两者都好,我在上面进行了编辑以删除标题上不必要的 CSS,并使用 HTML5 元素使代码更具语义......这不是正确的词,也许只是更合适;)
      猜你喜欢
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 2019-06-22
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多