Якщо css3 є опцією, це можна зробити за допомогою функції css calc()
.
Випадок 1: Вирівнювальні поля в одному рядку ( ПІДТВЕРДЖЕНО) )
Розмітка проста - купа дівок з деяким елементом контейнера.
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 / округлення - дивіться тут
Випадок 2: поле для вирівнювання в декількох рядках ( FIDDLE )
Тут, крім calc()
функції, media queries
необхідні.
Основна ідея полягає у встановленні медіа-запиту для кожного стану # Column, де я використовую calc () для опрацювання правого поля на кожному з елементів (крім тих, що знаходяться в останньому стовпці).
Це звучить як велика робота, але якщо ви використовуєте Менше або SASS, це можна зробити досить легко
(Це все ще можна зробити з звичайним css, але тоді вам доведеться робити всі обчислення вручну, і тоді, якщо ви зміните ширину поля, вам доведеться все відпрацювати знову)
Нижче наведено приклад використання МЕНШЕ: (Ви можете скопіювати / вставити цей код сюди, щоб грати з ним, [це також код, який я використовував для створення вищезгаданої скрипки])
@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 () для обчислення правильної межі, а nth-child для вилучення правильного поля з полів у заключному стовпчику.
Перевага цієї відповіді над загальноприйнятому відповіддю , який використовуєtext-align:justify
в тому , що коли у вас є більш ніж один ряд ящики - пакети на заключному поспіль не отримують «виправданим» , наприклад: якщо є 2 коробки , що залишилися на заключному ряду - я не хочете, щоб перша скринька знаходилася зліва, а наступна справа - а краще, щоб поля йшли один за одним у порядку.
Щодо підтримки браузера : це буде працювати в IE9 +, Firefox, Chrome, Safari6.0 + - (детальніше див. Тут ). Однак я помітив, що в IE9 + є деякий збій між станами запитів медіа. [якщо хтось знає, як це виправити, я дуже хотів би знати :)] <- ФІКСОВАНИЙ ТУТ
display:inline-block;
замість плаву?