Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS][jQuery] Definiowanie styli w jQuery zamiast CSS
Forum PHP.pl > Forum > Przedszkole
jg44
Witam,
mam pewien problem ze zrobieniem efektu przejścia (CSS 3 transitions) w menu na stronie, chodzi o to, żeby po najechaniu na element menu, podświetlany był 'efektownie' a nie tradycyjnie (tutaj możecie zobaczyć, o co mi chodzi, jeśli nie zrozumieliście zawiłej formy mojego przekazu wink.gif http://www.w3schools.com/css3/css3_transitions.asp). To oczywiście nie działa w IE, ale na tym mi szczególnie nie zależy, a w pozostałych przeglądarkach należy używać przedrostków -moz-, -webkit, -o, itd. Problem polega na tym, że CSS musi mi się walidować - w przypadku przedrostków rzecz jasna walidator będzie ryczał, że mu się to nie podoba. Wpadłem więc na pomysł, żeby te polecenia z przedrostkami wyrzucić do jQuery - wtedy walidator zostanie 'oszukany', bo te style będą w pliku *.js, więc 'nie zauważy' ich w arkuszu *.css bo ich tam zwyczajnie nie będzie.
Problem jednak w tym, że mi to nie działa, no i nie wiem dlaczego. Kiedyś robiłem już podobne triki z gradientem i działało, tutaj nie chce.
Sporne style wyglądają następująco:
  1. *:hover {
  2. -moz-transition: 0.3s ease-in;
  3. -webkit-transition: 0.3s ease-in;
  4. -o-transition: 0.3s ease-in;
  5. }

Skrypt jQuery wygląda tak:
[JAVASCRIPT] pobierz, plaintext
  1. $('*:hover').css('-moz-transition','0.3s ease-in');
  2. itd.
[JAVASCRIPT] pobierz, plaintext

Czy ktoś wie, dlaczego to może nie działać?
Z góry dziękuję
pozdrawiam
grzes999
Spróbuj za miast gwiazdki dać a. A jeśli to nie pomoże to nadaj odnośnikom id i zrób akcję na hover gdzie będziesz nadawał i usuwał style css.
jg44
Właśnie też nie ma efektu, chyba że coś źle zrobiłem. Opcja z a zamiast gwiazdki nic nie dała, Twój drugi sposób zrobiłem następująco:
Linki w menu:
  1. <li><a class="trans" href=" ... "
  2. <li><a class="trans" href=" ... "
  3. <li><a class="trans" href=" ... "
  4. ...


jQuery:
[JAVASCRIPT] pobierz, plaintext
  1. $('.trans:hover').css('-moz-transition','0.3s ease-in');
[JAVASCRIPT] pobierz, plaintext

i
[JAVASCRIPT] pobierz, plaintext
  1. $('a.trans:hover').css('-moz-transition','0.3s ease-in');
[JAVASCRIPT] pobierz, plaintext

Też nic...
grzes999
[JAVASCRIPT] pobierz, plaintext
  1. $(.trans).hover (function () {
  2. // akcja po najechaniu na link },
  3. function () { // akcja po opuszczeniu myszki linku
  4. })
[JAVASCRIPT] pobierz, plaintext

toaspzoo
[JAVASCRIPT] pobierz, plaintext
  1. $('a').hover(function(){
  2. alert("mouseover!");
  3. $('a').css('-moz-transition','0.3s ease-in');
  4.  
  5. },
  6.  
  7. function () {
  8. $('a').css('-moz-transition','0.3s ease-in');
  9. alert("mouseout!");
  10. }
  11.  
  12.  
  13.  
  14. );?
  15.  
[JAVASCRIPT] pobierz, plaintext


rozumiem, że oczywiście masz wcześniej wczytane jquery (<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>) :?



lub
  1. a.trans:hover {
  2. -moz-transition: 0.3s ease-in;
  3. -webkit-transition: 0.3s ease-in;
  4. -o-transition: 0.3s ease-in;
  5. }
mls
Cytat(jg44 @ 11.08.2012, 08:58:53 ) *
Problem polega na tym, że CSS musi mi się walidować - w przypadku przedrostków rzecz jasna walidator będzie ryczał, że mu się to nie podoba. Wpadłem więc na pomysł, żeby te polecenia z przedrostkami wyrzucić do jQuery - wtedy walidator zostanie 'oszukany', bo te style będą w pliku *.js, więc 'nie zauważy' ich w arkuszu *.css bo ich tam zwyczajnie nie będzie.


Pomysł idiotyczny. Co, jeśli ktoś będzie miał wyłączoną obsługę JS? Lub w kodzie JS znajdzie się błąd przez który akurat ten kod odpowiedzialny za style się nie wykona? Poza tym, JS wykonuje się po wyrenderowaniu strony przez przeglądarkę. Czyli przez moment użytkownik zobaczy nieostylowane poprawnie elementy.
Co to znaczy, że "CSS musi się walidować"? Nic nie musi. Poprawny plik CSS zawierający rozszerzenia specyficzne dla silników przeglądarek nadal jest poprawny!
jg44
toaspzoo i grzes999, dziękuję, dobrze, że są jeszcze ludzie, którzy potrafią i chcą pomóc.

mls, poziom Twojej wypowiedzi jest wprost proporcjonalny do miasta, z którego jesteś. Po pierwsze, strona, którą wykonuję, naszpikowana jest JSem i jQuery w dość dużych ilościach (od ajaxowej księgi gości i formularza kontaktowego przez wielopoziomowe menu po obszerną galerię zdjęć w jQuery), więc przy braku obsługi JS nic nie będzie działać. Poza tym jest rok 2012 i czasy IE6, 7 i firefoxa 2 już raczej minęły (z pewnymi wyjątkami).
Po drugie, stronę wykonuję dla kogoś a nie dla siebie, i na dole strony ma być link prowadzący do walidatora. Więc chyba zgodzisz się ze mną, że raczej nie będzie atrakcyjnie wyglądać, jeśli ktoś sobie kliknie w link do walidacji CSS i ujrzy, że 'właściwość -moz-transition nie istnieje'.
Po trzecie, wykonywanie JSu po wyrenderowaniu strony przez przeglądarkę nie jest problemem, bo to opóźnienie jest tak minimalne, że trzeba być chyba Panem Bogiem, żeby zauważyć, że coś się załadowało z opóźnieniem. Sam testowałem taką sytuację na internecie mobilnym (przy połączeniu EDGE, które w najlepszym wypadku osiąga przepustowość około 0.2 Mb/s) i nie było widać żadnego opóźnienia.
No i po czwarte, chyba nie jest na miejscu, że jeśli ktoś chce coś zrobić, ma jakiś pomysł i jednocześnie z czymś problem, a ktoś inny nie dość, że w zasadzie nic znaczącego nie pisze, to jeszcze pojeżdża go, że jego pomysł jest idiotyczny.
kamil4u
Mam klika uwag smile.gif

- Skoro korzystasz przy menu z jQuery czemu nie użyjesz po prostu animate? Czemu na siłę CSS3? Skoro jak użyjesz animate to będzie działać pod wszystkimi przeglądarkami, więc są same plusy
-
Cytat
Po drugie, stronę wykonuję dla kogoś a nie dla siebie, i na dole strony ma być link prowadzący do walidatora.

Ogółem link do validatora to głupi pomysł i ja namawiałbym klienta do niedawania go. Oczywiście jak się uprze to trudno, ale:
* Dużo stron świeci na zielono, a kod jest z... no jest jaki jest ( nie mówię o Tobie, tylko o tym, że się to nagminnie zdarza - ogółem )
* Po paru latach/miesiącach, może coś się zmienić( w sensie standardów, nie na stronie ) i klient będzie miał czerwony kolorek
* Podejrzewam, że przeciętego kowalskiego( odwiedzającego daną stronę ) nic nie obchodzi czy strona jest poprawna pod względem kodu
* Jak da się namówić klienta to jestem za tym co ~mls i normalnie użyć przedrostków
** Namówienie klienta nie jest, aż tak trudne jak potrafisz sprawić, że on uwierzy, że znasz się lepiej od niego na robieniu stron wink.gif

-
Cytat
Poza tym jest rok 2012 i czasy IE6, 7 i firefoxa 2 już raczej minęły (z pewnymi wyjątkami).

Ja uznaję zasadę, że jak coś da się prosto zrobić pod starszymi przeglądarkami to po prostu to robię

-
Cytat
Poza tym, JS wykonuje się po wyrenderowaniu strony przez przeglądarkę.
Daj źródło tej informacji. Wydaje mi się, że tak nie jest, a JS wykonuje się nijako od razu( oczywiście po wczytaniu pliku, ale plik z CSS też się musi wczytać smile.gif )


Cytat
mls, poziom Twojej wypowiedzi jest wprost proporcjonalny do miasta, z którego jesteś.

Nie chcę się bawić w moderatora, ale nie róbmy tu drugiego onet-u wink.gif
toaspzoo
Z mojej wiedzy wynika, że kod javascript wykonuje się od razu po załadowaniu fragmentu kodu, a nie po 'wyrenderowaniu' [~mls] całej strony.
Można zawsze zastosować document ready function / onLoad
jg44
1) Dlatego, że jakoś specjalnie nie przepadam za jQuery i JS i po prostu tam gdzie musi być, no to już jest, a tam gdzie da się inaczej, to chciałem użyć CSS wink.gif
2) Masz rację, wiem, że standardy się zmieniają i pewnie już za kilka tygodni będąca jeszcze dzisiaj strona poprawna, już nią nie będzie, sam też nie jestem zwolennikiem wstawiania tych obrazków, które w3 proponuje po pomyślnej walidacji wink.gif
3) No masz rację wink.gif
4) Co do szybkości wczytywania się JS, to pytanie nie do mnie, tylko do mls, bo prawdę mówiąc też spotkałem się z tym stwierdzeniem po raz pierwszy
5) Wiem, i pewnie zaraz zarobię +10 do ostrzeżeń, ale po prostu irytuje mnie taki ton wypowiedzi.
Pozdrawiam wink.gif
kamil4u
Cytat
1) Dlatego, że jakoś specjalnie nie przepadam za jQuery i JS i po prostu tam gdzie musi być, no to już jest, a tam gdzie da się inaczej, to chciałem użyć CSS wink.gif


No ale Ty i tak używasz jQuery - tu nie da się zrobić tego inaczej( samym CSS-em ). Zgadza się, jak da się CSS-em to wszystko cacy, ale jak potrzebujesz do tego już JS to lepiej to zrobić w nim. Będzie działo pod starszymi przeglądarkami, więc jest plus. A tak to ten Twój kod jQuery śmiesznie wygląda i tak po prostu moim zdaniem się tego nie robi.
Crozin
To co chcesz zrobić jest pozbawione sensu. Dodanie nieprawidłowej właściwości przez JS jest tak samo niepoprawne jak zapisanie jej w pliku CSS z punktu widzenia standardu. Ten sam standard jednak określa, że w przypadku niewłaściwych właściwości przeglądarka powinna je pominąć i potraktować całą resztę dokumentu jako prawidłową.

Jeżeli wszystko na czym Ci zależy to zielony pasek na stronie walidatora W3C, wrzuć sobie na początku arkusza:
  1. <?php
  2.  
  3. if (stripos($_SERVER['HTTP_USER_AGENT'], 'jigsaw') !== false) {
  4. }
  5.  
  6. ?>
  7. ...
I masz problem z głowy.
jg44
Ciekawe rozwiązanie, dzięki! smile.gif
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.