im mniej nasadzimy w kodzie różnych klas i atrybutów, tym bardziej on jest czytelny
Ja uważam zupełnie odwrotnie.
Kod podany w pierwszym przykładzie jest zaprzeczeniem rozdziału treści od prezentacji. I nie chodzi o to, że OP coś źle napisał, tylko ja totalnie nie popieram takiego podejścia (które jednakże jest przez wiele osób promowane). Zauważ, że tutaj masz ostylowany DIV ale tylko będący dzieckiem jakiegoś innego elementu. Jeśli będziesz chciała zamienić HEADER na coś innego (chociażby dodasz do headera jeszcze jednego DIV'a, który bedzie w sobie zawierać treść aktualnie zamieszczoną w HEADER) to duża część formatowania się rozjedzie. Poza tym tutaj musisz określać dla każdego elementu osobno. Powiedzmy, że chcesz mieć jakiś BORDER ustalony dla elementów DIV. Dając to w przypadku pierwszego kodu, to ostylujesz jedynie DIV wewnątrz HEADER. Jakbyś chciała zrobić analogicznie z innymi DIV, to musisz to powtórzyć - stworzyć kolejne, analogiczne do header div {...
zapisy. A jak będziesz chciała to zmienić to jeszcze gorzej, bo potem masz zmianę w X miejscach, zamiast jednej klasy.
O wiele bardziej logiczne jest stworzenie klasy maRamkęFajną
a potem dodanie jej do tych DIV, które chcesz w ten sposób ostylować.
No i nie zgadzam się, że stylowanie bazujące na układzie HTML (czyli de facto na strukturze strony) jest bardziej czytelne. Zobacz - patrząc na pierwszy przykład NIC NIE WIESZ bez zajrzenia w CSS. W drugim od razu widać, że ten div ma być czerwony. Oczywiście - nie wiemy, czy chodzi o czerwony tekst, tło, ramkę - ale już coś wiemy. Przy założeniu, że nazwy klas są opisowe, a nie cl-17xy
, ale tutaj akurat mamy jasny sygnał, że z tym DIV ma się dziać coś czerwonego.
szaleje obecnie metodyka BEM
Tutaj się zgodzę, że to jest lekkie przegięcie.