Napiszemy sobie 2 tzw. overlays na obrazku, w dodatku żeby było trudniej, obrazek będzie linkiem, zaś żeby było ciekawiej, obrazek będzie również absolutnie pozycjonowany. Do dzieła.
Początkowy setup naszego linko-obrazka z pozycją absolute
Obrazek-link, czyli samozamykający się tag <img /> wewnątrz tagu <a>. Do tego wrapper i spany na overlaye, na razie zakomentowane:
<div class="image-wrapper">
<!--<span class="image-source">stocksomething.com</span>
<span class="image-2words">wielki smok atakuje</span> -->
<a href="#"><img src="./codelinelogo.png" alt=""></a>
</div>
Teraz reset stylów CSS, coś, co robimy zawsze (można też w przyszłości dołożyć elementy before i after do naszej gwiazdki, ale na razie tego nie potrzebujemy):
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
Pozycjonujemy absolutnie nasz wrapper na samym środku strony – powinniśmy już wiedzieć jak:
.image-wrapper {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 1000px;
}
Element <a> ma być elementem blokowym i zajmować 100% swojego wrappera:
.image-wrapper a {
display: block;
width: 100%;
height: 100%;
text-decoration: none;
}
Element img ma zajmować 100% szerokości swojego rodzica, czyli <a>:
.image-wrapper img {
width: 100%;
}
Jeżeli teraz podejrzymy devtoolsy, to zobaczymy, że <img> ma taką dziwną pustą linię, której nie wypełnia, a którą <a> zajmuje. Możemy nadać kolory, aby to lepiej zauważyć.
Pytanie co z tym zrobić. Oszczędzę czytelnikowi szukania i kombinowania:
.image-wrapper img {
width: 100%;
vertical-align: bottom;
}
Teraz jesteśmy gotowi na nasze overlaye!
Mały absolutny overlay po prawej – źródło obrazka
Odkomentujemy sobie linijkę ze spanem, który odpowiada za źródło obrazka w naszym kodzie HTML:
<div class="image-wrapper">
<span class="image-source">stocksomething.com</span>
<!-- <span class="image-2words">wielki smok atakuje</span> -->
<a href="#"><img src="./codelinelogo.png" alt=""></a>
</div>
Pozycjonujemy go absolutnie (względem rodzica, jako że rodzic, jakim jest image-wrapper sam ma pozycję absolutną, czyli inną niż static, nasze atrybuty top, left, right i bottom będą się odnosiły do niego, nie strony głównej:
.image-source {
background: rgba(0,0,0,.7);
color: #ccc;
display: inline-block;
font-size: 11px;
font-family: helvetica;
font-weight: 300;
padding: 5px 8px;
position: absolute;
bottom: 0;
right: 0;
}
W elemencie pozycjonowanym absolutnie bottom i right ustawione na 0 oznaczają zero odstępu od prawego dolnego rogu. Pozycjonowanie absolutne jest względem rodzica, który ma pozycję inną niż static (albo głównego okna, gdy takiego rodzica brak).
To jest kluczowe, aby zapamiętać – nie ma żadnej niepisanej zasady, że aby pozycjonować absolutnie względem rodzica rodzic musi mieć position relative. Relative czyli relatywna, w tym wypadku byłaby o 0 przesunięta od dołu i prawej krawędzi miejsca, w której normalnie by występowała.
Relative często dajemy, gdy nie chcemy wcale elementu przestawiać nigdzie, ale chcemy mu dzieci poprzestawiać absolutnie względem niego. Tutaj akurat mamy inną sytuację – rodzic pozycjonowany absolutnie względem strony, dzieci względem rodzica.
Jak najbardziej można. Idziemy dalej.
Lewy dolny overlay – „newsowy” overlay
Pora odkomentować drugi span i absolutnie względem rodzica wypozycjonować (zaś rodzic jest absolutnie pozycjonowany względem głównego okna):
<div class="image-wrapper">
<span class="image-source">stocksomething.com</span>
<span class="image-2words">wielki smok atakuje</span>
<a href="#"><img src="./codelinelogo.png" alt=""></a>
</div>
Skoro nasz wrapper ma pozycję absolute (czyli pozycję inną niż static) to gdy jego dziecku nadamy absolute, dziecko pozycjonujemy względem rodzica. Względem rodzica zaś to left i bottom na 0 oznacza lewy dolny róg i tam chcemy nasz „newsowy” overlay umieścić:
.image-2words {
background: rgba(197, 91, 97, .7);
color: white;
display: inline-block;
font-size: 16px;
font-family: helvetica;
font-weight: bold;
text-transform: uppercase;
padding: 12px 14px;
letter-spacing: 1px;
position: absolute;
bottom: 0;
left: 0;
}
Jest tu trochę kosmetyki, reszta to pozycjonowanie absolutne, które już teraz powinniśmy całkiem nieźle rozumieć. Pozycjonowanie absolutne dzieci odbywa się względem non-static rodzica albo strony głównej – to pierwsze, co mamy zapamiętać.
Drugie to vertical align i jak budować linki z obrazkiem nadające się do robienia overlayów. Cóż, to przedstawiłem na początku artykułu.
Mogło nam to „vertical align” jednak umknąć, a jest to podchwytliwa rzecz i warto to raz na zawsze zapamiętać, więc polecam wyłączyć to w devtoolsach albo wykomentować i zobaczyć, jak pięknie nam się wszystko popsuje bez tego:
.image-wrapper img {
width: 100%;
/*vertical-align: bottom; BEZ TEGO BĘDZIE SŁABO*/
}
Do następnego razu!