【问题标题】:how to make a div to wrap two float divs inside?如何制作一个div来包装两个浮动div?
【发布时间】:2010-12-23 02:04:24
【问题描述】:

我不知道这是否是一个常见问题,但我目前在网络上找不到解决方案。 我想将两个 div 包裹在另一个 div 中,但是里面的这两个 div 必须对齐同一级别(例如:左边一个占 WrapdDiv 的 20% 宽度,右边一个占另一个 80%)。为了达到这个目的,我使用了下面的示例 CSS。但是,现在 wrap DIV 并没有将这些 div 全部包装起来。 wrap div 的高度比包含在里面的两个 div 小。我如何确保 wrap Div 具有最大的高度作为包含的 div?谢谢!!!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>liquid test</title>
    <style type="text/css" media="screen">
        body
        {
            margin: 0;
            padding: 0;
            height:100%;
        }
        #nav
        {
            float: left;
            width: 25%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }

        #content
        {
            float: left;
            margin-left: 1%;
            width: 65%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }       
        #wrap
        {
          background-color:#DDD;
          height:100%;
        }

</style>
</head>
<body>
<div id="wrap">
    <h1>wrap1 </h1>
    <div id="nav"></div>
    <div id="content"><a href="index.htm">&lt; Back to article</a></div>
</div>
</body>
</html>

【问题讨论】:

    标签: css layout html css-float


    【解决方案1】:

    除了clear: both hack,您可以跳过额外的元素并在包装div 上使用overflow: hidden

    <div style="overflow: hidden;">
        <div style="float: left;"></div>
        <div style="float: left;"></div>
    </div>
    

    【讨论】:

    • 我最喜欢溢出:隐藏的方法。
    • 我很高兴有人把它放在这里......当人们添加一个元素只是为了清除浮动而这只是一个 css 问题时,这让我发疯了。
    • 它适用于溢出:自动;到。我认为这是 hack,溢出更优雅的“hack”然后 div clear :)
    • 这有一些缺点,@​​987654321@ 也推荐.container { word-wrap: break-word; }.container img { max-width: 100%; height: auto; } 让大内容表现良好。
    • 这似乎不适用于我有两个浮动 div 的 body 元素。即使溢出:隐藏,主体也不会占用内部元素的大小。我一直用这种方法,不知道为什么不起作用,请帮忙!
    【解决方案2】:

    当一个块中有两个浮点数时,这是一个常见的问题。修复它的最佳方法是在第二个 div 之后使用 clear:both

    <div style="display: block; clear: both;"></div>
    

    它应该强制容器是正确的高度。

    【讨论】:

    • 一个 div 已经是一个块元素,所以你可以从你的样式中删除它。
    【解决方案3】:

    应该这样做:

    <div id="wrap">
      <div id="nav"></div>
      <div id="content"></div>
      <div style="clear:both"></div>
    </div>
    

    【讨论】:

      【解决方案4】:

      overflow:hidden(如 @Mikael S 所述)并非在所有情况下都有效,但在大多数情况下都应该有效。

      另一种选择是使用:after 技巧:

      <div class="wrapper">
        <div class="col"></div>
        <div class="col"></div>
      </div>
      
      .wrapper {
        min-height: 1px; /* Required for IE7 */
        }
      
      .wrapper:after {
        clear: both;
        display: block;
        height: 0;
        overflow: hidden;
        visibility: hidden;
        content: ".";
        font-size: 0;
        }
      
      .col {
        display: inline;
        float: left;
        }
      

      对于 IE6:

      .wrapper { height: 1px; }
      

      【讨论】:

        【解决方案5】:

        浮动一切。

        如果您在非浮动div 内有一个浮动div,那么一切都会变得混乱。这就是大多数 CSS 框架(如 Blueprint 和 960.gs)都使用浮动容器和divs 的原因。

        要回答您的特定问题,

        <div class="container">
        <!--
        .container {
          float: left;
          width: 100%;
        }
        -->
          <div class="sidebar">
          <!--
          .sidebar {
            float: left;
            width: 20%;
            height: auto;
          }
          -->
          </div>
          <div class="content">
          <!--
          .sidebar {
            float: left;
            width: 20%;
            height: auto;
          }
          -->
          </div>
        </div>
        

        应该工作得很好,只要你float:left;你所有的&lt;div&gt;s。

        【讨论】:

          【解决方案6】:

          使用这个 CSS hack,它为我节省了很多麻烦和时间。

          http://swiftthemes.com/2009/12/css-tips-and-hacks/problem-with-height-of-div-containing-floats-and-inline-lists/

          我在每个项目中都使用它。

          【讨论】:

            【解决方案7】:

            这是另一个,我觉得很有帮助。它甚至适用于响应式 CSS 设计。

            #wrap
            {
               display: table;
               table-layout: fixed; /* it'll enable the div to be responsive */
               width: 100%; /* as display table will shrink the div to content-wide */
            }
            

            警告:但是这个理论不适用于 holder 包含具有绝对位置的内部元素。它会给固定宽度的布局带来问题。但是对于响应式设计来说,它简直太棒了。 :)

            添加到 Meep3D 的 ANSWER

            使用 CSS3,在动态部分,您可以通过以下方式向最后一个元素添加清晰浮动:

            #wrap [class*='my-div-class']:last-of-type {
              display: block;
              clear: both;
            }
            

            你的 div 在哪里:

            <div id="wrap">
            <?php for( $i = 0; $i < 3; $i++ ) {
               <div class="my-div-class-<?php echo $i ?>>
                  <p>content</p>
               </div> <!-- .my-div-class-<?php echo $i ?> -->
            }
            </div>
            

            参考:

            【讨论】:

              【解决方案8】:

              在这里,我向您展示了解决问题的 sn-p(我知道,距离您发布它已经太久了,但我认为这比“清除”修复更干净)

              #nav
                      {
                          float: left;
                          width: 25%;
                          height: 150px;
                          background-color: #999;
                          margin-bottom: 10px;
                      }
              
                      #content
                      {
                          float: left;
                          margin-left: 1%;
                          width: 65%;
                          height: 150px;
                          background-color: #999;
                          margin-bottom: 10px;
                      }       
                      #wrap
                      {
                        background-color:#DDD;
                        overflow: hidden
                      }
                  <div id="wrap">
                  <h1>wrap1 </h1>
                  <div id="nav"></div>
                  <div id="content"><a href="index.htm">&lt; Back to article</a></div>
                  </div>

              【讨论】:

                【解决方案9】:

                与其使用overflow:hidden,这是一种hack,为什么不简单地设置一个固定的高度,例如height:500px,给上级部门?

                【讨论】:

                  【解决方案10】:
                  <html>
                  <head>
                      <style>
                          #main { border: 1px #000 solid; width: 600px; height: 400px; margin: auto;}
                          #one { width: 20%; height: 100%; background-color: blue; display: inline-block; }
                          #two { width: 80%; height: 100%; background-color: red; display: inline-block; }
                      </style>
                  </head>
                  <body>
                  <div id="main">
                      <span id="one">one</span><span id="two">two</span>
                  </div>
                  </body>
                  </html>
                  

                  秘密是inline-block。如果您使用边框或边距,您可能需要减小使用它们的 div 的宽度。

                  注意:如果您使用“DIV”而不是“SPAN”,这在 IE6/7 中无法正常工作。 (见http://www.quirksmode.org/css/display.html

                  【讨论】:

                    【解决方案11】:

                    HTML

                    <div id="wrapper">
                        <div id="nav"></div>
                        <div id="content"></div>      
                        <div class="clearFloat"></div>
                    </div>
                    

                    CSS

                    .clearFloat {
                        font-size: 0px;
                        line-height: 0px;
                        margin: 0px;
                        padding: 0px;
                        clear: both;
                        height: 0px;
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 2019-02-26
                      • 2014-07-28
                      • 2010-10-06
                      • 2013-04-06
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-11-20
                      相关资源
                      最近更新 更多