ID. Hmm. Właśnie pomieszałeś ;) Kontekstowość jest wtedy, gdy używasz coś a’la #jakiesID a.active, kiedy chcemy porzucić kontekstowość to mamy .s-10 .red .m-25. Używanie ID jest dobre (nie tylko w małych projekach) kiedy mamy bardzo dużo zagnieżdżonego kodu (np. div nav div right .main-nav ul li a.active) i zamiast robić bardzo długi łańcuszek skracamy to do np. #main-nav-right a.active. Tutaj jeszcze wyjaśnię – żeby nie było wątpliwości – ID należy używać TYLKO, gdy wie się, że dany element nigdy nie powtórzy się dwa lub więcej razy. To dobry sposób na zaznaczenie głównego menu, search boxa, itd. No i oczywiście tak długo, jak ktoś pisze kontekstowo – gdy ktoś leci na samych klasach, używanie ID jako selektorów CSS mija się z celem.
Racja, zwracam honor Autorowi, mój błąd ;)
]]>>ID jest be – tutaj znów zależy jak piszemy kod CSS, jeżeli piszemy kontekstowo to ID jest jak najbardziej pożądane!
id zabija specyficznością, dlatego BEM walcem po tym przejeżdża. Klasami też można uzyskać kontekstowość. Tak naprawdę id przydaje się tylko w małych projektach, gdzie mamy pewność, że poszczególne moduły się nie powtórzą.
Osobiście stosuję regułę: klasa – CSS, id – JS. Pozwala to w prosty sposób odróżnić funkcję elementu od jego wyglądu.
>Zauważ, że CSSOM musi w tym miejscu najpierw pobrać wszystkie tagi z klasą a, z tym wybrać wszystkie z klasą b, a później c. Następnie musi wybrać wszystkie ul z klasą link, które są bezpośrednim dzieckiem klasy c, na końcu musi pobrać wszystkie input i wybrać z nich te z atrybutem type równym text.
Jest właśnie dokładnie na odwrót ;) Selektory czytane są od prawej do lewej, zatem przeglądarka zaczyna od pola tekstowego a później leci po jego rodzicach.
>Tutaj moja rada jest prosta – szukaj własnych rozwiązań korzystając z doświadczeń innych.
Powiem tak: ostatecznie i tak każde rozwiązanie będzie dążyć do czegoś w rodzaju BEM, gdzie następuje maksymalne spłaszczenie hierarchii elementów do prostych zależności między klasami. Zabawy z dziedziczeniem i kaskadowością (czyli „naturalny OOCSS”, jakbym to nazwał) sprawdzają się dla prostych projektów. I tak, wiem, że od dawna uważałem BEM za zło, ale przy większych projektach jest to najsensowniejsze i najszybsze rozwiązanie.
>Uszczegółowiając to co pisałem powyżej radziłbym od samego początku planować arkusz stylów w sposób modułowy.
Ale to co pokazałeś nie ma nic wspólnego z modułami, ani tym bardziej z BEM. Jak już, to raczej: .Sidebar i .Sidebar–top-box. Teraz bardziej widać przynależność odpowiednich rzeczy do odpowiednich modułów
>Nie uważam żeby CSS Lint był odpowiedzią na wszystko, a co więcej często jego 'rady’ są trochę mało zyciowe, ale nie da się ukryć, że uczy on dobrych nawyków.
Standardy wewnątrzorganizacyjne > CSS Lint. Jak dla mnie nie ma sensu używać tego narzędzia ;) Jeśli chodzi o CSS, wystarczy wiedzieć czy składnia jest OK (a to i tak zrobi nam LESS/SASS/Stylus/Absurd.js/Whateva)
>Krótko i na temat – nie stosuj, chyba że jest to na serio do czegoś niezbędne.
Tu trza by dopowiedzieć: nie stosuj w arkuszach stylów. id jako hook dla JS jest z kolei genialne
>Trzeba jednak pamiętać o tym by przed 'deploy’em’ owy kod złączyć w jednym pliku i pewnie najlepiej skompresować
grunt.js -> przepuszczasz przez preprocesor, następnie dajesz to Autoprefixerowi i na koniec przywalasz kompresję choćby przez CSSO. Po całym procesie grunt.js jeszcze Ci spokojnie commita do repo zrobi i zuploaduje całość na produkcję a ty w tym czasie wypijesz kawkę ;)