如何在容器内浮动元素

How to float elements inside a container

我正在尝试将 #container 放在屏幕中央,并使 'charts' float:left 位于 #container.

但是使用下面的代码,'charts' 位于 #container 下方。谁能告诉我如何更改代码?并告诉我为什么代码使 'charts' 在 #container.

之外

#container {
  margin: auto;
  width: 10%;
  border: 3px solid #73AD21;
  padding: 10px;
}
#id1,
#id2,
#id3,
#id4 {
  float: left;
  font-size: 30px;
}
<div id="container">
  <div id="id1">
    <p>chart1</p>
  </div>
  <div id="id2">
    <p>chart2</p>
  </div>
  <div id="id3">
    <p>chart3</p>
  </div>
  <div id="id4">
    <p>chart4</p>
  </div>
</div>

当您向元素添加浮动时,您将脱离文档的自然流动。

您需要向浮动项的包装器添加某种 clearfix。

.clearfix:before,
.clearfix:after {
    content: "";
    display: table;
}

.clearfix:after {
    clear: both;
}

#container{
    margin: auto;
    width: 10%;
    border: 3px solid #73AD21;
    padding: 10px;
}
#id1,
#id2,
#id3,
#id4 {
    float:left;
    font-size: 30px;    
}
<div id="container" class="clearfix">
  <div id="id1"><p>chart1</p></div>
  <div id="id2"><p>chart2</p></div>
  <div id="id3"><p>chart3</p></div>
  <div id="id4"><p>chart4</p></div>
</div>

更新

如果宽度是固定的,为什么要浮动 div?

每当您 float 需要清除 float 项目时,如果您应用相同的属性,请使用 类 而不是 ID。 为您的容器增加 width,以便每行有 2 个项目,如您在上面的评论中所述

.cf:before,
.cf:after {
  content: "";
  display: block;
}
.cf:after {
  clear: both;
}
#container {
  margin: auto;
  width: 24%; /* to have 2 divs per row */
  border: 3px solid #73AD21;
  padding: 10px;
}
.float {
  float: left;
  font-size: 30px;
}
<div id="container" class="cf">
  <div class="float">
    <p>chart1</p>
  </div>
  <div class="float">
    <p>chart2</p>
  </div>
  <div class="float">
    <p>chart3</p>
  </div>
  <div class="float">
    <p>chart4</p>
  </div>
</div>