仅使用CSS将Parent Width设置为Children Total Width?

时间:2014-12-09 15:33:22

标签: html css css3 width calc

我不知道有多少.child个元素.parent会包含但我知道它们各自的宽度。

我想将.parent的宽度设置为等于(每个.child的宽度) * .child的总数)

我不想使用floatswidth: auto;

我可以在不使用Javascript的情况下使用calc()执行某些操作吗?

** CSS:**

.parent {
  height: 100%;
  width: calc({number of children} * {width of each child = 100px});
}

.child {
  height: 100px;
  width: 100px;
}

HTML:

<div class="parent">
  <div class="child">
  <div class="child">
  <div class="child">
</div>

6 个答案:

答案 0 :(得分:12)

我知道这有点晚了,但希望这会有助于寻找类似解决方案的人:

<div class="parent" style="display: inline-flex">
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
        </div>

诀窍是对inline-flex使用parent,为inline-table使用child。一切都充满活力。我通过添加另一个grandparentoverflow-x:scroll;

来使表格水平滚动
<div class="grandparent" style="width: 300px; overflow-x: scroll; background: gray">
        <div class="parent" style="display: inline-flex">
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
            <div class="child" style="display: inline-table">some button</div>
        </div>
    </div>

答案 1 :(得分:6)

&#13;
&#13;
* {
  margin:0;
  padding:0;
  box-sizing:border-box;
  }

.parent {
  height: 100%;
  display:inline-block;
  background:#bada55;
  font-size:0; /* clear whitespace*/
}

.child {
  height: 100px;
  width: 100px;
  border:1px solid red;
  display:inline-block;
}
&#13;
<div class="parent">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

如果您使用的是Chrome,则可以使用max-width: fit-content

它是其他主要浏览器的not yet supported

答案 3 :(得分:0)

.parent{
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -ms-flex-wrap: wrap;
        flex-wrap: wrap;
}

.child {
        -ms-flex-preferred-size: 0;
        flex-basis: 0;
        -webkit-box-flex: 1; 
        -ms-flex-positive: 1;
        flex-grow: 1;
        max-width: 100%;
}

<div class="parent">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>

</div>

答案 4 :(得分:0)

* {
      flex-grow: 1;
      flex-basis: 0;
      width: fit-content;
  }

你可以试试这个

答案 5 :(得分:0)

您可以简单地将 display: inline-block; 设置为 .parent 元素,使其宽度等于其 .child 元素所占用的总宽度。

.parent {
    display: inline-block;
}

默认情况下,HTML 中带有 display: block; 的元素将占据其父元素的整个宽度。在您的情况下,.parent 元素,因为 display: block; 占据了其父元素的全部宽度。因此,通过为 display: inline-block; 元素设置 .parent 将使其宽度等于其内容,在这种情况下是其 .child 元素占用的总宽度。