Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie stylów w css
Forum PHP.pl > Forum > Po stronie przeglądarki
zaajcu
Czy da się jakoś zablokować dziedziczenie styli w css?
Chodzi mi o to że mam tabelkę w tabelce i chciałbym aby zagnieżdżona tabelka nie dziedziczyła czegokolwiek.
by_ikar
Musisz wówczas "nadpisać" te same style, które są w tabelce rodzicu.. Inaczej się chyba nie da wink.gif
prowseed
Pokaż jak wyglądają Twoje style (tylko nie wszystkie! - te potrzebne), da się to zrobić na miliony sposobów, masz chociażby w css taki znaczek jak '>' i wtedy style wygladaja tak: html>table {}
Niktoś
!important- zapobiega nadpisywaniu styli.
Sky_walker
zaajcu - najprościej będzie jak dasz tabeli nadrzędnej klasę a potem użyjesz konstrukcji typu:
table.klasa { }
dla głównej i
table.klasa table {}
dla styli tabeli podrzędnej.

(zauważ, że nie ma spacji między table i .klasa - taka konstrukcja oznacza "tabela z klasą" (czyli <table class="klasa"> ) a nie "klasa w tabeli" jak to ma miejsce jeśli dasz spację po elemencie table)

Pod żadnym pozorem nie używaj !important. Jeśli musisz odwołać się do !important to albo coś schrzaniłeś, albo musisz się poduczyć CSSa.
Niktoś
A można spytać skąd takie uprzedzenie?
Sky_walker
Important używa się tylko do wprowadzania korekt w cudzych stylach (typu: dostajesz stronę zrobioną przez kogoś i masz wprowadzić poprawki), a to i tak tylko wtedy gdy nie moższ edytować ani kodu źrółowego strony ani jej arkuszy stylów (najwyżej możesz dodać własny arkusz, lub z jakiś powodów (kompresja CSS) łatwiej jest dodać style zamiast modyfikować istniejące).

CSS pozwala na dotarcie do każdego elementu na wiele sposobów i nadpisanie istniejących styli bez problemu. !important wprowadza tylko chaos w kodzie i zasady których nijak później nie można się pozbyć.
zaajcu
Cytat(prowseed @ 22.03.2012, 13:22:57 ) *
Pokaż jak wyglądają Twoje style (tylko nie wszystkie! - te potrzebne), da się to zrobić na miliony sposobów, masz chociażby w css taki znaczek jak '>' i wtedy style wygladaja tak: html>table {}


Właśnie tak zrobiłem. Myślałem że może jest jakaś inna opcja.
No ale chyba tak to będzie musiało zostać
Niktoś
Ja na to troszeczkę inaczej patrze.Importan można używać dla ostylowania kluczowych dla strony elementów.
Wyobraź sytuacje masz na prawdę bogaty design(dużo użytych styli),dodajesz plugin i bach jeden z styli albo więcej zostało nadpisanych.I wtedy co robisz jedziesz po pliku css i szukasz która klasa ,który styl został nadpisany i dodajesz important,a mogłeś przecież to zrobić wcześniej i problem miałbyś z głowy.
Sky_walker
Niktoś - ja problemu nie widzę.
Firebug + odpowiedni arkusz stylów.

Nigdy nie miałem problemu z błędami w stylach po instalacji pluginu czy rozszerzenia do CMSa czy jakiejkolwiek strony. I co ciekawe: od jakiś... 4 lat ani razu nie użyłem atrybutu important. Kaskadowość arkuszy stylów jest o tyle ciekawą właściwością, że pozwala uniknąć problemów które Ty próbujesz rozwiązać atrybutem !important.
mccd
  1. body>table{
  2.  
  3. }

Wtedy tabelka, w tabelce nie odziedziczy stylów.
Za body podstaw nadrzędny element.
Sky_walker
uwaga: selektor dziecka > nie działa w IE6.
prowseed
Cytat(Sky_walker @ 22.03.2012, 14:27:47 ) *
Important używa się tylko do wprowadzania korekt w cudzych stylach (typu: dostajesz stronę zrobioną przez kogoś i masz wprowadzić poprawki), a to i tak tylko wtedy gdy nie moższ edytować ani kodu źrółowego strony ani jej arkuszy stylów (najwyżej możesz dodać własny arkusz, lub z jakiś powodów (kompresja CSS) łatwiej jest dodać style zamiast modyfikować istniejące).


Sky_walker ale bredzisz, na tym polega kaskada, ze rzucasz jeden ogolny szablon ostylowania, a pozniej do pojedynczych elementow trafiasz w taki, czy inny sposob, a to przez dokladne celowanie, albo przez najlatwiejsza rzecz w zyciu, czyli !important. Nie mozna mowic, ze ktos zepsul wtedy style. Important stosujesz rowniez, by zapobiec pozniejszym nadpisaniom (gdy na przyklad plug-in'y wymuszaja dodatkowy import styli). Poza tym nie widze, by w specyfikacji css bylo gdzies na czerwono napisane !important to zło!!!! Jesli generujesz zawartosc dynamicznie przez javascript ta dyrektywa tez sie okazuje bardzo pomocna.

@mccd
Dwa razy nie trzeba pisac tego samego...

//EDIT
uwaga, mamy 2012 rok, na szczescie swiat juz niemal zapomnial o IE6 wink.gif

//EDIT2
@zaajcu
jesli nad tabelka masz jakis unikalny element, ktory w tej tabelce sie juz nie powtarza, to mozesz jeszcze sprobowac
div+table {}
albo z pseudo klasą table:first-of-type {}
Sky_walker
Nie będę się mądrzył samemu, więc polecam: Don?t use ?!important? i kilkaset innych artykułów na temat tego dlaczego używanie important jest złe kiedy można zastosować normalne regółki CSSa i do czego tak naprawdę przydaje się ten atrybut. Jeśli masz problemy z nadpisywaniem stylów przez pluginy importujące własne arkusze to sugerowałbym popracować nad CSSem i stosowanymi konstrukcjami zamiast rzucać się od razu na !important bo tak jest łatwiej.

ps. W specyfikacji HTML też nie jest napisane, że używanie tabel gdzie popadnie jest złe, a jednak co bradziej świadomi ludzie wiedzą, że tabele stosuje się tylko w specyficznych sytuacjach. smile.gif
prowseed
Cytat(Sky_walker @ 23.03.2012, 10:34:22 ) *
Nie będę się mądrzył samemu, więc polecam: Don?t use ?!important? i kilkaset innych artykułów na temat tego dlaczego używanie important jest złe kiedy można zastosować normalne regółki CSSa i do czego tak naprawdę przydaje się ten atrybut. Jeśli masz problemy z nadpisywaniem stylów przez pluginy importujące własne arkusze to sugerowałbym popracować nad CSSem i stosowanymi konstrukcjami zamiast rzucać się od razu na !important bo tak jest łatwiej.

Przeczytałem ten artykuł (więcej nie szukałem, bo na prawdę- nie mam zamiaru zmieniać mojej pozycji) i generalnie głównym powodem by nie stosować !important, wg autora, to jest "bo tak". Jesli element dziedziczy style po wielu klasach, to w wielu przypadkach bez !important musiałbym się nieźle nagimnastykować. I po co? Przy malutkich projektach, owszem, moze okazac sie zbedny, ale przy duzych raczej bym jego roli nei dyskryminowal. Takie jest po prostu moje zdanie w tej materii. Dla mnie !important to zapewnienie (albo zmniejszenie zagrozenia), ze nic w pozniejszej fazie projektu nie wplynie na kluczowe elementy wygladu.
Pierwsza z brzegu strona, na prawde, przypadkowo ja wybralem: http://www.skype.com/intl/pl/home - 63 !important'y w glownym stylu. Ale sobie skype dobral webmasterow... Na CSS sie nie znaja.

Cytat
ps. W specyfikacji HTML też nie jest napisane, że używanie tabel gdzie popadnie jest złe, a jednak co bradziej świadomi ludzie wiedzą, że tabele stosuje się tylko w specyficznych sytuacjach. smile.gif

tak samo jak w instrukcji obslugi mojego golfa nie jest napisane, ze nie mozna nim latac... Troche glupie porownanie. Tabele stosuje się do... tabel, i wciskanie ich gdzie indziej bardziej pracę utrudnia, niż ułatwia, z !important'em z kolei pracuje mi się łatwiej, więc raczej nietrafiony argument ; ) Miales pewnie na mysli to, ze programy do ciecia grafiki buduja automatycznie design na tabelach- po prostu nie potrafia nasladowac recznie pisanego kodu, jest to zbyt kompleksowe. Nie oznacza to jednak, ze tabele są jakieś ułomne.

Podsumowując: nie mam zamiru zaniżać wartości !important, bo w wielu przypadkach oszczędził mi włosów na głowie. Jeśli nigdy nie musiałeś z niego korzystać i masz wystarczająco dużo czasu, by pieścić CSS'y - super ; )

//EDIT
aha, nie zapominaj o edytorach typu WYSIWYG ktore to klienci chetnie widza w panelu administracyjnym, a ktore swoja specyfika potrafia niezle namieszac. Tutaj szczegolnie !important mi sie przydawal. Po prostu nie i koniec. I jeszcze to wsparcie dla wklejania z Word'a... sic!
Dodatkowo przy wordpress'ie, gdy mamy custom theme's- unikalne wyglady dla poszczegolnych postow- !important rowniez okazuje sie wspanialym rozwiazaniem. Niby mamy tą samą architekturę html, niby te same style, a dzięki kilku !importantom możemy zbudować całkiem ciekawy user experience. No chyba, ze do kazdego postu chcesz generowac unkalne style, co jest oczywiscie rowniez nieoptymalne.

//EDIT2
Wiesz, wg. mnie to po prostu są to takie trendy (amerykanskie), by cos robic tak, a nie inaczej ; ) Nie wiem, moze jestem oldschoolowy... ; )
by_ikar
Cytat(Sky_walker @ 23.03.2012, 10:34:22 ) *
Nie będę się mądrzył samemu, więc polecam: Don?t use ?!important? i kilkaset innych artykułów na temat tego dlaczego używanie important jest złe kiedy można zastosować normalne regółki CSSa i do czego tak naprawdę przydaje się ten atrybut. Jeśli masz problemy z nadpisywaniem stylów przez pluginy importujące własne arkusze to sugerowałbym popracować nad CSSem i stosowanymi konstrukcjami zamiast rzucać się od razu na !important bo tak jest łatwiej.

ps. W specyfikacji HTML też nie jest napisane, że używanie tabel gdzie popadnie jest złe, a jednak co bradziej świadomi ludzie wiedzą, że tabele stosuje się tylko w specyficznych sytuacjach. smile.gif


Używanie magicznych metod w php, evala, extract i kilku innych rzeczy jest również złe. Ale są miejsca w których się nie da ich zastąpić i koniec. A lepiej żeby istniała taka opcja, niż miałoby jej nie być.

Cytat
Jesli generujesz zawartosc dynamicznie przez javascript ta dyrektywa tez sie okazuje bardzo pomocna.

O tak, bywały takie sytuacje i jedynie important ratował tyłek wink.gif
prowseed
Dodam, ze przerazajaca jest obecnie moda na "-webkit-" w css'ie i chorą implementację wszystkiego, co zostaje wyplute przez... no właśnie... te amerykańskie trendy.
I jeszcze nazywają to mianem CSS3... Przy tym !important to pikuś ; )
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.