場合CSS3はオプションで、これはCSSの使用して行うことができるcalc()
機能を。
ケース1:単一行でボックスを揃える(FIDDLE)
マークアップは単純です-いくつかのコンテナー要素を持つdivの束。
CSSは次のようになります。
div
{
height: 100px;
float: left;
background:pink;
width: 50px;
margin-right: calc((100% - 300px) / 5 - 1px);
}
div:last-child
{
margin-right:0;
}
ここで-1pxはIE9 + 計算 /丸めのバグを修正します- ここを参照してください
ここでは、calc()
機能に加えて、media queries
必要です。
基本的な考え方は、#columnsの状態ごとにメディアクエリを設定することです。この場合、calc()を使用して、各要素(最後の列の要素を除く)の余白を計算します。
これは大変な作業のように思えますが、LESSまたはSASSを使用している場合、これは非常に簡単に行うことができます
(通常のcssでも実行できますが、すべての計算を手動で実行する必要があります。次に、ボックスの幅を変更した場合は、すべてを再計算する必要があります)
以下はLESSを使用した例です(このコードをここにコピーして貼り付けて遊んでください。[上記のフィドルの生成に使用したコードでもあります])。
@min-margin: 15px;
@div-width: 150px;
@3divs: (@div-width * 3);
@4divs: (@div-width * 4);
@5divs: (@div-width * 5);
@6divs: (@div-width * 6);
@7divs: (@div-width * 7);
@3divs-width: (@3divs + @min-margin * 2);
@4divs-width: (@4divs + @min-margin * 3);
@5divs-width: (@5divs + @min-margin * 4);
@6divs-width: (@6divs + @min-margin * 5);
@7divs-width: (@7divs + @min-margin * 6);
*{margin:0;padding:0;}
.container
{
overflow: auto;
display: block;
min-width: @3divs-width;
}
.container > div
{
margin-bottom: 20px;
width: @div-width;
height: 100px;
background: blue;
float:left;
color: #fff;
text-align: center;
}
@media (max-width: @3divs-width) {
.container > div {
margin-right: @min-margin;
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @3divs-width) and (max-width: @4divs-width) {
.container > div {
margin-right: ~"calc((100% - @{3divs})/2 - 1px)";
}
.container > div:nth-child(3n) {
margin-right: 0;
}
}
@media (min-width: @4divs-width) and (max-width: @5divs-width) {
.container > div {
margin-right: ~"calc((100% - @{4divs})/3 - 1px)";
}
.container > div:nth-child(4n) {
margin-right: 0;
}
}
@media (min-width: @5divs-width) and (max-width: @6divs-width) {
.container > div {
margin-right: ~"calc((100% - @{5divs})/4 - 1px)";
}
.container > div:nth-child(5n) {
margin-right: 0;
}
}
@media (min-width: @6divs-width){
.container > div {
margin-right: ~"calc((100% - @{6divs})/5 - 1px)";
}
.container > div:nth-child(6n) {
margin-right: 0;
}
}
したがって、基本的には、最初にボックスの幅とボックス間の最小マージンを決定する必要があります。
これで、各州に必要なスペースを計算できます。
次に、calc()を使用して右マージンを計算し、n番目の子を使用して、最終列のボックスから右マージンを削除します。
使用される受け入れられた回答に対するこの回答の利点はtext-align:justify
、ボックスの行が複数ある場合-最終行のボックスが「正当化」されないことです。たとえば、最終行に2つのボックスが残っている場合-私は最初のボックスを左側に配置し、次のボックスを右側に配置するのではなく、ボックスを順番に並べます。
ブラウザーのサポートについて:これはIE9 +、Firefox、Chrome、Safari6.0 +で動作します(詳細についてはこちらを参照)。[誰かが知っている私は本当にたいと思い、この問題を解決する方法を知っている場合:)] < - FIXED HERE
display:inline-block;
フロートの代わりにしないのですか?