2012-09-07 10 views
61

Spec HTML pozwala na okresy w ID (.):selektor CSS z okresem ID

<img id="some.id" />

Jednak stosując regułę wyboru ID CSS nie mecz poprawnie:

#some.id { color: #f00; }

Specyfikacja CSS dla ID Selectors nie wspomina o tej sprawie. Zakładam więc, że używa kombinacji nazwy znacznika i class selector? Na przykład reguła CSS a.className miałyby zastosowanie wszystkich znaczników kotwy (<a>) do z nazwą klasy className, jak <a class="className"></a>.

Czy to możliwe, aby mieć zewnętrznego pliku regułę CSS, który odwołuje elementu HTML przez jego identyfikator, który ma okres w nim?

I nie oczekiwać od spec CSS określa, że ​​CSS „identifier” nie obejmuje okresu jako ważnego znaku. Czy jest to podstawowa niezgodność specyfikacji HTML i CSS? Czy moja jedyna możliwość wyboru innego typu selekcji CSS? Czy ktoś może być mądrzejszy, niż ja to potwierdzam lub zaprzeczam?

(Chciałbym usunąć okres od atrybutu HTML id uprościć rzeczy, ale jest to id wygenerowany przez system, więc nie ma możliwości, aby zmienić go w tym przypadku).

+0

You może powiedzieć, że jest to podstawowa niezgodność między HTML a CSS. Jednakże, ponieważ są to dwa różne języki, nie oczekuje się, że będą się zgadzać; identyfikator HTML to identyfikator HTML, a identyfikator CSS to identyfikator CSS. Ponadto CSS może również stylizować inne języki, nie tylko HTML (chociaż przyznano, CSS został stworzony dla HTMLa na początku). – BoltClock

+3

Również '# some.id' używa kombinacji ID i selektora klasy. – BoltClock

+0

Czy identyfikator jest jedynym atrybutem, który posiadasz jako haczyk stylu? Wiem, że to trochę nie na temat, ale zastanawiam się, dlaczego chcesz użyć ID zamiast img lub klasy (jeśli jest dostępna). – Jayx

Odpowiedz

130

klasycznym. Zaraz po przejrzeniu wszystkich specyfikacji piszących pytanie, przeczytałem go jeszcze raz i odkryłem, że istnieje znak ucieczki. Nigdy wcześniej tego nie potrzebowałem, ale specyfikacja CSS zezwala na backslash (\) escaping jak większość języków. Co wiesz?

Więc w moim przykładzie, poniższa reguła będzie pasować:

#some\.id { color: #f00; }

+7

Dobra robota badawcza. Powinno być więcej pytań i odpowiedzi, takich jak "napisz mój kod zamiast mnie". – Pavlo

+2

ładne badania. Właśnie natknąłem się na to w dużej aplikacji dla przedsiębiorstw, nad którą pracuję. Byłem totalnie zaskoczony i nigdy wcześniej tego nie widziałem. jaki jest sens tworzenia identyfikatora z okresem w nim? – Anthony

+0

@Anthony: Nie ma konkretnego powodu, aby umieszczać kropkę w atrybucie identyfikatora HTML. Wydaje mi się, że czasami autorzy po prostu chcą? Może w niektórych przypadkach może dojść do wykrwawiania się z podstawowych systemów implementacji, które mogą wykorzystywać okresy w identyfikatorach kodu po stronie serwera do przetwarzania formularzy?Jestem pewien, że wszyscy, którzy to robią, mają swoje własne powody; ale nie ma powodu HTML/CSS, aby je uwzględnić. –

15

Można również użyć [img id = some.id]]

Więcej informacji tutaj: http://www.w3.org/TR/selectors/#attribute-selectors

+0

Może to działać w niektórych przeglądarkach, ale widziałem również błędy generowane przez selektory atrybutu. Nadal można uciec przed '.', jako' \. ". –