Nie ma takiej pseudoklasy. Nie ma takiej potrzeby, kiedy możesz po prostu użyć :not(:hover)
. Celem :not()
pseudoklasy jest umożliwienie autorom pisania negacji bez konieczności określania oddzielnych negacji każdej istniejącej (i przyszłej) dynamicznej pseudoklasy, w której element może tylko pasować lub nie pasować do pseudoklasy.
Na przykład tylko niektóre elementy mogą być :enabled
albo :disabled
- większość elementów nie jest żadną, ponieważ semantyka po prostu nie ma zastosowania - ale element może być wyznaczony tylko przez urządzenie wskazujące ( :hover
) lub nie ( :not(:hover)
). Zapewnienie negacji, które można już osiągnąć bezpośrednio za pomocą :not()
, znacznie podważyłoby jego użyteczność (chociaż nadal można by go użyć do zanegowania dowolnego innego prostego selektora - lub całych złożonych selektorów w przyszłości ).
Argument, że taka pseudoklasa byłaby mniej kosztowna obliczeniowo, jest dość słaby. Najbardziej naiwnym wdrożeniem takiej pseudoklasy byłoby dosłowne :not(:hover)
sprawdzenie, co nie byłoby lepsze. Wszelkie bardziej złożone lub zoptymalizowane implementacje i prosisz dostawców o zaimplementowanie pseudoklasy, która jest albo tak szybka, albo nawet szybsza niż :not(:hover)
coś, co jest już wystarczająco rzadkie w przypadku użycia, biorąc pod uwagę inne dostępne opcje, takie jak kaskadowanie i :not(:hover)
(np. gdy kaskadowanie nie wchodzi w grę), do których łatwo masz dostęp. Po prostu nie uzasadnia czasu i wysiłku, aby specyfikować, wdrażać i testować alternatywę dla co najmniej jednej innej istniejącej metody, która jest w 100% funkcjonalnie równoważna (i ma zastosowanie do co najmniej80% scenariuszy). Jest też kwestia nazwania takiej pseudoklasy - nie zaproponowałeś jej nazwy i nie mogę wymyślić dobrej. :not-hover
jest krótszy tylko o dwa bajty i tylko nieznacznie mniej pracy przy wpisywaniu. Jeśli już, jest to potencjalnie bardziej zagmatwane niż :not(:hover)
.
Jeśli martwisz się o specyficzność, zwróć uwagę, że sama :not()
pseudoklasa nie jest liczona jako swoistość; tylko jego najbardziej konkretnym argumentem jest . :not(:hover)
i :hover
są równie konkretne. Tak więc specyficzność też nie jest problemem.
Jeśli martwisz się o obsługę przeglądarek, taka pseudoklasa, jeśli została wprowadzona, prawdopodobnie została wprowadzona razem :not()
z selektorami lub na późniejszym poziomie, ponieważ nie pojawiła się w CSS2 (gdzie :hover
po raz pierwszy została wprowadzona ponad 17 lat temu, a po raz pierwszy wdrożony w IE4 jeszcze rok wcześniej). Wprowadzenie go na późniejszym poziomie byłoby bezcelowe, ponieważ autorzy byliby po prostu zmuszeni do kontynuowania korzystania, :not(:hover)
dopóki przeglądarki i tak nie zaczną implementować tej nowej pseudoklasy i nie mieliby powodu do zmiany.
Zauważ, że to nie to samo, co poniższe pytanie, które mówi o zdarzeniach i stanach (pierwotnie dotyczy :focus
raczej niż :hover
, ale obowiązuje ta sama zasada): Czy CSS ma selektor: blur (pseudoklasa)?
element:not(:hover)
użyjelement
.