Помощник
|
Непонятки с псевдоклассом nth-child |
ShowPrint
|
Сообщение
#1
|
|||
|
|
|||
|
||||
fedornabilkin |
17.2.2018, 0:41;
Ответить: fedornabilkin
Сообщение
#2
|
|
Тоже как-то тупил с этим псевдо. Не вспомню уж какая задача была, но я методом научного тыка все решил. Попробуй разные циферки в различных вариантах и обязательно найдешь нужный. А от начала или от конца смотреть, так это от задачи зависит.
|
|
|
yury_mw |
17.2.2018, 11:43;
Ответить: yury_mw
Сообщение
#3
|
|
Надо оставить первые четыре, остальные убрать. Решил использовать псевдокласс nth-child. Присвоил этим ссылкам общий класс ( imgSota ) и в css указал: .imgSota:nth-child(n+4){display:none}Результат: остались только две(!!!) гиперссылки, уже третья(!!!) скрылась попав под это правило. Судя по всему, проблема в том, что в вашем коде на скрине 1-я ссылка является _2-ым_ дочерним элементом блока beeSota, а 1-ый элемент, с которого начинается отсчет применения вашего правила – это список ul с классом Sota. Рабочий пример смотрим в песочнице: https://jsfiddle.net/1e1cyy5b/ Приведенный ниже код, как ему и положено, работает со всеми элементами списка imgSota, начиная с 5-ого (Т.е. скрывает их. Показывает, соответственно, первые 4): <!DOCTYPE html> Сообщение отредактировал yury - 17.2.2018, 12:22 |
|
|
ShowPrint
|
Сообщение
#4
|
|
fedornabilkin, костыль-то всегда найти можно, но хотелось бы понять и разобраться (понимание=опыт) :)
yury_mw, вы имеете в виду что первый элемент (в моём случае список) тоже считается и имеет номер вне зависимости от того что у него не задан класс фигурирующий в css-правиле? Если мои гиперссылки сделать представить отдельным списком и навесить класс (и правило) на этот список, а не на сами гиперссылки, то уверен что правило будет отрабатывать корректно. С подсчётом элементов внутри родителя всё просто и понятно. Но мне изначально не хотелось грузить код (и стили) таким списком только ради того чтоб сгруппировать эти гиперссылки и считать их. При этом хотелось сделать код более-менее универсальным, чтоб при добавлении какого-либо потомка "перед" не приходилось автоматически править стили. На основании Псевдокласс :nth-child используется для добавления стиля к элементам на основе нумерации в дереве элементов. я решил что нумеруются (и считаются) именно элементы с заданным классом по порядку в котором они находятся в DOM, вне зависимости и без привязки к родителю(ям). Считаете в этом ошибка? То есть принцип "набора элементов" и работа "с набором" в css получается отличной от аналогичной работы в JS? Другими словами получается что nth-child считает не порядковый номер не элемента у которого есть класс (селектор), а порядковый номер потомка в родителе внутри которого встречается данный селектор? То есть мы видим селектор, находим родителя и нумеруем его потомков. При этом первый встречающийся селектор может оказаться и первым, и пятым, и десятым... Так? Сообщение отредактировал ShowPrint - 17.2.2018, 14:18 |
|
|
yury_mw |
17.2.2018, 15:53;
Ответить: yury_mw
Сообщение
#5
|
|
Другими словами получается что nth-child считает не порядковый номер не элемента у которого есть класс (селектор), а порядковый номер потомка в родителе внутри которого встречается данный селектор? То есть мы видим селектор, находим родителя и нумеруем его потомков. При этом первый встречающийся селектор может оказаться и первым, и пятым, и десятым... Так? Переводим на человеческий язык ваше правило
1) взять блок с неизвестным родителем (раз вы родителя явно не указываете, то берется первый, который подвернется) 2) выбрать в нем дочерние элементы согласно правилу (n+4), т.е. начиная с 4-ого включительно 3) проверить есть ли у выбранных класс imgSota и тогда применить к ним правило diplay: none Пример
Будут скрыты элементы списка, начиная с 4-ого, в том случае, если у них есть класс imgSota. Т.е. 4-ый, 5-ый и 7-ой получат свойство display:none. 1, 2, 3, 6, 8 и 9 элементы свойство display:none не получат и будут показаны Он же в песочнице: https://jsfiddle.net/zuw5kz6f/ Сообщение отредактировал yury - 17.2.2018, 15:58 |
|
|
ShowPrint
|
Сообщение
#6
|
|
yury_mw, спасибо за перевод на человеческий язык :)
Понимание наступает. По идее получается, что если я свои гиперссылки оберну в div с классом для которого пропишу правило, а с самих гиперссылок класс уберу, то всё должно заработать корректно. Проверю. Еще раз спасибо! |
|
|
yury_mw |
19.2.2018, 15:24;
Ответить: yury_mw
Сообщение
#7
|
|
По идее получается, что если я свои гиперссылки оберну в div с классом для которого пропишу правило, а с самих гиперссылок класс уберу, то всё должно заработать корректно. Да. Работать будет. Вроде как очевидно, что для псевдокласса nth-child не важно, как называется родитель ul или div, важна нумерация потомков. Если вас смущает список, то в моем примере он лишь для семантки + дает некое удобство при оформлении. Естественно, можно и без него:
Пример в песочнице: https://jsfiddle.net/2vr3r9hn/ Сообщение отредактировал yury - 19.2.2018, 15:26 |
|
|
ShowPrint
|
Сообщение
#8
|
|
|
важна нумерация потомков вот в этом вопросе и тупил, наивно полагая что потомки могут ещё фильтроваться по наличию/отсутствию класса.Обернул в div, всё работает. yury_mw, в список оборачивать не решаюсь, по причине того что фактически весь контент на данной страницы так или иначе оформлен списками. Боюсь что боты ПС в плане ранжирования могут настороженно отнестись к сплошным спискам на странице. А так, да - со списками вполне комфортно и удобно работать. Вы же и научили меня с ними вольно (свободно) обращаться, ещё года 2 назад, когда я испытывал проблемы при вёрстке шапки и центрировании элементов внутри неё :)
|
|
|
||
|
Текстовая версия | Сейчас: 19.4.2024, 9:07 |