whrhw
V2EX  ›  问与答

学 css 遇到的问题,求前端高手解答

  •  
  •   whrhw · Jul 22, 2014 · 4303 views
    This topic created in 4497 days ago, the information mentioned may be changed or developed.
    代码是这样:
    <!DOCTYPE html>
    <html>
    <head>
    <style>
    #c1{background:red;height:80px;width:30px;float:left;}
    #c2{margin:0px;background:dimgray;}
    #c21,#c22,#c23,#c24,#c25{margin:10px;background:green;width:100px;height:30px;}
    #c22,#c24{background:gold;}
    </style>
    </head>
    <body>

    <div id="c1"></div>
    <div id="c2">
    <div id="c21">Text 1</div>
    <div id="c22">Text 2</div>
    <div id="c23">Text 3</div>
    <div id="c24">Text 4</div>
    <div id="c25">Text 5</div>
    </div>
    </body>
    </html>

    此时的效果图是这样:


    当我把#c2的margin改为30px时效果变成了这样:


    #c2会影响前面的浮动元素#c1的定位?

    求v2的前端工程师解答,前端菜鸟一枚,范了低级错误求轻喷
    21 replies  •  2014-07-23 13:47:27 +08:00
    lijsh
    lijsh
    Jul 22, 2014 via Android
    1
    看看body
    whrhw
    whrhw
    OP
    Jul 22, 2014
    2
    @lijsh 不解,body有什么问题?
    qiayue
    qiayue
    Jul 22, 2014
    3
    c1 没变啊,是 c2 动了
    jings
    jings
    Jul 22, 2014
    4
    @qiayue c1向下移了
    kamal
    kamal
    Jul 22, 2014❤️2
    5
    CSS 外边距(margin)重叠及防止方法
    http://www.hujuntao.com/web/css/css-margin-overlap.html

    Collapsing margins
    http://www.w3.org/TR/CSS2/box.html#collapsing-margins

    关于Block Formatting Context--BFC和IE的hasLayout
    http://www.cnblogs.com/pigtail/archive/2013/01/23/2871627.html
    qiayue
    qiayue
    Jul 22, 2014
    6
    @kamal 学习了
    kamal
    kamal
    Jul 22, 2014
    7
    Margin collapsing
    https://developer.mozilla.org/en-US/docs/Web/CSS/margin_collapsing

    善用搜索引擎啊楼主
    Tonni
    Tonni
    Jul 22, 2014
    8
    我最讨厌的就是写HTML和CSS代码了
    whrhw
    whrhw
    OP
    Jul 22, 2014
    9
    @kamal

    恕我愚笨

    这里: http://www.hujuntao.com/web/css/css-margin-overlap.html说:

    相邻的盒模型中,如果其中的一个是浮动的(float),垂直margin不会重叠,并且浮动的盒模型和它的子元素之间也是这样。

    还有这里: http://www.w3.org/TR/CSS2/box.html#collapsing-margins说:

    Margins between a floated box and any other box do not collapse (not even between a float and its in-flow children)

    能否具体指出?
    wxt2005
    wxt2005
    Jul 22, 2014❤️1
    10
    我的理解是,div#c2的margin-top和body的margin-top融合变为了30px,所以导致在body中的div#c1也随之下降了30px。
    不知道是否正确。
    p2p
    p2p
    Jul 23, 2014
    11
    @wxt2005 对

    折叠的margin 会出现在最外层 也就是body上
    whrhw
    whrhw
    OP
    Jul 23, 2014
    12
    @wxt2005 非常感谢

    在v2潜水了很久,这是我第一次发帖,v2气氛真不错
    yreenchan
    yreenchan
    Jul 23, 2014
    13
    如果第二个c2也加了左浮动,两个盒子就不会重叠在一起了
    kamal
    kamal
    Jul 23, 2014
    14
    @whrhw 刚看到,这句话的前提是“相邻的盒模型中”,你的代码中是父级重叠了。
    whrhw
    whrhw
    OP
    Jul 23, 2014 via Android
    15
    @kamal 谢谢解答
    forreal
    forreal
    Jul 23, 2014
    16
    学习了
    @kamal
    类似这种问题向搜索引擎描述啊,比如一开始我可能不知道是margin collapsing
    un
    un
    Jul 23, 2014
    17
    @wxt2005 父元素和子元素的 margin 也能重叠么?
    un
    un
    Jul 23, 2014
    18
    这个 30px 就是 #c2 的,我觉得和 body 的 margin 没有关系。
    kamal
    kamal
    Jul 23, 2014
    19
    @forreal 也是啊,如果第一次碰到这个问题,我也不知道怎么搜。
    这次搜的关键词是 margin 重叠。
    wxt2005
    wxt2005
    Jul 23, 2014
    20
    @un http://www.w3school.com.cn/css/css_margin_collapsing.asp

    "当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。"
    whrhw
    whrhw
    OP
    Jul 23, 2014
    21
    @wxt2005 应该加上一句只有根元素(html 元素)不会重叠,body和div一样会重叠
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2021 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 15:06 · PVG 23:06 · LAX 07:06 · JFK 10:06
    ♥ Do have faith in what you're doing.