Как выбрать "последний ребенок" с определенным именем класса в CSS?
<ul>
<li class="list">test1</li>
<li class="list">test2</li>
<li class="list">test3</li>
<li>test4</li>
</ul>
Как выбрать "последний ребенок" с именем класса:список?
<style>
ul li.list:last-child{background-color:#000;}
</style>
Я знаю, что приведенный выше пример не работает, но есть ли что-нибудь подобное этому, что работает?
важно:
a) я не могу использовать ul li:nth-child(3)
, потому что может случиться, что он тоже на четвертом или пятом месте.
b) нет JavaScript.
любая помощь будет оценили, спасибо!
9 ответов:
Я предлагаю вам воспользоваться тем, что вы можете назначить несколько классов одному элементу вот так:
<ul> <li class="list">test1</li> <li class="list">test2</li> <li class="list last">test3</li> <li>test4</li> </ul>
последний элемент имеет
list
класс, как и его братья и сестры, но также имеетlast
класс, который вы можете использовать, чтобы установить любое свойство CSS, которое вы хотите, например:ul li.list { color: #FF0000; } ul li.list.last { background-color: #000; }
Это можно сделать с помощью селектора атрибутов.
[class~='list']:last-of-type { background: #000; }
The
class~
выбирает определенное целое слово. Это позволяет элементу списка иметь несколько классов, если это необходимо, в различном порядке. Он все равно найдет точный класс "список" и применит стиль к последнему.смотрите рабочий пример здесь:http://codepen.io/chasebank/pen/ZYyeab
подробнее об атрибуте селекторы:
http://css-tricks.com/attribute-selectors/ http://www.w3schools.com/css/css_attribute_selectors.asp
вы можете использовать соседний селектор братьев и сестер для достижения чего-то подобного, что может помочь.
.list-item.other-class + .list-item:not(.other-class)
будет эффективно воздействует на следующий элемент после последнего элемента с классом
other-class
.Подробнее читайте здесь:https://css-tricks.com/almanac/selectors/a/adjacent-sibling/
это дерзкий ответ, но если вы ограничены только CSS и можете отменить свои элементы в DOM, возможно, стоит подумать. Он опирается на то, что пока нет селектора для последние элемент определенного класса, на самом деле можно стиль первый. Хитрость заключается в том, чтобы затем использовать flexbox для отображения элементов в обратном порядке.
ul { display: flex; flex-direction: column-reverse; } /* Apply desired style to all matching elements. */ ul > li.list { background-color: #888; } /* Using a more specific selector, "unstyle" elements which are not the first. */ ul > li.list ~ li.list { background-color: inherit; }
<ul> <li class="list">0</li> <li>1</li> <li class="list">2</li> </ul> <ul> <li>0</li> <li class="list">1</li> <li class="list">2</li> <li>3</li> </ul>
Я думаю, что самый правильный ответ: использовать
:nth-child
(или, в данном конкретном случае, его коллега:nth-last-child
). Большинство знает этот селектор только по его первому аргументу, чтобы захватить диапазон элементов на основе вычисления с n, но он также может принять второй аргумент "из [любого селектора CSS]".ваш сценарий может быть решена с помощью этого селектора:
li:nth-last-child(1 of .list)
но быть технически правильным не означает, что вы можете использовать его, Хотя, потому что этот селектор только сейчас реализовано в Safari.
для дальнейшего чтения:
вы не можете настроить таргетинг на последний экземпляр имени класса в вашем списке без JS.
однако, вы не можете быть полностью вне css-удачи, в зависимости от того, что вы хотите достичь. Например, с помощью селектора next sibling я добавил визуальный разделитель после последнего из ваших
.list
элементы здесь:http://jsbin.com/vejixisudo/edit?html, css, выход
есть решение (в конкретных ситуациях) к этой проблеме:
хотя это не дает прямого ответа на вопрос, есть высокий вероятность этот способ мышления достигает той же цели:
допустим, мы пошли, чтобы скрыть все элементы в списке, которые ниже индекса
3
<ul> <li>test1</li> <li>test2</li> <li class="hide">test3</li> <li>test4</li> <li>test5</li> </ul>
CSS
li{ display:none; } li.hide ~ li{ display:block; }
Демо
это избавит от необходимости добавлять
hide
класс для всех элементов, которые должны быть скрыты, поэтому мы остаемся только с одним классом,hide
, который управляет ими всеми. теперь, вам не нужно использоватьlast-of-type
который не может работать с именами классов. вы должны пересмотреть свой подход к классификации вещей
использовать этот селектор:
ul > li:last-of-type
. Это позволит выбрать каждый последний элемент списка (<li>
) в неупорядоченный список (<ul>
).разбивка ответа: я выбираю только ребенка (
>
) неупорядоченного списка (<ul>
) это последний ребенок своего типа (<li>
) от родительского элемента (<ul>
).вы можете использовать идентификатор или класс, чтобы ограничить селектор определенными неупорядоченными списками. Например:
ul.my-class > li:last-of-type
выберу последнее<li>
только из неупорядоченных списки этого класса