【问题标题】:Two 50% width divs don't fit in parent两个 50% 宽度的 div 不适合父级
【发布时间】:2014-08-11 13:01:04
【问题描述】:

对不起,如果它是重复的东西,我已经诚实地搜索过了,但我仍然遇到这个小提琴中显示的问题:http://jsfiddle.net/tfvdzzee/1/

这里的代码:

html

<div id="wrap">
    <div id="one">1</div>
    <div id="two">2</div>
</div>

css

#wrap
{
    max-width: 400px;
    margin: auto;
    border: 2px solid black;
}
#one, #two
{
    width: 50%;
    background: green;
}
#two
{
    float: right;
    background: red;
}

【问题讨论】:

  • 你只浮动了其中一个。向左浮动#one,它应该可以工作
  • 或者display: inline-block;也可以工作(在#one,#two中)。
  • @Sifu,只有在你注释掉它们之间的空白时才会起作用
  • @Sifu 由于宽度为 50% display:inline-block 会将第二个块向下推。

标签: html css


【解决方案1】:

我相信display: inline-block; 是最好的答案,因为它可以防止重叠和溢出的错误,同时还保留其父定义。

JsFiddle Demo

HTML

<div id="wrap">
    <div id="one">1</div><!--
 --><div id="two">2</div>
</div>

CSS

#wrap
{
    max-width: 400px;
    margin: auto;
    border: 2px solid black;
}

#one, #two
{
    width: 50%;
    background: green;
    display: inline-block;
    /* If worried about IE7 and IE6, add the two next lines */
    *display: inline;
    *zoom: 1;
}

#two
{
    background: red;
}

【讨论】:

  • 嗯...有效!我想知道,我已经制作了 2 页这样的页面,但 display: inline-block 没有帮助,但现在。我很困惑。不过谢谢。
  • @VIRUS 这可能是因为你没有注释掉两个 div 之间的空格。
  • @TylerH 如果你不说,我永远不会明白这一点。我完成了:D
【解决方案2】:

Demo Fiddle

您需要both float:left #one 元素以及将 overflow:hidden 设置为父元素以确保它正确包裹子元素。

将您的 CSS 更改为:

#wrap
{
    max-width: 400px;
    margin: auto;
    border: 2px solid black;
    overflow:hidden; /* <---ensure the parent wraps the children */

}

#one, #two
{
    width: 50%;
    background: green;
    float:left; /* <---ensure the children display inline */
}

#two
{
    float: right;
    background: red;
}

【讨论】:

    【解决方案3】:

    在您的 CSS 中添加以下样式。

     #one{float:left}
    

    DEMO

    【讨论】:

      【解决方案4】:

      删除 #two 的 Css 属性并添加此

      #one, #two
      {
          width: 50%;
          background: green;
          float: left;
      }
      

      【讨论】:

      • @Sifu - 不,它不会......除非他们有绝对的定位
      【解决方案5】:

      您需要浮动两个 div。在浮动之后,使用 clearfix 类清除浮动。

      CSS:

      #one, #two{ float:left; }
      
      .clearfix:after {
         visibility: hidden;
         display: block;
         font-size: 0;
         content: " ";
         clear: both;
         height: 0;
       }
      

      HTML:

      <div id="wrap" class="clearfix">
        <div id="one">1</div>
        <div id="two">2</div>
      </div>
      

      DEMO

      【讨论】:

        【解决方案6】:

        使用float: left,而#two 不需要float: right

        #one, #two
        {
            width: 50%;
            background: green;
            float: left;
        }
        
        #two
        {
            background: red;
        }
        

        Fiddle 示例。

        【讨论】:

        • 这会将它们移到应用于#wrap 的边框之外
        【解决方案7】:
        #wrap
        {
            max-width: 400px;
            margin: auto;
            border: 2px solid black;
        }
        #wrap:after{
            clear:both;
            content:"";
            display:block;
        }
        
        #one, #two
        {
            width: 50%;
            float:left;
            background: green;
        }
        
        #two
        {
            background: red;
        }
        

        试试这个并在 :after div 的 :after 伪元素上使用 clearfix。

        DEMO

        【讨论】:

        • 为什么这么复杂,而你可以使用内联块?
        【解决方案8】:

        扩展sifu的评论并以多种方式回答问题

        第一种方法(使用浮点数)

        #wrap
        {
          max-width: 400px;
          margin: auto;
          border: 2px solid black;
        }
        #one,#two
        {
          float:left;
          width:50%;
        }
        

        http://jsfiddle.net/tfvdzzee/7/

        显示内联块方法

        #wrap
        {
           max-width: 400px;
           margin: auto;
           border: 2px solid black;
           font-size:0px;
        }
        #one,#two
        {
           width:50%;
           display:inline-block;
           font-size:16px;
        }
        

        http://jsfiddle.net/tfvdzzee/8/

        这两种方法都可以使用,但是如果您仍在为 IE7 开发(不知道为什么要这样做),那么方法 2 将不起作用。

        【讨论】:

        • 请不要复制其他人的答案并将其作为您自己的答案发布,即使将它们合并为一个答案也是如此。新的答案应该增加解决问题的新方法。
        • 方法 2 适用于简单的 css hack:{display:inline-block; *display: inline; zoom: 1;}
        • Sifu - 谢谢,我不知道自己会欣赏它。 - 对不起,如果你觉得我复制了你的答案。 @TylerH - 如果您查看我们的答案,它们并不完全相同;我们以不同的方式解决空白问题。我提到了 Sifu 的答案,因为它们有相似之处,我注意到他发表了关于这个问题的评论,似乎有点厌倦了一个完美的答案。我道歉
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多