chevron-left chevron-right

Piotr Nalepa Frontend, architecture and AI

[CSS]Lustrzane odbicia obrazków z użyciem CSS

This version
blog.piotrnalepa.pl/2011/08/08/csslustrzane-odbicia-obrazkow-z-uzyciem-css
Published
Author
, Staff Software Engineer
Category
CSS
Feedback
Write to me · Post on X

This post is 15 years old. Browsers and tools may have changed since then, so check the code against current documentation before you use it.

Dzisiejsze czasy wymagają od projektantów stron WWW umiejętności tworzenia ciekawych efektów przyciągających uwagę użytkownika strony internetowej. Jednym z obszarów w którym szczególnie wskazane jest korzystanie z nich są galerie zdjęć czy też prezentacje produktów w sklepach internetowych. Do ich uatrakcyjnienia można wykorzystać lustrzane odbicia i to jest tematem dzisiejszego artykułu.

Section 1Kod HTML

W naszym przypadku będziemy tworzyć prostą galerię zdjęć do których będą dodane lustrzane odbicia.
Przykładowy kod HTML wygląda następująco:

Example 1HTML
1
2
3
4
5
6
7
8
9
<section id="reflex">
    <div class="image-block">
 
    <div class="reflection">
 
        <div class="overlay"></div>
    </div>
    ...
</section>
Jak widać powyżej, kontenerem zbiorczym będzie sekcja z przypisanym id - reflex i do niej wstawiamy kolejne elementy zawierające pojedyncze zdjęcie. Element ten ma klasę image-block, a w nim znajduje się zdjęcie normalne oraz element ze zdjęciem odbitym i nakładką z przejściem gradientowym.

Section 2Kod CSS

Następnym krokiem jest utworzenie kodu CSS odpowiedzialnego za stworzenie efektu odbicia. Wykorzystamy tutaj atrybuty z prefiksami, ponieważ nie ma jednego ogólnego standardu dla nich i każdy producent przeglądarek tworzył je na własną modłę.
Example 2CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
.image-block {
    width: 200px;
    margin: 0px 10px;
    float: left;
}
.image-block img {
    width: 200px;
    height: 150px;
    margin: 0;
}
.reflection { position:relative; }
.reflection img {
    -webkit-transform: scaleY(-1);
       -moz-transform: scaleY(-1);
        -ms-transform: scaleY(-1);
         -o-transform: scaleY(-1);
            transform: scaleY(-1);
               filter: flipv;
    opacity: 0.33;
}
.overlay {
    position:absolute;
    top: 0px;
    left: 0px;
    width: 200px;
    height: 150px;
    background-image: -moz-linear-gradient(
                    center bottom,
                    rgb(255,255,255) 60%,
                    rgba(255,255,255,0) 75%);
    background-image: -o-linear-gradient(
                    rgba(255,255,255,0) 25%,
                    rgb(255,255,255) 40%);
    background-image: -webkit-gradient(
                    linear, left bottom, left top,
                    color-stop(0.60, rgb(255,255,255)),
                    color-stop(0.75, rgba(255,255,255,0)));
}
Jak zapewne zauważyłeś/aś, atrybuty z prefiksami zostały zastosowane do osiągnięcia gradientu (*-gradient) i odwrócenia zdjęcia (*-transform).
Tak przygotowany kod będzie się dobrze wyświetlał we wszystkich przeglądarkach Mozilla Firefox, Opera, Google Chrome oraz Safari.
Dla Internet Explorera kod będzie wyglądał nieco inaczej.

Section 3Kod dla IE

Tak jak wspomniałem wyżej, kod dla IE jest inny. Wykorzystałem do tego celu JavaScript w postaci biblioteki jQuery oraz dodatku Reflecton.js. Jest to nieuniknione, aby osiągnąć ten sam efekt. Na początku, należy dodać następujący kod do sekcji HEAD strony:
Example 3HTML
1
2
3
4
<!--[if IE ]>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="reflection.js"></script>
<![endif]-->
Kolejnym krokiem, który podjąłem, było stworzenie krótkiego kodu JS, który modyfikuje drzewko DOM strony WWW:
Example 4JavaScript
1
2
3
4
5
6
<script>
$(document).ready(function() {
    $('.reflection').remove();
    $('.image-block img').addClass('reflect');
})
</script>
Usuwa on elementy z klasą reflection z kodu strony, a następnie do obrazków umieszczonych w elemencie o klasie image-block dodaje klasę reflect. Dzięki temu nasz skrypt specjalnie przygotowany dla IE również utworzy lustrzane odbicia obrazków, takie same jak dla przeglądarek poprawnie obsługujących CSS3.

Section 4Podsumowanie

W ten sposób doszliśmy do końca prac nad uzyskaniem efektu lustrzanego odbicia dla naszej galerii zdjęć. Dzięki temu tak utworzona galeria uzyska nowy wygląd, który będzie potrafił przyciągnąć uwagę użytkownika i zachęci do interakcji z taką galerią.
Demo z tego artykułu można zobaczyć tutaj: CSS lustrzane odbicia
Share
Feedback

About the author

Staff Software Engineer

I've been writing this blog since 2009 and building for the web professionally for 14 years. Today I lead the frontend of the Cosmos platform at Bishop Fox, where I've been since day one of the project. Before that I worked at OLX, KUDO, Auto1 and eZ Systems. Here I write about what I've learned in practice: JavaScript, TypeScript, React, CSS and frontend architecture. I've also spoken at conferences across Poland and Europe. Got a question or an idea for a post? Let me know!