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.