-
1. Data: 2011-03-18 21:01:48
Temat: [css] Natrętne dziedziczenie stylu dla <a>
Od: "Latet" <s...@s...pl>
Witam,
DIV-a id="galeria", który znajduje się wewnątrz DIV-a id="left".
W stylach jest definicja:
#left a {...}
odnosząca się do wszystkich <a> w DIV-ie left. OK, działa super.
Ale linki wewnątrz DIV-a id="galeria" chciałem obstylować inaczej. Zrobiłem
więc:
#galeria a {...}
i to nie działa. Tzn. wg Firebuga te style są nadpisywane przez style
zdefiniowane w #left a {...}.
Musiałem dopiero zrobić tak:
#left #galeria a {...}
i to działa OK.
Nie rozumiem - czemu. Przecież #galeria a {...} definiuje jednoznacznie, o które
<a> chodzi.
Dziękuję,
latet
-
2. Data: 2011-03-18 21:28:34
Temat: Re: [css] Natrętne dziedziczenie stylu dla <a>
Od: Mirosław Zalewski <miniopl@CUT_THIS.gmail.com>
marzec roku pamiętnego 2011, prawdopodobnie 18. Wielka mądrość na
czytelników pl.comp.www spłynęła, gdy tako rzekł(a) Latet:
> Nie rozumiem - czemu. Przecież #galeria a {...} definiuje
> jednoznacznie, o które <a> chodzi.
Ponieważ #galeria jest w #left, #left a deklaruje tak samo
jednoznacznie jak #galeria a.
Zobacz:
http://www.w3.org/TR/CSS21/cascade.html#specificity
(+ 6.4.1 Cascading order na tej samej stronie, który podpowie kiedy
kolejność reguł w pliku CSS ma znaczenie)
http://www.smashingmagazine.com/2007/07/27/css-speci
ficity-things-you-should-know/
(pierwszy z Google, jak wpiszesz ,,css spcificity" to znajdzie Ci
kilkanaście artykułów na ten temat).
Zamiast #left #galeria a {...} mogłeś też zrobić
#galeria a {
coś: wartość !important;
}
ale ja jestem nauczony żeby !important unikać o ile nie masz naprawdę
dobrego powodu by z niego skorzystać (a zazwyczaj się nie ma).
--
Niżej podpisany, zamieszkały w http://minio.xt.pl ,
Mirosław Zalewski