_.child
_要素の数_.parent
_がいくつ含まれるかはわかりませんが、個々の幅は知っています。
_.parent
_の幅を(各_.child
_の幅)*(_.child
_の総数)に等しく設定したい
floats
と_width: 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>
_
私はこれが少し遅いことを知っていますが、これが同様の解決策を探している人を助けることを願っています:
<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>
トリックは、parent
にinline-flex
を、child
にinline-table
を使用することです。すべてが動的です。別のgrandparent
をoverflow-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>
* {
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;
}
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
Chromeを使用している場合は、max-width: fit-content
ただし、他の主要なブラウザでは まだサポートされていません です。
.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>