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.

Często tworzymy proste strony, złożone z pojedynczego dokumentu. Być może są to wylistowane linki do plików z pracą domową dla znajomych. Być może piszemy jakieś podsumowanie w czystym XHTMLu. Czasem chcemy ozdobić pliki małymi ikonkami wskazującymi na typ pliku. Czasem pragniemy uczłowieczyć dźwiękiem któryś akapit.

I zwykle robimy to dodając malutkie pliki graficzne (albo dźwiękowe) do strony, mozolnie ciułając je w katalogu z tym pojedynczym dokumentem. Niejednokrotnie zastanawiamy się, czemu nie można ich dodać od razu do dokumentu, oszczędzając sobie problemów przy kopiowaniu i rozprzestrzenianiu dokumentu.

Wstęp

No ale dość rozmarzania się. Mądrzy ludzie wpadli na taki pomysł i da się to już osiągnąć. Mowa o sposobie zapisu pliku, czy to od razu w kodzie strony, czy w pliku CSS.

Składnia wygląda tak:

  1. data:[<mediatype>][;base64],<data>

Mediatype to zwyczajnie typ danych. Przykładowo dla pliku GIF jest to image/gif, dla PNG image/png a dla MP3 audio/mp3. Jeśli pominiemy mediatype, zostanie ustawiony na text/plain, a tego w przypadku grafiki czy dźwięku nie chcemy. Na temat parametru base64 można przeczytać w Wikipedii. Data jest oczywiście samym plikiem. Plik możemy przygotować w formacie base64 za pomocą strony The data: URI kitchen. Zaznaczamy checkbox base64, wklejamy link do pliku bądź uploadujemy go z komputera i voila.

Użycie na stronie

Gdy już mamy ciąg Data URL (używam małego pliku GIF), możemy go użyć na stronie WWW. Wersja z wykorzystaniem <img/>:

  1. <img src="data:image/gif;base64,R0lGODlhCgAHAIABAAAAAAAAACH5BAEAAAEALAAAAAAKAAcAAAIPjH%2BACGoeGmyRJglvZqgAADs%3D" alt="small icon" />

Co da taki efekt:

Można też dodać ten plik w formacie Data URL do arkusza CSS i wykorzystywać go jako background-image, list-style-image bądź wklejać przez ::before { content: ...; }:

  1. url(data:image/gif;base64,R0lGODlhCgAHAIABAAAAAAAAACH5BAEAAAEALAAAAAAKAAcAAAIPjH%2BACGoeGmyRJglvZqgAADs%3D);

Zalety

Dzięki możliwości załączenia plików w tekście, w arkuszu CSS, możemy łatwiej tworzyć moduły dla naszych stron. Przykładowo reguły CSS udające elementy interfejsu systemowego, których używam w poradnikach do Konnekta (przykładowa strona) mogą od teraz obyć się bez masy oddzielnych plików. Ponadto wykonujemy HTTP request tylko raz, a nie parenaście/paredziesiąt razy. Nie trzeba mówić jak bardzo przyśpiesza to ładowanie strony.

Wady

Opłaca się tak załączać tylko malutkie pliki. Ale to bardziej logika niż wada. No i opisany sposób działa tylko w nowoczesnych przeglądarkach, takich jak Mozilla czy Opera.

Dodatkowe materiały:

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.

Informacje o wpisie

Napisał riddle 13 sierpnia 2005 o 18:23

Kategorie: Standardy sieciowe

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

  1. To pole komentarzy w Operze jest straaasznie wąskie. W FF jest normalnych rozmiarów więc chyba nie testowałeś tego w Operze. Mógłbyś poprawić bo naprawdę ciężko się tak pisze :)

  2. Soupa s Trópa 2 14 sierpnia 2005, 00:54

    Niech Ci Bozia w dzieciach szczodrze wynagrodzi za ten artykuł. Wszytkie porady dotyczące webmasteringu i alternatywnych przeglądarek powinieneś zebrać w jednym miejscy, by był łatwiejszy dostęp a potem napisać książkę, opatentować i obciągać kase :D

  3. @Maciek:

    U mnie dobrze wygląda.

  4. No teraz tak, przejąłem się tym co napisał maciek i poprawiłem (width: 60ex;) :)

  5. Kiedyś już gdzieś o tym czytałem. Super sprawa, tylko jak zwykle IE musi popsuć całą zabawę ;/

  6. jestem pewny na 99% że kiedyś miałem coś takiego na IE i wtedy się wkurzałem że FF i Opera tego nie obsługuje …
    w każdym razie IE ma też coś takiego jak .mht (wszystko w jednym pliku) i też fajnie by było gdyby coś takiego było w standardzie, tj. żeby w dokumencie były tylko odwołania do identyfikatorów plików a same pliki na samym końcu dokumentu, wtedy ładowanie by wyglądało tak jak to jest normalnie gdy pliki są osobno

  7. świetna sprawa z tym base64. bawię się tym od jakiegoś czasu i szukam sposobu zmuszenia IE żeby jednak przełknął to kodowanie. na dobrą sprawę to on je przecież obsługuje – w plikach mht (w strasznie zakręcony sposób). a skoro potrafi tam, to może da się go przycisnąć (choćby małym oszustwem) żeby jednak i w plikach html też potrafił?

  8. witam mam prośbo-pytanie.
    jak, za pomocą kodu html, zamieścić do strony www dokument textowy typu word lub pdf?? najlepiej zeby się dało go pobierać i drukowac.(jesli to mozliwe:))

    bardzo prosze o pomoc…

  9. Na IE przykład nie działa :(

  10. IE nie wspiera tej technologii, niestety. Data: URL możesz wykorzystywać natomiast z powodzeniem podczas tworzenia UserCSS do podmiany stylów lokalnie. Tak na przykład zrobiłem redesignując Ling.pl.

  11. Bardzo dobry artykuł, polecam.