元素边距推送父元素[重复]

Posted

技术标签:

【中文标题】元素边距推送父元素[重复]【英文标题】:Element margin push parent element [duplicate] 【发布时间】:2011-07-19 22:35:18 【问题描述】:

可能重复:Margin on child element moves parent element

我在将边距应用于<div/> 内的子元素时遇到问题。孩子的边距会影响父母的:

<style type="text/css">
    htmlwidth:100%
    html body divmargin-left:auto;margin-right:auto;width:800px;
    div#descmargin-top:100px;background-color:white;width:500px;font-size:24px;
    #photowidth:10px;height:10px
</style>
<html>

  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>


  <body>
      <div>
    <div style="background-color: silver">
        <div id="desc">
        CSS<br/>
        IS<br/>
        THE<br/>
        HARDEST<br/>
        LANGUAGE<br/>
        EVER<br/>
        </div>
    </div>


     </div>
  </body>

</html>

为什么div#desc 不将自身向下移动 100 像素,而是将整个构造移动这个值!?

Here is the working demo.

【问题讨论】:

我可以告诉你,CSS 不会是你长久以来最难的语言。 【参考方案1】:

如果您在谈论,为什么文本也被向下移动,这是因为文本进入了 desc div。如果不是,请稍微解释一下您的意思,谢谢。

【讨论】:

【参考方案2】:

因为collapsing margins。

See another answer I wrote 了解各种“修复”它的方法。

例如,在您的情况下,您可以将 float: left 添加到 #desc 的父级。

http://jsfiddle.net/jsK4y/10/

padding:

http://jsfiddle.net/jsK4y/16/

overflow 未设置为visible

http://jsfiddle.net/jsK4y/17/

【讨论】:

【参考方案3】:

这与边距折叠有关(参考W3C spec)

this question of mine 的回答会对您有所帮助。

overflow:auto 似乎最好

【讨论】:

【参考方案4】:

欢迎来到Margin Collapsing:

人口:@oneat

这是 CSS 新手的常见问题。阅读 w3c 文档,或搜索边距折叠教程。

【讨论】:

你的答案装饰毫无意义。【参考方案5】:

您看到collapsing margins 生效。上面链接的标准为此列出了各种条件。顺便说一句,&lt;style&gt; 元素应该进入&lt;head&gt;

【讨论】:

【参考方案6】:

那是因为外层div没有内容,所以看起来好像不行。

使用位置:绝对;在 css 中或在#desc div 之外放置一些东西会显示给你。

【讨论】:

【参考方案7】:

由于您没有提供太多您真正想做的事情,我会尽力理解。我将假设您希望描述 div 低于父(包装)div 中的 ay 内容 100px。

您的主要问题是您的html body divmargin-left:auto;margin-right:auto;width:800px; css 声明正在被页面上的所有 div 继承。我继续并切碎了您的一些代码,以使您更好地了解事物的放置方式。对 CSS 和 HTML 代码的另一个建议是尽量不要笼统地声明您的声明。明确一点,如您所见,我向父级添加了一个 id。这样您就可以像以前那样避免继承问题。无论如何,这是链接:

http://jsfiddle.net/jsK4y/15/

有很多方法可以用浮动或定位来做你想做的事,甚至可以像你做的那样,通过边距来做你想做的事。但请记住,其中任何一种方式都会有你会遇到的问题。

【讨论】:

【参考方案8】:

Collapsing Margins..

&lt;div style="background-color: silver"&gt; 添加 1px 内边距@ 内边距停止边距“相邻”,如果它们不能相邻,它们就不能折叠。

我还建议将 Doctype 更改为:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">

你的那个是在IE7及以下触发怪癖模式,会导致更多的心痛;)

【讨论】:

以上是关于元素边距推送父元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

38 内边距 padding 1 padding-top right left bottom 2 盒子的大小 3 设置padding内边距 子元素默认都是在父元素的内容区

浮动之后子元素在父元素哪个位置

【css】内边距padding的属性和使用方法

7.28 盒子模型

父子元素margin塌陷问题

如何使用jQuery将子元素从一个父元素移动到另一个父元素[重复]