9.7. Pochodzenie tła (background-origin)
Wprowadzenie: Względem czego pozycjonujemy tło?
W lekcji o background-position nauczyliśmy się, jak ustawiać pozycję obrazu tła. Właściwość background-position określa położenie obrazu względem pewnego **obszaru odniesienia** wewnątrz elementu.
Właściwość background-origin pozwala zdefiniować, **który obszar pudełka elementu** (box model) ma być tym obszarem odniesienia dla pozycjonowania tła.
Domyślnie, background-position jest liczona względem **padding-box**, czyli obszaru obejmującego zawartość (content) i wypełnienie (padding).
Wartości background-origin
Właściwość background-origin przyjmuje trzy główne wartości, odpowiadające obszarom modelu pudełkowego:
padding-box: (Domyślne) Pozycja tła (background-position) jest liczona względem lewego górnego rogu obszaru obejmującego zawartość i wypełnienie. Obraz tła zaczyna się na krawędzi paddingu.border-box: Pozycja tła jest liczona względem lewego górnego rogu obszaru obejmującego zawartość, wypełnienie **oraz obramowanie**. Obraz tła zaczyna się na zewnętrznej krawędzi obramowania (pod nim).content-box: Pozycja tła jest liczona względem lewego górnego rogu obszaru **tylko zawartości** (content). Obraz tła zaczyna się na wewnętrznej krawędzi paddingu.
<div class="box origin-example padding-box-example">padding-box (domyślne)</div>
<div class="box origin-example border-box-example">border-box</div>
<div class="box origin-example content-box-example">content-box</div>
.origin-example {
width: 150px;
height: 100px;
padding: 20px;
border: 10px dashed red; /* Grube, przerywane obramowanie dla widoczności */
margin-bottom: 15px;
background-image: url("icon.png"); /* Mała ikona */
background-repeat: no-repeat;
background-color: lightyellow;
/* Ustawiamy pozycję na lewy górny róg obszaru odniesienia */
background-position: left top; /* lub 0% 0% */
}
.padding-box-example {
background-origin: padding-box;
/* Ikona zaczyna się na krawędzi paddingu (wewnątrz obramowania) */
}
.border-box-example {
background-origin: border-box;
/* Ikona zaczyna się na krawędzi obramowania (pod nim) */
}
.content-box-example {
background-origin: content-box;
/* Ikona zaczyna się na krawędzi obszaru content (wewnątrz paddingu) */
}
W powyższym przykładzie, mimo że wszystkie trzy pudełka mają background-position: left top;, ikona tła pojawi się w nieco innym miejscu w każdym z nich, ponieważ punkt (0,0), względem którego jest pozycjonowana, znajduje się gdzie indziej:
padding-box: Ikona w lewym górnym rogu, tuż przy wewnętrznej krawędzi czerwonego obramowania.border-box: Ikona w lewym górnym rogu, pod czerwonym obramowaniem (jej lewy górny róg pokrywa się z lewym górnym rogiem obramowania).content-box: Ikona w lewym górnym rogu obszaru treści, czyli przesunięta o szerokość paddingu (20px w prawo i 20px w dół) względem wewnętrznej krawędzi obramowania.
Interakcja z background-clip
Właściwość background-origin jest ściśle powiązana z background-clip (którą omówimy w następnej lekcji). background-origin określa, **gdzie zaczyna się** pozycjonowanie obrazu tła, podczas gdy background-clip określa, **do jakiego obszaru** tło (kolor lub obraz) jest rysowane (przycinane).
Domyślnie background-clip jest ustawione na border-box (tło rysowane jest pod obramowaniem), a background-origin na padding-box.
Pochodzenie wielu obrazów tła
Jeśli używasz wielu obrazów tła, możesz podać wiele wartości dla background-origin, oddzielonych przecinkami. Każda wartość odpowiada obrazowi na tej samej pozycji w background-image.
.multi-bg-origin {
background-image: url("icon1.png"), url("icon2.png");
background-repeat: no-repeat;
background-position: top left, bottom right;
background-origin: border-box, content-box; /* icon1 względem border-box, icon2 względem content-box */
border: 10px solid rgba(0,0,255,0.5);
padding: 30px;
height: 150px;
}
Zadania praktyczne
Zadanie 1 (z rozwiązaniem)
Stwórz element div z grubym obramowaniem i paddingiem. Ustaw obraz tła (no-repeat) i wypróbuj wszystkie trzy wartości background-origin (padding-box, border-box, content-box), obserwując, jak zmienia się pozycja obrazu ustawionego na top left.
Rozwiązanie:
Użyjemy kodu podobnego do przykładu z sekcji "Wartości background-origin".
HTML:
<div class="origin-test padding-origin">padding-box</div>
<div class="origin-test border-origin">border-box</div>
<div class="origin-test content-origin">content-box</div>
CSS:
.origin-test {
width: 180px; height: 120px;
padding: 25px;
border: 15px dotted green;
margin-bottom: 20px;
background-image: url("star.png"); /* Mała gwiazdka */
background-repeat: no-repeat;
background-position: top left;
background-color: #efe;
}
.padding-origin { background-origin: padding-box; }
.border-origin { background-origin: border-box; }
.content-origin { background-origin: content-box; }
Efekt: Gwiazdka w każdym pudełku pojawi się w innym miejscu względem zielonego obramowania, zgodnie z opisem w sekcji "Wartości background-origin".
Zadanie 2 (do samodzielnego wykonania)
Ustaw background-origin: content-box; i background-position: center center;. Gdzie pojawi się środek obrazu tła?
Zadanie 3 (do samodzielnego wykonania)
Ustaw background-origin: border-box; i background-position: 100% 100%;. Gdzie znajdzie się prawy dolny róg obrazu tła?
FAQ - Najczęściej zadawane pytania
Jaka jest domyślna wartość background-origin?
Domyślną wartością jest padding-box. Oznacza to, że jeśli nie ustawisz jawnie background-origin, pozycjonowanie tła (background-position) będzie się odbywać względem lewego górnego rogu obszaru obejmującego zawartość i padding.
Czy background-origin wpływa na background-color?
Nie, background-origin wpływa tylko na pozycjonowanie **obrazu tła** (background-image). Obszar, na którym rysowany jest kolor tła (background-color), jest kontrolowany przez właściwość background-clip.
Kiedy warto użyć border-box lub content-box?
border-box może być przydatne, jeśli chcesz, aby obraz tła zaczynał się dokładnie na krawędzi elementu, pod obramowaniem (np. dla cieni lub efektów wychodzących spod ramki). content-box jest użyteczne, gdy chcesz pozycjonować tło precyzyjnie względem samej treści, ignorując padding (np. ikona tła obok tekstu wewnątrz przycisku z dużym paddingiem).
Jak background-origin działa z background-attachment: fixed?
Gdy tło jest przypięte do viewportu (background-attachment: fixed), właściwość background-origin jest ignorowana. Pozycjonowanie odbywa się zawsze względem viewportu.