Połącz: po z: hover

176

Chcę łączyć :afterz :hoverw CSS (lub innym pseudo selektorze). Zasadniczo mam listę, a element z selectedklasą ma zastosowany kształt strzałki za pomocą :after. Chcę, aby tak samo było w przypadku obiektów, nad którymi się znajdujesz, ale nie mogę sprawić, by działały. Oto kod

#alertlist
{
    list-style:none;
    width: 250px;
}
#alertlist li
{
    padding: 5px 10px;
    border-bottom: 1px solid #e9e9e9;
    position:relative;
}
#alertlist li.selected, #alertlist li:hover
{
    color: #f0f0f0;
    background-color: #303030;
}

#alertlist li.selected:after
{
    position:absolute;
    top: 0;
    right:-10px;
    bottom:0;

    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 10px solid #303030;
    content: "";
}

<ul id="alertlist">
    <li>Alert 123</li>
    <li class="selected">Alert 123</li>
    <li>Alert 123</li>
</ul>
Chris
źródło
Czy próbowałeś dodać regułę #alertlist li: hover: after?
Andrea

Odpowiedzi:

225

Po prostu dołącz :afterdo #alertlist li:hoverselektora w taki sam sposób, jak w przypadku #alertlist li.selectedselektora:

#alertlist li.selected:after, #alertlist li:hover:after
{
    position:absolute;
    top: 0;
    right:-10px;
    bottom:0;

    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 10px solid #303030;
    content: "";
}
BoltClock
źródło
29
@Chris, :after:hover w przeciwieństwie do tego, czego prawdopodobnie próbowałeś wcześniej, było :hover:after. Tak właśnie zrobiłem na początku, co frustrująco nie działa
WickyNilliams,
3
@WickyNilliams: To z założenia (pseudo-elementy kontra pseudoklasy) - zobacz stackoverflow.com/questions/5777210/ ...
BoltClock
3
Wydaje się, że to nie działa w przypadku dekoracji tekstu w Chrome (v43) ani w FF (v38).
geoidesic
@geoidesic: Dekoracje tekstu to zupełnie inny problem. Szczególnie nie grają dobrze z pozycjonowaniem absolutnym. Nie ma to nic wspólnego z pseudoelementami lub :hoverpseudoklasą.
BoltClock
@BoltClock Nie używam pozycjonowania bezwzględnego, ale chociaż mogę zmienić kolor mojego: po treści przy użyciu powyższej składni selektora, nie jestem w stanie zmienić dekoracji tekstu dla stanu najechania elementu: po w linku . W przeciwnym razie dekoracja tekstu działa dobrze.
geoidesic
22

w scss

&::after{
content: url(images/RelativeProjectsArr.png);
margin-left:30px;
}

&:hover{
    background-color:$turkiz;
    color:#e5e7ef;

    &::after{
    content: url(images/RelativeProjectsArrHover.png);
    }
}
Erez Lieberman
źródło
8
 #alertlist li:hover:after,#alertlist li.selected:after
{
    position:absolute;
    top: 0;
    right:-10px;
    bottom:0;

    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 10px solid #303030;
    content: "";
}​

jsFiddle Link

Kishore Kumar
źródło
li: hover: afte dodaj to w tej samej klasie, co wybrano
Kishore Kumar