【问题标题】:CSS margin-top on inner div pushing parent div down [duplicate]内部div上的CSS margin-top将父div向下推[重复]
【发布时间】:2013-08-26 22:08:13
【问题描述】:

我正在尝试将子 div 在父 div 内向下推 5px。当我将 ma​​rgin-top:5px; 放在内部 div 上时,它会从父 div 上方的 div 向下推内部 div 和父 div,但不会将内部 div 从父级向下推分区。如何设置它以便仅将内部 div 从父 div 向下推 5px?我不希望父 div 从它上面的 div 向下推。感谢您的帮助。

导航用html:

<nav>
    <div class="nav-container">
      <div id="cat_14623_divs">
          <ul id="nav_14623">
              <li><a href="#" onclick="return false;">AKINA &amp; RED LAKE</a</li>       
              <li><a href="#" onclick="return false;">FRESH WILD CAUGHT FISH</a>
                   <ul id="navsub_14623_2326">
                       <li><a href="#" onclick="return false;">WALLEYE</a></li>
                       <li><a href="#" onclick="return false;">PERCH</a></li>
                       <li><a href="#" onclick="return false;">CRAPPIE</a></li>
                       <li><a href="#" onclick="return false;">NORTHERN</a></li>
                       <li><a href="#" onclick="return false;">WHITEFISH</a></li>
                  </ul></li>
              <li><a href="#" onclick="return false;">NEWS FROM THE FISHERY</a></li>
              <li><a href="#" onclick="return false;">CONTACT US</a></li>
              <li class="last"><a href="#" onclick="return false;">FAQs</a></li>
         </ul>
      </div>
    </div>
</nav>

导航CSS:

nav{
position:relative;
width:960px;
background-color:#660000;
height:40px;
}

div.nav-container{
position:relative;
width:100%; 
}

#cat_14623_divs{
margin-top:5px;
height:30px;
background-color:#520000;
width:960px;    
}

#nav_14623{
list-style:none;
display:block;
padding:0;
width:80%;
margin:0 auto;
}

#nav_14623 li{
position:relative;
float:left;
padding: 0.5em 1.5em;
margin: 0px;
font-size:12px;
border-right:solid 2px #fff;
text-align:center;  
}

#nav_14623 li.last{
border-right:none;
padding-right:5px;
}

#nav_14623 li a{
color:#FFF;
text-decoration:none;
}

#nav_14623 ul{
position: absolute;
left:0;
top: 100%;
display: none;
    padding: 0 1000em; /* trick from css-tricks comments */
    margin: 0 -1000em; /* trick from css-tricks comments */
list-style: none;
margin-left: 0px;
margin: 0;
padding: 5px;
width:200px;
z-index: 1000;
background: #660000;
    border-left: 1px solid #336699;
    border-right: 1px solid #336699;
    border-bottom: 1px solid #336699;
    border-top: none;
 }

#nav_14623 ul li{
position: relative;
float: none;
border-right: none;
padding:0;
margin: 0;
}

#nav_14623 ul li a{
color: #fff;
font-size: 12px;
vertical-align: middle;
line-height:32px;
width: 100%;
height:35px;
display:block;
}

#nav_14623 ul li a:hover{
background: #520000;
width: 100%;
}

#nav_14623 li:hover > ul{
display: block;
}

#nav_14623:after {
content: ""; clear: both; display: block;
}

如果您想查看该网站,请访问以下网址: http://redlakewalleye.designangler.com/

【问题讨论】:

  • 这称为margin collapse

标签: css html


【解决方案1】:

问题是边距接触时边距折叠 - http://www.sitepoint.com/web-foundations/collapsing-margins/

【讨论】:

    【解决方案2】:

    您应该对父级使用padding-top,而不是子级上的margin-top

    已更新(作为对您评论的回应)

    利润需要一些东西来反弹。由于父 div 没有可反弹的内容,因此它将在其上方的元素上反弹。因此,您应该使用填充。

    【讨论】:

    • 这似乎有效,谢谢。您能否给我一个解释,为什么具有顶部边缘的子 div 也会将父级向下推?
    • 我更新了我的答案,希望你能理解。有点难以解释。
    • 另外 - padding 应用于元素的内部,而 margin 应用于外部。在某些情况下,这意味着除了/而不是子元素之外,父元素的大小或位置也会受到影响。我发现,一般来说,最好使用padding 移动与其父项相关的项目,而使用margin 移动与兄弟姐妹相关的项目(即 - margin-left:5px 在两个浮动元素之间添加空间)。
    • @LinkinTED,你能解释一下'保证金需要一些东西来反弹'吗?什么是东西?边境?我不明白,仍在努力用 CSS 让我的头脑进入正确的位置。谢谢
    • @pritambohra 边距无效,因为它下面没有任何元素。因此,如果 div 位于正文的末尾,您将看不到它。它需要反弹的东西。所以你需要添加一个元素。但作为替代方案,您可以将填充顶部添加到父级。然后保证金反弹。这使它可见
    猜你喜欢
    • 2011-02-10
    • 2015-03-25
    • 2012-01-21
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多