Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

A wraz z nim jeszcze prostszy i bardziej intuicyjny sposób na umieszczanie napisów na stronach WWW za pomocą dowolnie wybranej czcionki. Wszystko dzięki JavaScript i Flashowi. Jak to działa? Otóż przez JavaScript sprawdzana jest obecność pluginu - jeśli jest zainstalowany (i jest w odpowiedniej wersji) to żądane elementy (na przykład nagłówki) są podmieniane przez obiekt Flasha. Wyświetla on oryginalny tekst i skaluje go korzystając z odpowiednich reguł CSS. Tekst można zaznaczać (kopiować), zamieniać na link. Oczywiście dzięki podmianie przez JavaScript takie nagłówki są dostępne dla wyszukiwarek i czytników ekranu.

W poprzedniej wersji (sIFR 2) należało wyczyniać cuda na kiju, żeby wielkość czcionki nie zwiększała się wraz z długością napisu, co było mankamentem tamtego sposobu skalowania. Teraz już jest prościej, a szereg usprawnień jest dość imponujący. Korzystając z okazji opiszę jak używać Scalable Inman Flash Replacement.

  • W paczce zamieszczony jest plik sifr.fla, otwieramy go korzystając z Flash 8 (trial jest dostępny na stronie Adobe).
  • Klikamy parę razy w dokumencie aż pokaże się tekst.
  • Zaznaczamy go i wybieramy odpowiedną czcionkę w panelu na dole (jak go nie widać to Ctrl + F3).
  • Jeśli nie chcemy możliwości wyświetlania tekstu pogrubionego albo kursywy kasujemy odpowiednią część tego przykładowego tekstu. Można skasować wszystko, aby rozmiar pliku pozostał jak najmniejszy.
  • Klikamy przycisk Embed i wybieramy wszystko od Uppercase [A..Z] do Punctuation [!@#$...] oraz Latin I i Latin Extended A - aby polskie krzaczki się pokazały.
  • Wybieramy Export → Movie (Ctrl + Shift + Alt + S) z menu File i zapisujemy - raz jako Flash 8 (dostajemy autokerning i lepszy antyaliasing) drugi raz jako Flash 7.
  • Load order ma być ustawiony na Bottom up a wersja ActionScript na 2.0. Wypada jeszcze skompresować (Compress movie) i zaznaczyć Protect from import.

Potem na stronie którą chcemy upiększyć - niech będą to nagłówki h2 - wstawiamy relację do plik JS z paczki.

  1. <script type="text/javascript" src="sifr.js"></script>

Następnie w pliku skryptów albo od razu na stronie (w <script/>) I wywołanie zamiany. Po kolei:

  1. sIFR.prefetch({
  2. src: 'nazwafonta-7.swf',
  3. highsrc: 'nazwafonta-8.swf'
  4. });

Prefetching plików dla Explorera i Safari (szybsze ładowanie). Tutaj ustawiamy te dwie wersje - jedną zwykłą i jedną lepszą dla Flasha 8. Gdyby Flash 7 nas nie obchodził należy dodać tą linijkę przed podanym wyżej kodem:

  1. sIFR.useAdvancedModeOnly();

Następnie powinniśmy włączyć kompatybliność z starszymi wersjami Mozilli, Opery i Safari - nowy algorytm określania rozmiarów czcionek tego wymaga. Kolejnym krokiem jest aktywacja skryptu.

  1. sIFR.compatMode = true;
  2. sIFR.activate();

Gdybyśmy musieli wyłączyć sIFR na jakiś czas wystarczy wykomentować tą drugą linijkę. Wracając jednak - pozostaje już tylko zacząć zamieniać tekst. Dla nas są to nagłówki h2:

  1. sIFR.replace({
  2. selector: 'h2',
  3. src: 'nazwafonta-7.swf',
  4. highsrc: 'nazwafonta-8.swf',
  5. css: {
  6. '.sIFR-root': { 'font-weight': 'bold', 'leading': -5, 'background-color': '#FFFFFF' }
  7. }
  8. });

Początek jest raczej jasny. Jako selektorów można używać #identyfikatora, .klasy oraz > potomka. Można także wypisać parę reguł oddzielając je przecinkami. Dalej mamy wskazanie na pliki Flasha (jak wyżej) oraz dodatkowy opis wyglądu. Tutaj można ustawić pogrubienie albo kursywę oraz odstępy między wierszami przez leading. Należy także ustawić kolor tła, jeśli nie używamy domyślnego - białego.

Kawałek kodu z sIFR.replace() możemy wywoływać ile razy chcemy dla ilu chcemy elementów. Oczywiście sIFR nie służy do zamiany całych akapitów - co najwyżej nagłówki albo specjalnie wyeksponowane kawałki tekstu.

Następnie należy określić już w CSS wielkość renderowanych napisów. Bardzo ważne jest też aby nadać wysokość linii wartość 1em (równą wielkości tekstu). Dzięki temu zadziała bezproblemowo ten nowy sposób renderowania.

  1. h2 {
  2. font-family: Candara, sans-serif;
  3. font-size: 1.63em; /* 26px */
  4. font-weight: bold;
  5. }
  6. .sIFR-hasFlash h2 {
  7. font-size: 26px;
  8. line-height: 1em;
  9. }

Należy zaznaczyć, że aktywacja sIFR-a oraz funkcje podmieniające zwykły tekst na Flasha mogą być umieszczone w <body/> i uruchomić się od razu albo w <head/> i uruchomić się dopiero po załadowaniu całego dokumentu.

Demo jak to wszystko wygląda. W prezentacji użyłem dość ciężkich plików .swf, ale na pewno da się je bardziej skompresować (choćby przez zmniejszenie jakości JPG w eksportowaniu albo zmniejszeniu ilości dołączanych znaków). Więcej na temat konfiguracji sIFR można poczytać w dokumentacji wersji 2.x oraz w How-To wersji 3.0.


W sIFR 3.0 znalazłem jeden błąd (?) - mianowicie gdy klikniemy na napis i zaczniemy scrollować myszką mając kursor nad nim tekst zniknie (pojawi się, jeśli przescrollujemy w drugą stronę) - tak jakby przewijano zawartość tego bloku. A tak poza tym to wszystko działa i bardzo ładnie wygląda. Polecam, to tak naprawdę jedyny tak dobry sposób na pokazanie ładnych napisów swoją czcionką.

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 02 czerwca 2006 o 19:12

Kategorie: Design, Flash, JavaScript & DOM, Narzędzia

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. Gdyby jeszcze flejsz wyświetlał normalną „łapkę” nad linkami, zamiast tej swojej, to by było właściwie nie do odróżnienia od zwykłego linku :-)

  2. Zważ Riddlu, że w demie na http://dev.novemberborn.net/sifr3/alpha/demo/ problem z przewijaniem nie ma miejsca.

  3. Błąd (zjawisko powiedzmy) potwierdzam. A samo narzędzie - fajne.

  4. Jest jeszcze mały problem ─ wyświetlony tekst nie jest wygładzany podpikselowo i wygląda dosyć ochydnie zwłaszcza przy mniejszych fontach. Być może to tylko przypadłość GNU+Linuksowej wersji flejsza?

  5. Fajne. Szkoda tylko, że praktycznie nie da się takiej strony przewijać kółkiem myszy :)

  6. Jest zonk w momencie, gdy używa się FlashBlocka w Firefoksie. Ponieważ sam plugin flash jest zainstalowany i odpowiada na test JavaScriptu i skrypt próbuje podmienić nagłówek. Jednocześnie nie pokazuje się ikonka pozwalająca na uruchomienie animacji, ergo: nie widzimy nagłówków w jakiejkolwiek formie.

    screen: http://tomasz.topa.pl/tmp/sifr3.png

  7. Potwierdzam spostrzeżenia mvc. Wygładzanie (przynajmniej podpikselowe) flasha na linuksie leży.
    Zresztą cały ten sIFR uważam za pomyłkę. Może i wygodne, ale budzi zbyt wiele wątpliwości. Domyślne czcionki systemowe albo stary poczciwy FIR.

  8. przerost formy nad trescia.

  9. janek: O, widzisz, czyli to ja coś zepsułem. Tym lepiej dla sIFR-a.

  10. Niestety ta metoda nie działa kompletnie u mnie pod Firefoxem (z fp8.5), ale na IE7 (z FP9) już działa, więc jest nadzieja :)

  11. Kolejny minus – wyłącz style strony i zobacz jak ładnie są obcinane napisy…

  12. I kolejny minus - spróbuj wcisnąć CTRL+A żeby np. skopiować cały tekst w inne miejsce.

    No chyba, że to specjalne zabezpieczenie przed kopiowaniem treści...;)

  13. sIFR Beta 1

    Pierwsza wersja beta pluginu JavaScript+Flash sIFR. Pisałem o Alphie kiedyś, skok jakościowy jest ogromny. Podejrzewam, że wersja 3.0 będzie wymiatać i wreszcie będzie można używać tego profesjonalnie.

  14. kod do poprawienia scrolla do sifr 3.0 alpha includowany do sifr.fla

    var mouseListener:Object = new Object();
    mouseListener.onMouseWheel = function(delta:Number) {

    if(delta < 0 || delta > 0) { holder.txtF.scroll = 0; }

    };
    Mouse.addListener(mouseListener);

  15. http://www.kurak.net/test/sifr%20test/ <=- działa, jak poprawić by nie przewijało się w dół po zaznaczeniu i przeciągnięciu / scrollu myszą?

    Niestety działa to tylko podczas wyświetlania jedno liniowych wiadomości.

    Problem jest ze strony flasha, wystarczy zmienić wartość w ustawieniach pola tekstowego z ‘multiline no wrap’ na ‘singleline’.

  16. Udało się komuś używać wszystkich polskich znaków. Tzn mam problem z ó wszystkie inne diakrytyki mi się wyświetlają tylko ten jeden nie.

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.