Ocena strony przedszkola - poprawnosć html i css

0

Zrobiłem dzisiaj chyba najbardziej kolorową stronę w swoim życiu i zastanawiam się, czy html i css się do czegokolwiek nadają. Jakby ktoś chciał rzucić okiem, i ocenić co jest źle, to będę dźwięczny: http://somekind.pl/pms/

W zasadzie jest jedna rzecz, której nie potrafię zrobić - jak sprawić, żeby stopka (trawa i góry) były na dole strony, gdy tekstu jest mało, ale jednocześnie obniżały się, wraz z przybywaniem tekstu? Chciałbym, żeby pole tekstowe kończyło się tam, gdzie są obecnie te 4 pszczółki z lewej.

2

O jasna dupa o.O

Menu nie ma żadnej alternatywy tekstowej (alt/title/tekst z ujemnym text-indent).

Strona nie mieści się na rozdzielczości 1280x800 - wtf? - poziomy pasek przesuwania. Ogólnie najlepiej jak content ma 996px szerokości (996 dzieli się przez 2, 3 i 4, więc można łatwo równe kolumny zrobić, no i przede wszystkim strona mieści się na 1024x*.

NIE UŻYWAJ position: absolute, ani position: relative!!!! Nie umiesz - to masz ZAKAZ. Bo to nie służy do tego, do czego ty myślisz: http://i.imgur.com/z8cNU.jpg - efekt.

Tło masz widzę w dwóch częściach, zrób po prostu coś w stylu:

<div id="tlo1"><div id="tlo2"><content>dopiero tutaj jakikolwiek content - menu, cala zawartosc strony</content></div></div>

tlo1 niech ma tło np. background: url('sciezka/tlo-dolne.png') center bottom repeat-x;, tlo2 niech ma tło np. background: url('sciezka/tlo-gorne.png') center top repeat-x;, <content> to oczywiście nieistniejący element jakbyś dumał.
Oh, teoretycznie można użyć dwóch teł w jednym elemencie, ale upośledzone przeglądarki (IE8, wciąż duży udział) nie ogarną.

<div id="top"></div> - puste divy - sugerują nooba, który szablon składa na absolutach ;) Myślę, że jak poprawisz absoluty to nie będziesz ich potrzebował.

Logo też nie ma zawartości alternatywnej, lepsze by było coś takiego:
<h1 id="logo"><a href="/">Bee Smart</a> - uczymy z głową</h1>
#logo { background: url:('sciezka/logo.png'); width: 666px; height: 69px; text-indent: -9999px; overflow: hidden } /* tu oczywiście poprawne wymiary obrazka */
Teraz zauważyłem, że menu wchodzi Ci na "prostokąt", w którym jest logo. To wymagałoby użycia absolutów, ale żeby nie niszczyć Twojej dziewiczej głowy absolutami to może w przykładzie powyżej <h1> wymień na <div> albo ogólnie <header>, który masz zastosowany, tam upchniesz i <a> i <nav> do menu.

Dziwnie mi wygląda DOCTYPE dużymi literami (tj. samo słówko "html", choć ja doctype też piszę małymi) - ale to tylko moje skrzywienie.

Do elementu <html> dopisz atrybut lang="pl".

Tyle ;)

0

Widzę, że starasz się trzymać standardów HTML5 - header,article. Ale skoro już tak to nie rób <div id=footer"> a skorzystaj również ze stworzonego do tego znacznika <footer> i dodaj mu w CSS jakieś wodotryski.
Co do czcionki... no to Arial albo Tahoma ;)

3

Skupię się na defektach, praktycznie pomijając to, co jest dobrze (dobrze, że HTML5, że nie ma błędów innych niż alty, brak tabel, że kod prosty póki co etc. etc.).

[edit]
Disclaimer: może się wydawać, że pojadę trochę ostro i może faktycznie tak będzie. W sensie: będę się czepiał również drobniejszych rzeczy. Uznałem jednak, że dokładniejsza recenzja kodu frontendowego może Ci się tylko przydać, bo Cię przecież nie zabije ;). Ja na co dzień pracuję jako frontendowiec. Recenzje kodu robię naprawdę często. Pracuję jednak w bardzo mocnym zespole samych frontendowców -- kolesi, którzy SKUPIAJĄ SIĘ na HTML-u, CSS i JavaScripcie. Staramy się uzyskać zawsze najwyższą jakość i przyczepiamy się do rzeczy, które inni by olali.

Możesz wziąć to pod uwagę. To tak żebyś nie myślał, że kod jest gorszy niż jest. Szczególnie, że wiem @somekind, że piszesz też (głównie) kod backendowy. Na pewno widywałem dużo gorsze kody HTML/CSS pisane przez backendowców ;) (to tez jest naturalne: wyobraź sobie, że koder CSS zabiera się nagle za C#...).
[/edit]

  • Nie waliduje się ( http://validator.w3.org/ ). Myślisz, że walidacja to bzdura? Te 4 błędy, która wywala walidator, związane są z kolejnym punktem, bardzo poważnym i realnym błędem funkcjonalnym dla części użytkowników.
  • Brak odpowiedników tekstowych dla głównej nawigacji, logo i motto. Potężny problem dostępnościowy. Google tego nie zindeksuje.
  • Na stronach innych niż główna, logo powinno być linkiem do strony głównej (znana, wygodna konwencja).
  • Brak

  • Prezentacyjna nazwa id:
  • Elementy czysto prezentacyjne, co najmniej wielu z nich dałoby się uniknąć dzięki lepszym stylom:
  <div id="righttop"></div> 
  <div id="top"></div>

  <div id="bottom"></div>

  <div id="footer">
    <div id="leftfoot"></div>
    <div id="rightfoot"></div>
  </div>
  • Cała strona jest w
    ie, który nie ma żadnych stylów. Po co ten element?
  • Zbędne, zaciemniające tylko typy elementów (nazwy tagów) w selektorach:
  div#lefttop
  div#righttop

Samo ID by stykło, po co ten div?

  • Duża specyficzność w regułach z dwoma ID -- a to niepotrzebne, chyba że kontekstowo:
  div#main div#top
  div#main div#center
  • W ogóle w większych projektach spamowanie ID-kami się nie opyla ze względu na wysoką specyficzność selektora i niską reużywalność elementów z ID. To jest malutki projekt, więc to jeszcze nie boli.
  • A ten selektor znowu w większym projekcie (a i ten się rozrośnie!) byłby zbyt ogólny:
nav ul li

Witryna może mieć wiele elementów <nav>. Dałbym tu jakąś klasę lub ID, np. main-nav.

  • Czemu nie użyto własności zbiórczej background?
  background-image: url(./img/clouds.png);
  background-position-y: top;
  background-repeat: repeat-x;
  • Elementy #top, #bottom i znajdujące się na nich obrazki są zbędne. Zamiast tego, wystarczyło użyć border-radius z CSS3. Stare IE można olać albo można skorzystać z CSS3 PIE.
  • (+) Dobrze, że skorzystano z <body> żeby zakotwiczyć jedno tło...
  • ...ale nie skorzystano już z <html>.
  • Stopkę i/lub nagłówek trzeba było oprzeć na elementach otaczających (wrapperach), w tym na <body>/<html>, a nie pozycjonowanych bezwzględnie elementach prezentacyjnych. Dół strony potrzebuje tylko 2 elementów, bo są 2 tła. Tutaj są 3 elementy.
  • Strona się nie mieści w poziomie w mniejszych rozdzielczościach. Niepotrzebnie. To przez te elementy prezentacyjne. Gdyby zamiast nich użyć luźnych wrapperów, bez zdefiniowanej szerokości, nie byłoby takich problemów.
  • Czyszczenie (clear) nie działa gdy używamy pozycjonowania absolutnego, jest tu więc zbędne:
  clear: both;
  position: absolute;

@MVC:
U niego ta "stopka" jest pusta. Semantycznie, nie istnieje. Znacznik <footer> nic tu nie da, a nawet będzie sugerował, że coś tam jednak powinno być. To nie jest tak naprawdę stopka, tylko obrazek na dole, bez żadnej treści.

edit:
Ogólne porady, frontendowa droga rozwoju:
-Semantyka. Polecam zapoznać się z tym terminem i zacząć go "czuć". HTML to semantyka. Podkreśla strukturę dokumentu. Nie jego prezentację, czyli wygląd.
-Pozycjonowanie w CSS. Tak jak napisał @dzek69, standardowym problemem ludzi zaczynających przygodę z CSS jest nadużywanie pozycjonowania bezwzględnego. Ono nie jest tak dobre jak się z początku wydaje. Zachęca do spamowania pustymi elementami prezentacyjnymi (czasem trzeba je dodać, ale coraz rzadziej), no i przede wszystkim jest bardzo nieelastyczne. Polecam częściej korzystać z elementów otaczających, tj. otoczyć jakiś element kolejnym, tzw. wrapperem, i w nim dać dodatkowe tło. To jest zwykle lepsze niż pusty element. Ale tak naprawdę, dodatkowe wrappery i puste elementy to już prezentacja w HTML-u, więc starajmy się to minimalizować.

0

Aksjomaty:

  1. Stronę robię dla koleżanki.
  2. To ona wymyśliła taką chorą rozdzielczość. Ale pewno jak sama zobaczy, że się jej na laptopie nie mieści, to każe zmniejszyć. :)
  3. Nie przejmujcie się, nie będę prawdziwym frontendowcem, robię tę stronkę, bo zostałem ubłagany. ;)
  4. Zdarzało mi się już w życiu np. centrować img w divie na potrzeby IE6, na publicznej stronie, która ma tysiące wejść dziennie, więc mam zasługi na polu CSS! ;P

@dzek69, positon: absolute robi dokładnie to, co wynika ze specyfikacji CSS oraz wymagań odnośnie tej strony, czyli trzyma łąkę na dole strony. Sam do końca tego nie wymyśliłem, takie rozwiązanie znalazłem w necie. Wiem, że nie działa do końca dobrze, przy małej rozdzielczości pionowej layout się rozjeżdża. Gdybym nie musiał przypinać stopki, to absolute bym nie użył, ja go używam tylko wtedy, gdy używam jakichś hacków z netu.
Dlatego też w poprzednim poście zadałem pytanie - jak sprawić, żeby stopka (trawa i góry) były na dole strony, gdy tekstu jest mało, ale jednocześnie obniżały się, wraz z przybywaniem tekstu? Mam pewien pomysł, może się uda, ale jak ktoś wie lepiej, to niech podpowie. ;)
Dzięki za pomysł z zagnieżdżeniem divów, to powinno zlikwidować te puste.

@bswierczynski, było już późno i o walidatorze nawet nie myślałem. Ogólnie to jest jeszcze wstępny brudnopis.
Strony "inne niż główna" będą, jak dostanę treść, na razie nie będę się na tym skupiał.

Na pewno widywałem dużo gorsze kody HTML/CSS pisane przez backendowców ;) (to tez jest naturalne: wyobraź sobie, że koder CSS zabiera się nagle za C#...).

Bo ja przynajmniej jedną książkę o CSS przeczytałem. ;) Tylko doświadczenia mi jak widać brak, np. po prezentacyjnych nazwach id czy selektorach.

Czemu nie użyto własności zbiórczej background?

Własności zbiorczych nie używam na początku, bo łatwiej mi robić styl na tych rozdzielonych. Optymalizację zrobię, gdy wszystko mi już będzie działać.

Brak

</p>

O co chodzi z h1? Musi być na każdej stronie?

...ale nie skorzystano już z <html>.

No nie... Ale do czego miałem go użyć, bo trochę nie rozumiem?

Strona się nie mieści w poziomie w mniejszych rozdzielczościach. Niepotrzebnie. To przez te elementy prezentacyjne.

Raczej przez szerokości graficznych elementów tła, ale to się zapewne zmieni, jak już wspominałem.

Dzięki Wam obu za cenne uwagi, biorę się za poprawki.

0
somekind napisał(a)

To ona wymyśliła taką chorą rozdzielczość. Ale pewno jak sama zobaczy, że się jej na laptopie nie mieści, to każe zmniejszyć.

Nie o to chodzi :). To tło może sobie takie być -- może mieć i 1500 pikseli. Ale należy tak je poustawiać, żeby nie liczyło się do szerokości strony i żeby samo tło nie powodowało pojawienia się pasków przewijania. Czyli: w 1024x768 widoczna byłaby główna zawartość strony, a tło po bokach byłoby poza ekranem.

somekind napisał(a)

O co chodzi z h1? Musi być na każdej stronie?

Tak, powinno być. To jest też Google-friendly. W najgorszym przypadku, na stronie głównej, <h1> powinno zawierać logo. Tagline (motto) może być w <h2> i wtedy można spiąć oba te nagłówki za pomocą <hgroup>.

Na poszczególnych podstronach, najważniejszym nagłówkiem jest tytuł podstrony. Pewnie na podstronie Kontakt, w głównej treści miałbyś nagłówek 'Kontakt'. Niech to będzie <h1>.

somekind napisał(a)

No nie... Ale do czego miałem go użyć, bo trochę nie rozumiem?

Żeby umieścić tam jakieś tło. Mogłeś je walnąć w pustym divie, ale mogłeś też na elemencie, który i tak masz -- <html>. Ściślej mówiąc, prawdopodobnie musiałbyś tło, które aktualnie masz na <body>, przenieśc na <html>, a na <body> dać jakieś inne tło -- jedno z tych, które masz na divach.

0

Wprowadziłem większość zmian, o których wspominaliście: http://somekind.pl/pms/

Wzorując się na przykładzie @dzek69, zrobiłem tak, że tłem body jest łąka na dole, tłem diva main są chmurki. Łąka trzyma się dołu, chmurki góry, wszystko jest ok. Ale gdy ustawię gradient jako tło html, to stopka znika.
Jest gdzieś przykład jak zrobić taką stronę, jak ta?

Ponadto, obrazek pagórka na w lewym, dolnym rogu ustawiłem jako fixed, pewno stwierdzicie, że to źle, ale znowu nie znalazłem innego rozwiązania w necie. :/ To powoduje, że przy zmniejszaniu okna przeglądarki w pionie, obrazek najeżdża na logo. Dałoby się ustawić jakoś minimalną wysokość strony, przy której pojawią się scrollbary? Bo teraz wszędzie min-height mam na 100%, żeby chmurki i łąka trzymały się swoich miejsc.

Z góry dzięki.

0

ja nie wiem co to za szkoła z ustawianiem loga jako tła pustego elementu h1 w którym znajduje się ukryty link przesunięty poza ekran :| jak dla mnie to gorzej niż paskudne

nie lepiej po ludzku wstawić i ustawić mu atrybut "alt"? :|

poza tym wiem że na przykład próby pozycjonowania strony przez dostawianie słów kluczowych do ukrytych elementów lub pisanych białą czcionką na białym tle są źle odbierane przez google; podejrzewam że przewidzieli też tekst ukryty przez wyjechanie nim poza stronę ujemnym wcięciem...

0

miało być:

nie lepiej po ludzku wstawić <img> i ustawić mu atrybut "alt"

0

@ Pan niezalogowany
Używanie obrazków tła, zamiast <a> i <img /> w środku jest powszechne. Nie dość, że możemy przez to skorzystać z css sprites i przyśpieszyć ładowanie strony (Google od paru miesięcy zwraca uwagę na czas ładowania strony w ustalaniu pozycji i zapewniam Cię, że moja rozbudowana strona ładująca w sumie jakieś 7 plików (layoutu, z treścią może być więcej) będzie lepsza niż Twoja ładująca 40), to jeszcze klikając prawym na elementy layoutu nie wyświetla się "zapisz obrazek". Sprawdź sobie np. logo na 4programmers. Tutaj jest akurat pusty element <a> z title - co jest moim zdaniem gorszym zachowaniem niż element zawierający tekst, z ujemnym text-indent - co jest dosyć popularnym rozwiązaniem. Robią także np. <a href=""><span>dupa</span></a> i potem w css display: none; dla tego spana, ale tego nie polecam - jest "bardziej podejrzane". Strony korzystające z tych technik (jedną jaką teraz kojarzę jest wykop.pl) wcale nie mają się źle, nie są usuwane z Google, ba, przecież sam to stosuję od jakiegoś czasu i moje strony wiszą bardzo wysoko.

@somekind: nie słuchaj zioma ;) Teraz na tyle jest namieszane na stronie, że ciężko mi określić, co powinieneś zrobić. Najlepiej dla jasności podaj linki do wszystkich obrazków tła i powiedz jak chcesz, żeby się zachowały.

0
dzek69 napisał(a):

@somekind: nie słuchaj zioma ;) Teraz na tyle jest namieszane na stronie, że ciężko mi określić, co powinieneś zrobić. Najlepiej dla jasności podaj linki do wszystkich obrazków tła i powiedz jak chcesz, żeby się zachowały.

Ok.
To jest tło: http://somekind.pl/pms/content/img/bggrad.jpg - ma być tłem całej strony i powielać się w poziomie.
To są chmurki: http://somekind.pl/pms/content/img/clouds.png - mają być u góry, i też powielać się w poziomie.
To jest łąka: http://somekind.pl/pms/content/img/footer.png - ma być na dole, i też powielać się w poziomie.
To jest logo: http://somekind.pl/pms/content/img/logo.png - ma być nie co odsunięte od lewego górnego rogu.
To jest motto: http://somekind.pl/pms/content/img/motto.png - ma być nieco na prawo od loga i mniej więcej w połowie wysokości chmurek.
To jest pagórek: http://somekind.pl/pms/content/img/footer_left.png - to lewa część łąki-stopki, ma się trzymać przy lewym, dolnym rogu.
No i są jeszcze trzy przyciski: http://somekind.pl/pms/content/img/menu_oferta.png http://somekind.pl/pms/content/img/menu_onas.png http://somekind.pl/pms/content/img/menu_kontakt.png one mają stanowić menu na lewo od logo, a pod mottem.

3

Panie @somekind -zie, masz Pan. Trochę może się wydawać zamotka z floatem przy <h1>, ale w ten sposób mogłem zastować <hgroup> bez problemu. Nie wyrównywałem co do pixela (sam sobie ułóż jak Ci pasuje), choć w sumie ciężko byłoby wyrównać stronę, która na każdej rozdzielczości wygląda inaczej ;)
Oto link:
http://dzek.mooo.com/pms.rar
(struktura folderów nie zachowana, zrobiłem po swojemu)

1

@dzek69, dzięki wielkie, kod html i css jest teraz dużo zgrabniejszy. Niestety, strona ma działać pod wszystkimi przeglądarkami, nie tylko tą jedną słuszną, której prawie nikt nie używa. :/
Zmiana min-height: 100% dla body i html na height: 100% nie bardzo pomaga, bo oczywiście na małych rozdzielczościach dolne tło idzie do góry. :/ Zastanawiam się, czy w ogóle możliwe jest osiągnięcie łąki na dole strony dla dowolnej rozdzielczości, a jednocześnie z uwzględnieniem jakiejś minimalnej wysokości treści na stronie.

0

czyli ma działać także dla IE6?
To dla IE6 zrób protezy w Javascripcie, będzie prościej niż kombinować z CSSem. (moge Ci tez z tym pomoc)
Nie kombinuj z dziwnymi pustymi divami, absolutami, itd, tylko dlatego, że ktoś kiedyś może zmuchnąć kurz z komputera w piwnicy, uruchomić go (w okolicznych miastach przygasną światła), a następnie wejść na stronę przedszkola. Tylko dlatego, że to nie jest "normalna" strona, tylko taka, na którą mogą wchodzić nieświadome życia osoby nie użyłem np. wielu teł dla html/body, żeby nie generować kolejnych kontenerów.

1

Nie, ma działać w Firefoxie i Chromie, nie tylko pod Operą.
user image
Nie da się zrobić tak, żeby łąka była na dole, a nie po środku?

1

Tego nie zauważyłem u siebie na FF, nie miałem tyle w pionie miejsca.
Hm, poczytałem trochę i widzę, że to nie przejdzie min-height w takiej formie. Zachowanie Opery faktycznie jest błędne [choć moim zdaniem bardziej naturalne].
Rozwiązania na absolutach nie będą zbyt dobre, też będzie się to sypać na podobnej zasadzie jak próby wpisania height: 100%; w body lub html.
Mój ciemny umysł o tej godzinie nie jest w stanie wymyślić nic lepszego niż javascript, który będzie nadawał pixelową wartość min-height dla html, natomiast body i te dwa kontenery z tłem będą mieć min-height: inherit;. Przy zmianie rozmiaru okna skrypt powinien przeliczyć to min-height.
Jak wymyślę coś lepszego to dam znać.

0

Moim zdaniem Opera akurat zachowuje się intuicyjnie, bo min-height: 100% interpretuję jako minimalna wysokość = 100% okna przeglądarki. :)
JavaScriptu też bym wolał uniknąć, bo to trochę przerost formy nad treścią w takiej sytuacji. :/
Dzięki w każdym razie za chęci i dotychczasową pomoc.

DOPISANE:
Znalazłem to: http://www.cssstickyfooter.com/using-sticky-footer-code.html i zaadaptowałem do swoich potrzeb: http://somekind.pl/pms
Niestety mam trzy lamerskie puste divy, ale coś za coś.

@dzek69, jeszcze dwa pytanka:

  1. Nie trzeba dawać </li>?
  2. To:
<script type="text/javascript" src="./js/scripts.js"></script>
<!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

Jest po coś?

0

w ogóle niepotrzebnie sobie komplikujesz życie
po prostu dolne tło połącz w jedno, dorób lewą stronę tej górki i wklej ją po prawej, zapętl

strona o banalnym wyglądzie - do zrobienia w pół godziny
ale takie problemy się pojawiają właśnie jak osoba która tworzy i tnie grafikę nie ma pojęcia o ograniczeniach przeglądarek i nawpieprza po 20 niewidocznych gradientów a strona dalej wygląda obskurnie...

0

To już zamiast pustych divów (nie wnikam co i gdzie) zrób sobie puste spany - jak już robię takie puste cosie (z rzadka się zdarza) to spany brzmią mniej głupawo dla wyszukiwarek.
</li> nie używam, ze względu na to, że przeglądarka dopisze sobie sama zamknięcia (jest to dozwolone, poprawne), ale w taki sposób, że pomiędzy zamykającym znacznikiem poprzedniego </li>, a otwierającym następny element <li>, nie będzie żadnego białego znaku. Łatwiej tak, niż pisać html, żeby tych białych znaków nie było, a ma to znaczenie, jeżeli poszczególne elementy mają display-block (dodatkowe parę px odstępu).
Ten kod warunkowy jest potrzebny dla stronek w HTML5, jeżeli IE < 9 mają to ogarniać.

0
gdsfgsdfg napisał(a):

w ogóle niepotrzebnie sobie komplikujesz życie
po prostu dolne tło połącz w jedno, dorób lewą stronę tej górki i wklej ją po prawej, zapętl

strona o banalnym wyglądzie - do zrobienia w pół godziny

Nie przeczę, że strona, którą opisałeś ma banalny wygląd i da się ją zrobić w pół godziny. Problem w tym, że strona ma wyglądać tak, jak ma wyglądać, a nie tak, jak Ty to wymyśliłeś, żeby było łatwiej.
Zresztą, po co sobie komplikować życie jakąś grafiką? Tabelka z dwiema kolumnami, w lewej menu, w prawej treść, to też strona i wszystko się da przeczytać.

ale takie problemy się pojawiają właśnie jak osoba która tworzy i tnie grafikę nie ma pojęcia o ograniczeniach przeglądarek i nawpieprza po 20 niewidocznych gradientów a strona dalej wygląda obskurnie...

Tzn. co konkretnie wygląda źle i w której przeglądarce?

dzek69 napisał(a):

To już zamiast pustych divów (nie wnikam co i gdzie) zrób sobie puste spany - jak już robię takie puste cosie (z rzadka się zdarza) to spany brzmią mniej głupawo dla wyszukiwarek.

Ok, zmieniłem.

</li> nie używam, ze względu na to, że przeglądarka dopisze sobie sama zamknięcia (jest to dozwolone, poprawne), ale w taki sposób, że pomiędzy zamykającym znacznikiem poprzedniego </li>, a otwierającym następny element <li>, nie będzie żadnego białego znaku. Łatwiej tak, niż pisać html, żeby tych białych znaków nie było, a ma to znaczenie, jeżeli poszczególne elementy mają display-block (dodatkowe parę px odstępu).

Rozumiem, dobrze wiedzieć.

Ten kod warunkowy jest potrzebny dla stronek w HTML5, jeżeli IE < 9 mają to ogarniać.

Tylko coś nie działa (brak grafiki menu i całego article), ale to jeszcze z tym powalczę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1