Dimensi
@Dimensi
Совсем недавно начал познавать верстку.

Почему не получается выбрать элемент с :not():last-child?

Есть список
<ul class="hm__ul">
            <li class="hm__a-active"><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">3</a></li>
            <li><a href="#">4</a></li>
            <li><a href="#">5</a></li>
            <li><a href="#">6</a></li>
            <li class="hm__a-grey"><a href="#">7</a></li>
            <li class="hm__a-grey"><a href="#">8</a></li>
          </ul>

Мне нужно выбрать 6 элемент. Я пытаюсь задать .hm__ul li:not(.hm__a-grey):last-child или .hm__ul li:last-child:not(.hm__a-grey), но все не работает. Такое браузер вообще не умеет делать, либо я ошибку допускаю? Я не знаю по сколько возможно в будущем будет элементов в меню, поэтому использую такой способ. Пробывал еще .hm__ul li.hm__a-grey:first-child, но тоже не работает...
  • Вопрос задан
  • 1960 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега CSS
frontend developer
либо первый потомок с классом .hm__a-grey


.hm__ul > li:not(.hm__a-grey) + li.hm__a-grey { ... }


https://jsfiddle.net/rb04e89n/
https://jsfiddle.net/rb04e89n/1/

PS. Названия классов никуда не годятся. Обязательно пересмотрите этот момент и дайте нормальные имена.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
aliencash
@aliencash
Партизан
Почему просто не использовать :nth-child(6), если вы знаете что он шестой?
Ответ написан
Punkie
@Punkie
Ваша ошибка в том, что вот такого элемента:

.hm__ul li:not(.hm__a-grey):last-child

у вас несуществует. Потому что :last-child всегда указывает на последний дочерний элемент в пределах родителя. То есть, у вас .hm__a-grey (с цифрой 9) - всегда last-child в любом случае. А элемент №6 - никогда :last-child не был и не будет, пока после него есть другие элементы.

Вашу задачу нельзя решить на CSS. Вам нужен js.
Ответ написан
Комментировать
Ankhena
@Ankhena Куратор тега CSS
Нежно люблю верстку
Не получается потому что :last-child выбирает последний элемент своего родителя, т.е. в данном случае 8-ой.
Вот такая Ваша конструкция: li:not(.hm__a-grey):last-child будет брать элементы li, у которых нет класса .hm__a-grey смотреть их родителя и искать у него последний элемент. А последний элемент родителя это опять таки 8-ой, вне зависимости от того к которому li Вы будете приписывать свойства.

В данном случае надо:
- Либо еще раз подумать над структурой данных - текущая выглядит странно с семантической точки зрения.
- Либо использовать JS
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы