Как сохранить 3 элемента li с 33,3% + margin-right в одном ряду? Border-бокс?
У меня есть 3 элемента li - каждый шириной 33,3%. Я пытаюсь создать margin-right
разрыв между каждым <li>
- однако дополнительная маржа составляет общую сумму <li>
ширина превышает 100% и ломается на новой строке.
Смогу ли я разобраться в этом с помощью какого-то подхода с использованием границ? Пытался применить это глобально, но безуспешно.
http://codepen.io/anon/pen/jbazaN
html {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*,
*:before,
*:after {
-webkit-box-sizing: inherit;
-moz-box-sizing: inherit;
box-sizing: inherit;
}
.content {
width: 700px;
background: gray;
padding: 20px;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
float: left;
width: 33.3%;
margin: 0 20px 0 0;
background: blue;
}
2 ответа
Вам нужна функция Calc
ul li {
float: left;
width: calc(33.3% - 20px);/*add this*/
margin: 0 20px 0 0;
background: blue;
}
Вот ты где
html {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*,
*:before,
*:after {
-webkit-box-sizing: inherit;
-moz-box-sizing: inherit;
box-sizing: inherit;
}
.content {
width: 700px;
background: gray;
padding: 20px;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
float: left;
width: calc(33.3% - 20px);
margin: 0 20px 0 0;
background: blue;
}
<div id="wrapper">
<div class="content">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<div style="clear: both;"></div>
</ul>
</div>
</div>
подумайте о добавлении префикса или использовании prefixfree из lea verou.
Обновить:
Чтобы убрать поле в каждом третьем элементе списка внутри ваших неупорядоченных списков, вам понадобятся селекторы not и nth ul li:not(:nth-child(3n+3))
ul li {
float: left;
width: 33.3%;
/*margin: 0 20px 0 0;*/
background: blue;
}
ul li:not(:nth-child(3n+3)){margin: 0 20px 0 0;}
живое демо
html {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*,
*:before,
*:after {
-webkit-box-sizing: inherit;
-moz-box-sizing: inherit;
box-sizing: inherit;
}
.content {
width: 700px;
background: gray;
padding: 20px;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
float: left;
width: calc(33.3% - 20px);
/*margin: 0 20px 0 0;*/
background: blue;
}
ul li:not(:nth-child(3n+3)){margin: 0 20px 0 0}
<div id="wrapper">
<div class="content">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<div style="clear: both;"></div>
</ul>
</div>
</div>
или напишите, а затем перезапишите, чтобы избежать не селектора, как это
ul li {
float: left;
width: calc(33.3% - 20px);
margin: 0 20px 0 0;
background: blue;
}
ul li:nth-child(3n+3){margin: 0 0px 0 0}
Если вы хотите поддерживать старые браузеры, такие как IE8, вы можете использовать этот метод, выполняя небольшую математику.
В вашем случае у вас есть 3 предмета, и вам нужно добавить маржу справа 20px для первых двух предметов, что в сумме составляет 40px .
Теперь вычтите это значение из контейнера (будет 660 пикселей), затем разделите его на количество элементов,
(660/3 = 220px) ширина для каждого элемента, последний шаг, нам нужно получить процент ширины элемента = ширина нового элемента / ширина старого контейнера [220/700 =.314286 (31,429%)].
И, наконец, мы удаляем поле справа от последних элементов, добавляя к нему класс или используя этот
ul li + li + li { margin-right: 0 }
потому что IE8 и ниже не поддерживает селектор последнего ребенка
В конце ваш код будет:
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*,
*:before,
*:after {
-webkit-box-sizing: inherit;
-moz-box-sizing: inherit;
box-sizing: inherit;
}
.content {
width: 700px;
background: gray;
padding: 0px;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
ul li {
float: left;
width: 31.429%;
margin: 0 20px 0 0;
background: blue;
}
ul li+li+li {
margin-right:0
}
<div id="wrapper">
<div class="content">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<div style="clear: both;"></div>
</ul>
</div>
</div>
Ссылка: Альтернатива для nth, первый дочерний и последний дочерний для IE8, Могу ли я использовать