Specyfikacja HTML dopuszcza kropki (.) W identyfikatorze:
<img id="some.id" />
Jednak użycie reguły selektora identyfikatora CSS nie będzie pasować poprawnie:
#some.id { color: #f00; }
Specyfikacja CSS dla selektorów ID nie wspomina o tym przypadku. Więc zakładam, że używa kombinacji nazwy tagu i selektora klasy ? Na przykład reguła CSS o wartości a.className
miałaby zastosowanie do wszystkich znaczników kotwicy ( <a>
) o nazwie klasy className
, na przykład <a class="className"></a>
.
Czy można mieć zewnętrzną regułę pliku CSS, która odwołuje się do elementu HTML za pomocą identyfikatora zawierającego kropkę?
Oczekuję, że nie, ponieważ CSS określa, że „ identyfikator ” CSS nie zawiera kropki jako prawidłowego znaku. Czy jest to więc podstawowa niezgodność między specyfikacjami HTML i CSS? Czy jedyną alternatywą jest użycie innego rodzaju wyboru CSS? Czy ktoś mądrzejszy ode mnie może to potwierdzić lub zaprzeczyć?
(Usunąłbym kropkę z atrybutu identyfikatora HTML, aby uprościć sprawę, ale jest to identyfikator wygenerowany przez system, więc nie mam możliwości zmiany go w tym przypadku).
źródło
#some.id
kombinacji identyfikatora i selektora klasy.Odpowiedzi:
Po dokładniejszym przejrzeniu specyfikacji stwierdziłem, że specyfikacja CSS zezwala na używanie znaku ukośnika odwrotnego (
\
), jak w większości języków.W moim przykładzie pasowałaby następująca reguła:
#some\.id { color: #f00; }
źródło
#some\\.id
Aby uniknąć znaku specjalnego. Pierwszy ukośnik odwrotny jest używany przez Stylus, pozostawiając pozostały ukośnik odwrotny w skompilowanym CSS, co daje pożądany wynik opisany w tej odpowiedzi.Możesz również użyć selektora atrybutu w następujący sposób:
[id='some.id'] { color: #f00; }
źródło
.
, jak\.
gdyby.Ponieważ używasz id, możesz także użyć document.getElementById (), która sprawdza wartość id jako zwykły ciąg znaków, a nie jako selektor CSS. np. działa również:
const myElem = document.getElementById("some.id");
Jedyną wadą jest to, że nie można ograniczyć zakresu wyszukiwania, tak jak w przypadku querySelector, np. SomeElement.querySelector (). ale ponieważ identyfikatory zawsze powinny być unikalne, wyszukiwanie w całym dokumencie z identyfikatorem jest poprawne.
źródło