Есть ли способ использовать селектор CSS для получения среднего ребенка в списке элементов?Middle Child Pseudo-Class
Я знаю, что нет литерала :middle-child
селектор, но есть ли другой способ, не прибегая к Javascript?
Есть ли способ использовать селектор CSS для получения среднего ребенка в списке элементов?Middle Child Pseudo-Class
Я знаю, что нет литерала :middle-child
селектор, но есть ли другой способ, не прибегая к Javascript?
Javascript - это единственный способ сделать эту клиентскую сторону.
Должно быть решение sass – Muhammed
Вы попробовали :nth-child(#)
?
В зависимости от того, какой из них вы хотите выбрать, вы просто замените # номером.
Это работает только в том случае, если известно количество элементов. Я ищу что-то, что будет работать для списка неизвестной длины. – Jason
Ну, я полагаю, если вы не знаете общее число, это тоже не поможет, но в случае, если вы это сделаете - взгляните на этот [CSS3-nth-child on SO] (http: // stackoverflow.com/questions/6692145/nth-child-css-matching-2nd-5th-8th-elements), это похоже на ваш вопрос. –
Если вы хотите применить стиль ко всем элементам, которые не являются ни первыми детьми, ни последними детьми, вы можете использовать :not(:first-child)
, применить стиль, а затем использовать :last-child
, чтобы «удалить стиль» из последнего элемента. Но вам нужно подумать о том, что происходит, когда есть менее 3 элементов.
Если вы хотите избежать дублирования (раздел «взять стиль вдалеке»), проверьте мой ответ, который объединяет два «не» селектора, чтобы уловить все средние элементы ... :-) –
Это работает хорошо для меня:
*:not(:first-child):not(:last-child) {
...
}
Вы можете увидеть пример этого здесь: http://codepen.io/bentomas/pen/Gwqoe
Одно предостережение к этому является то, что он работает только в IE 9+: http://caniuse.com/#feat=css-sel3
Разве это не работает, если есть три предмета? В то время я искал нечто большее, чем в нем. – Jason
Нет, это выберет все элементы, которые не являются первым ребенком, а не последним. Вы можете увидеть это в действии здесь: http://codepen.io/bentomas/pen/Gwqoe – bentomas
О, если вы не хотите * точного * среднего ребенка (т. Е. Только один элемент должен быть сопоставлен). Я думал, что вы хотите выбрать всех детей, которые посередине. По крайней мере, это то, что я ожидал от псевдо-класса ': middle-child', когда я искал его и нашел этот поток. – bentomas
Хотя вы не изящны, если вы знаете верхние и нижние пределы общего количества элементов, вы можете применить подход грубой силы, чтобы выбрать средний элемент.
Например, следующие правила будут выбирать средний элемент в наборе из 5, 7 или 9 элементов.
div:nth-child(3):nth-last-child(3) {
/* The middle element in a set of 5 is the 3rd element */
}
div:nth-child(4):nth-last-child(4) {
/* The middle element in a set of 7 is the 4th element */
}
div:nth-child(5):nth-last-child(5) {
/* The middle element in a set of 9 is the 5th element */
}
Или с Sass:
@for $i from 3 through 5 {
div:nth-child(#{$i}):nth-last-child(#{$i}) {
/* The middle element */
}
}
Если может быть четное число элементов, можно включить 'div: nth-child (-1 + # {$ i}): nth-last-child (# {$ i})' и/или ' div: nth-child (# {$ i}): nth-last-child (-1 + # {$ i}) ', чтобы выбрать элемент слева или справа от центра, соответственно. – Blazemonger
Вы можете использовать "не первый и не последний" подход, например, так:
CSS
li:not(:first-child):not(:last-child) {
color:red;
}
HTML
<ul>
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Проверить JsFiddle
Изменит ли количество детей? – jackweinbender
Количество элементов задается при загрузке страницы и может варьироваться от пользователя к пользователю. – Jason
Если вы работаете в PHP или Ruby или что-то еще, вы, безусловно, можете написать функцию для добавления класса к среднему элементу. – jackweinbender