img vs. background-image co i kiedy wybrać?

No właśnie. Kiedy używać znaczników img a kiedy właściwości background-image? Czy ma to jakiś wpływ na usability, accessibility, wydajność?

7 miesięcy, 2 tygodnie temu | edytowane przez: raphpl 12881519

  • W zasadzie szybka reguła jest bardzo prosta. Jeżeli "obrazek" ma znaczenie w treści strony jako obrazek, tj. na przykład wyświetlasz zdjęcie, to używaj tagu <img />.

    Jeżeli jest to jedynie ozdobnik, to raczej staraj się oddzielić rzeczy, które mają związek li tylko z formatowaniem, od zawartości która ma znaczenie - wypchnij więc obrazek do atrybutu background-image w CSS. Zdarzają się wyjątki, typowym jest np. obrazek - ikonka wewnątrz tagu <a /> - ale to już rób według własnego wyczucia którego z pewnością z czasem nabierzesz.

    Tak naprawdę w pliku HTML/XHTML w idealnym przypadku nie powinno być ani grama kodu odpowiadającego za formatowanie. Od tego jest CSS. Z tego powodu np. używa się tagów <strong></strong> i <em></em> zamiast <b></b> i <i></i> - ponieważ one niosą ze sobą pewnie znaczenie, semantykę, podczas gdy bold i italic to jedynie informacje wizualne. Z tego samego też powodu odchodzi się od rozmieszczania bloków na stronie za pomocą tabel - ponieważ tabela ma znaczenie "zawieram dane tabelaryczne" a nie "układam wizualnie tekst na stronie". Z tego powodu używa się znaczników <h1></h1> itp., zamiast <b><font></font></b> - ponieważ mają znaczenie "nagłówek" a nie "pogrub i powiększ czcionkę". I tak dalej.

    Google Ci za to wszystko podziękuje lepszym zindeksowaniem strony i łatwiejszym pozycjonowaniem, osoby korzystające np. z czytników tekstu dla niewidomych nie będą zasypywane informacjami które nie są treścią, no i jest jeszcze zawsze satysfakcja z bycia w zgodzie ze standardami i best practices.

    Jak chcesz więcej poczytać na ten temat, to zajrzyj na stronę Wikipedii, albo poszukaj w google pod hasłem semantic html.

  • Atrybut background-color warto używać dla tła strony i elementów typu "header". Każda inna grafika powinna być (dla wygody) zadeklarowana jako znacznik <img/>. Osobiście mało kiedy korzystam z background-image, ale jeżeli już, to właśnie tylko dla tła. Co do wydajności Po co obciążać załadowanie obrazka w CSS, który jeszcze sam mus być zaimportowany, jak można to wykonać z poziomu kodu HTML? Moim zdaniem zdecydowanie polecam znacznik <img/>.

  • Obrazki wstawione do strony za pośrednictwem taga są widoczne po wydrukowaniu strony tak wiec wszelkie wykresy, logotypy, znaki towarowe i zdjęcia istotne dla treści strony powinny być osadzane w kodzie właśnie za pomocą tej metody. Z kolei layout buduje się za pomocą css-a. Obrazki w backgroundzie nie są widoczne po wydrukowaniu strony co pozwala zaoszczędzić atrament.

  • Tak jak michu napisał czytelność, użyteczność i jak najmniejsza ilość kodu w dokumentach html są motywem przewodnim tworzenia witryn i wpływają bardzo dobrze na pozycjonowanie. Większość rzeczy graficznych i ozdobników powinna lądować w CSS'ie. Tak samo jak nie powinno się już używać tabel tylko div'ów tak samo w layoucie strony lepiej używać background'u nie musi to być też background-image bo może być poprostu:

    background: url(img/plik.jpg) no-repeat;
    

    Do tego wszystkie obrazy, grafiki i ilość informacji na stronie nie powinna przekraczać 250kb, aby strona mogła być lekka i szybko się ładowała. Dlatego też obrazki w logo czy tła jako jeden plik nie powinny przekraczać 50kb. Tworząc witryny zgodne ze standardami xhtml i lekkie unikniemy wielu typowych problemów.

  • Jeszcze jedna mała uwaga: często znacznie łatwiej ustawić pozycję obrazka w tle niż dołączając go normalnie do kodu strony (np. wyśrodkowanie w pionie względem tekstu).

  • Jeszcze jedna mała uwaga: często znacznie łatwiej ustawić pozycję obrazka w tle niż dołączając go normalnie do kodu strony (np. wyśrodkowanie w pionie względem tekstu).

  • Sama nazwa już tutaj atrybutu stylu mówi za siebie: background-image czyli zwyczajnie tło - pozwala urozmaicić stronę graficznie i nie stworzy problemów z ułożeniem tekstu "na obrazku", co w przypadku już wstawienia obrazka w tagu i chęci umieszczenia na nim tekstu wymaga nieco większego nakładu pracy.

  • Cechy background-image warto używać przy interaktywenych menu lub tabelach bocznych, ustawiając background-repeat na repeat-x, mając obrazek na przykład 1x32 px. Reszta zdjęć powinna być w tagach <img/>.

Zaloguj się, aby dodać swoją odpowiedź