【问题标题】:Prevent block element from overflowing parent element's width防止块元素溢出父元素的宽度
【发布时间】:2013-05-13 05:46:46
【问题描述】:

我有一个菜单 (jsfiddle),如下所示,它是由 <ul><li> 元素构建的。

子菜单元素显示在父元素下方,容器为固定宽度<ul>。我遇到的问题是,对于更靠右的菜单元素,这个二级<ul> 会溢出父元素的宽度,如下所示:

我怎样才能确保 子菜单 显示在第一张图片中,但对于更靠右的菜单元素只是移动到不超过右边框,保持大小完好无损,而不是溢出?

【问题讨论】:

  • 我认为写它比编辑你的更容易我有这个答案请检查它。thisthis

标签: html css layout menu submenu


【解决方案1】:

添加到你的容器溢出-x(你想保持 y 也许......)隐藏......

#navigation{
    width:900px;
    margin:0px 0 13px;
    padding:0px;
    float:left;
    background:#3b6daa;
    overflow-x:hidden; <------------------------------- note the X..
}

或者只是确保您的菜单不是固定宽度:

#navigation>ul li ul {
    float: left;
    padding: 8px 0;
    position: absolute;
    left:auto; 
    top:42px;
    display: none;
    width:auto;   <------------------- will make it adjust to the contain and the content
    background: #81abdd;
    color: #1c508e;
    list-style: none;
}

或者如果您想将其对齐不同(例如对齐到父级的右侧或左侧的工具提示..那么我建议您沿着 javascript 路径..)

这里有一些例子:

对齐示例 jquery vertical align 2 divs

jQuery 位置(也检查宽度等) http://api.jquery.com/position/

一个很好的工具提示,四周对齐 http://craigsworks.com/projects/qtip/

没有开箱即用的例子,但我相信这应该给你正确的方向..

【讨论】:

  • 感谢您的更新。这将解决溢出的部分,但它不会保持菜单的原始大小。
  • 第一部分将..我知道您想将整个菜单向右移动,因此它与父级的对齐方式不同?
  • 对不起,我的意思是说子菜单应该保持它的大小。你能以某种方式做到这一点吗?
  • 您想移动整个子菜单以与父级不同地对齐..听起来 js 将是您的路线,而不仅仅是 css 我相信..我建议您考虑使用 jQuery 来测量视口和父的东西,然后对齐它..
  • 我使用 jQuery。你能用 JavaScript 以某种方式完成它吗?
【解决方案2】:

您可以使用 overflow: hidden; 将父 div 添加到您的所有元素。

点赞this

【讨论】:

  • 我可以确保元素保持它的大小吗?
【解决方案3】:

将以下内容添加到您的容器中:

overflow-x: hidden;

您还需要为其添加一个高度,以便它显示子菜单。

要将某些子菜单向左移动,您需要向其&lt;ul&gt; 元素添加一个类,然后添加 css 以定位它们并将它们移动到您想要的最左边:

例如:如果将 push_left 类添加到子菜单 &lt;ul&gt; 元素中,则可以像这样定位它:

#navigation>ul li .push_left {

    position: absolute;
    top: 42px;
    left: 0px; /* set this value to however far left you want the sub-menu */

}

【讨论】:

  • 没那么容易。你能确保元素实际上是向左移动的,而不是仅仅切断溢出的部分吗?
  • 我还建议使用overflow-x(不是它的y部分..)
  • overflow-x 以某种方式切断了子菜单的其余部分。它不会将子菜单向左移动以保持其大小。
  • 已编辑答案以显示如何仅将某些项目向左移动。希望能帮助到你。如果每个子菜单的位置不同(即左侧的距离不同),您显然需要为要向左移动的每个子菜单添加不同的类。
  • 我有一个动态菜单。我可以在不区分左右元素的情况下以某种方式做到这一点吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2017-10-04
  • 2016-08-18
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多