Удаление или добавление стилей на конкретном элементе каждой строки невозможно выполнить с помощью чистого CSS, если вы не знаете точно, сколько элементов имеется в строке (с помощью семейства селекторов nth-child()
).
Отрицательные поля
Что вы можете сделать в случае полей, это замаскировать их, добавив отрицательные поля в родительский элемент.Это создаст иллюзию того, что ваши дочерние элементы помещаются внутри родительского элемента, при этом расстояние между отдельными элементами все еще остается:
http://codepen.io/cimmanon/pen/dwbHi
ul {
margin-left: -5px;
margin-right: -5px;
}
li {
margin-left: 5px;
margin-right: 5px;
}
Разделение поля пополам и установка его наОбе стороны (margin-left: 5px; margin-right: 5px
) могут давать лучшие результаты, чем одно поле с одной стороны (margin-right: 10px
), особенно если вашему дизайну необходимо работать с направлениями LRT и RTL.
Примечание: для этого может потребоваться добавление overflow-x: hidden
к элементу-предку, чтобы предотвратить горизонтальную прокрутку, в зависимости от того, насколько близко контейнерный элемент расположен к краю области просмотра.
Медиа-запросы
Если вы можетеразумно предсказать, сколько элементов будет в строке, вы можете использовать медиазапросы для нацеливания на последний элемент в строке с помощью nth-child()
.Это значительно более многословно, чем использование отрицательных полей, но это позволит вам сделать другие корректировки стиля:
@media (min-width: 400px) and (max-width: 499px) {
li:nth-child(even) {
margin-right: 0;
border-right: none;
}
}
@media (min-width: 500px) and (max-width: 599px) {
li:nth-child(3n+3) {
margin-right: 0;
border-right: none;
}
}
@media (min-width: 600px) and (max-width: 799px) {
li:nth-child(4n+4) {
margin-right: 0;
border-right: none;
}
}
/* etc. */