【问题标题】:Setting overflow:hidden on parent hides all content设置溢出:隐藏在父级隐藏所有内容
【发布时间】:2012-01-26 00:15:49
【问题描述】:

我正在尝试建立一个站点,该站点具有一个“轮播”的 div,这些 div 全部并排(向左浮动),每个都具有全屏宽度。使用 javascript 我计划通过移动“轮播”将不同的 div 移动到视图中。

我的问题是,由于某种原因,当我在包含轮播的 div 上设置溢出:隐藏时,所有内容都被隐藏了。当我使用 firebug 检查时,div 会显示在正确的位置,但没有任何内容可见。

这里是 HTML:

<div id="content_window">
    <div id="carousel">
        <div id="p_home" class="pane">
            Home!
        </div>
        <div id="p_about" class="pane">
            About!
        </div>
        <div id="p_services" class="pane">
            Services!
        </div>
        <div id="p_contact" class="pane">
            Contact!
        </div>
    </div>
</div>

还有 CSS:

#content_window
{
    position:relative;
width:100%;
overflow:hidden;
}

#carousel
{
    position:absolute;
    width:400%;
    top:50px;
    left:0;
    overflow:hidden;
}

.pane
{
    float:left;
    width:25%;
    color:White;
    text-align:left;
    margin-top:50px;
}

如果我取消了 #content_window 的溢出:隐藏,则窗格中的内容变得可见,但会添加水平滚动条,您可以滚动并查看所有窗格。有谁知道我做错了什么?

【问题讨论】:

  • 清除 div:&lt;div style="clear:both"&gt;&lt;/div&gt; 在最后一个之后

标签: html css css-float


【解决方案1】:

当一个 div 除了浮动或定位元素之外什么都不包含时,它的高度变为 0。是 div#content_window 的问题。尝试为该 div 添加高度:

#content_window
{
height: 120px;
}

【讨论】:

  • 是的!这就是问题所在。非常感谢!
【解决方案2】:

根本不需要使用绝对定位。只需让 content_window 剪辑轮播的视口。见http://jsbin.com/uhubij/edit#html

CSS 更简单:

#content_window {
    width:100%;
    overflow:hidden;
}

#carousel {
    width:400%;
}

.pane {
    float:left;
    width:25%;
    text-align:left;
    margin-top:50px;
}

要在窗格之间切换,请将margin-left 添加到#carousel。第一个窗格位于margin-left: 0%(默认)。第二个窗格位于margin-left: -100%;。第三个窗格在margin-left: -200%;,等等...例如,这里是窗格2:http://jsbin.com/uhubij/2/edit#html

HTML基本一样(除了我给你加了一个clearing div):

<div id="content_window">
    <div id="carousel">
        <div id="p_home" class="pane">
            Home!
        </div>
        <div id="p_about" class="pane">
            About!
        </div>
        <div id="p_services" class="pane">
            Services!
        </div>
        <div id="p_contact" class="pane">
            Contact!
        </div>
        <div style="clear: both;"></div>
    </div>
</div>

【讨论】:

  • 感谢您的快速回复。我有绝对定位的轮播,以便我可以使用 javascript 调整“左”属性。如果我错了,请纠正我,但我认为如果不在轮播上使用绝对定位,我将无法调整左侧属性。是否有另一种方法可以在不向左调整的情况下水平移动旋转木马?窗格宽度为 25%,因为我将轮播的宽度设置为 400%(有 4 个窗格,因此 400% 的 25% 为 100%)。
  • 好吧,您总是可以在外部容器上放置margin-left: 50px;。但是如果将轮播向右移动 50px,则还必须对视口的宽度进行调整。您不能将视口设为 100% 宽将其向右移动 50 像素,否则右侧的 50 像素将被截断。
  • 关键是要切断它。每个窗格都应该是视口的大小,以便一次只能看到一个窗格。我的计划是通过左右移动轮播来更改可见的窗格。因此,任何不在屏幕上的窗格,无论是在右侧还是左侧,都需要隐藏。因此,如果视口为 1000 像素宽,那么每个窗格将是 1000 像素宽。如果我想显示第一个窗格,我会在轮播上留下:0。如果我想显示第二个窗格,它将留下:-1000,依此类推。这有意义吗?
  • 是的,当然,我明白这一点。您只需添加margin-left: N00% 即可切换到窗格 N+1。请参阅我的答案中的更新。我很困惑的是你的“水平 50 像素”。
  • 啊,现在我看到了混乱,这是我的 =)。你有“top:50px”,而不是“left:50px;”。呃。无论如何,我的答案的更新仍然向您展示了如何进行该窗格切换。如果你想让整个东西垂直向下移动 50px,只需将 margin-top: 50px; 添加到外部 content_window
猜你喜欢
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多