CSS

/*….*/ - komentarze w CSS

Style są kaskadowe – dziedziczą właściwości

Sposoby dodawania styli:

-dodwanie inline – wewnątrz taga

-dodawanie w sekcji <style> przed zamknięciem <head>

-jw., ale przez umieszczanie tu linku do pliku, w którym trzymamy całe ostylowanie

SKŁADNIA:

1.

< nazwa taga + style = ”klucz:wartość”;> </zamknięcie taga>

<p style = background-color:, color:, font-family:, font-size:, font-weight:, padding: …px, margin: … px > </p>(pary  klucz:wartość, każdy w nowej linii, zamknięty średnikiem)

2.

nazwa taga, nazwa taga{”klucz: wartość; klucz: wartość;”} np.

body {”color: red; ”}

(może być wicej tagow)

3.

kropka moja nazwa klasy np. .tablestyle1

W tagu w HTML piszemy < p class = "nazwa klasy nazwa klasy (może być ich więcej)";> </p>

4.

# nazwa elemntu id {”klucz: wartość; klucz: wartość; itd.”}


SELEKTORY:

typów – zmienia wg typu taga,

struktury np. strong, em

klas – wybiera wszystkie elementy danej klasy

po id-zmienia konkretny element po unikalnym id

UWAGA JEST TEŻ SELEKTOR UNIWERSALNY – działający na wszystkie elementy:

*{….} (zaczyna od przypisania się do taga dotyczącego języka) – ustawia się go na początku jako punkt wyjścia do kolejnych zmian, można też użyć tego zapisu jako resetu zapisanych styli – zresetuje domyślne ustawienia przeglądarki

UWAGA: najważniejsze będą: style inline, potem inne w pliku, potem zewnętrzne,

Style inline używa się rzadko, bo nie są reużywalne

!Important – dodane na końcu stylu wymusza zmianę, nadaje ważność,

selector {
    właściwość: wartość !important;
}

Kolejność ostylowywanych elementów w tagu body nie ma znaczenia (?)

Można np. klasami ostylować box (span jest inline, nie rozpycha się, a box tak);

box ma atrybuty: width, height, backgroud-color, border: 2 px, solid, darkblue


PSEUDOKLASY

/*
:hover (po najechaniu), 
:active (podczas kliknięcia), 
:focus (ma fokus), 
:visited (odwiedzony link), 
:link (nieodwiedzony link), 
:first-child (pierwszy dziecko), 
:last-child (ostatni dziecko), 
:nth-child(n) (n-te dziecko), 
:not() (negacja). Pseudo-elements tworzą i stylują części elementu: 
::before (przed treścią), ::after (po treści), 
::first-line (pierwsza linia), 
::first-letter (pierwsza litera), 
::selection (zaznaczony tekst).

Pseudoklasy i pseudoelementy pozwalają reagować na zachowanie użytkownika (np. kliknięcie, najechanie myszą) albo stylować konkretne fragmenty elementu (np. pierwszą literę, zaznaczony tekst). Pseudoklasa w CSS automatycznie odnosi się do stanu elementu w HTML.

PSEUDOKLASY opisują stan elementu lub jego pozycję w strukturze dokumentu.
Zawsze zaczynają się od jednego dwukropka :

:hover — po najechaniu kursorem myszy

Stosowana np. do przycisków, linków, obrazków.

:active — w momencie kliknięcia

Styl obowiązuje tylko w chwili naciskania przycisku myszy.

:focus — gdy element ma fokus (jest aktywny)

Dotyczy np. pola tekstowego, w które użytkownik kliknął lub przeniósł się tabulatorem.

:link — nieodwiedzony link

Dotyczy linków (<a href="...">), które jeszcze nie zostały kliknięte.

:visited — odwiedzony link

Dotyczy linków, które użytkownik już odwiedził.

Przeglądarka zapamiętuje historię klikniętych adresów i zmienia kolor zgodnie ze stylem.

:first-child — pierwszy element wśród rodzeństwa

Ustawia pogrubienie dla pierwszego elementu listy.

:last-child — ostatni element wśród rodzeństwa

Styluje ostatni element listy.

:nth-child(n) — n-ty element wśród rodzeństwa

Pozwala wybrać konkretny element (lub co któryś).

li:nth-child(2) { color: red; }         /* Drugi element */

li:nth-child(odd) { background: #eee; } /* Wszystkie nieparzyste */

li:nth-child(even){ background: #ddd; } /* Wszystkie parzyste */

:not(selector) — negacja

Wybiera wszystkie elementy, które NIE pasują do wskazanego selektora.

p:not(.important) {
  color: gray;
}

TU Wszystkie akapity bez klasy .important będą szare.


PSEUDOELEMENTY

Pseudoelementy pozwalają stylować część elementu, np. pierwszą literę lub tekst przed/po treści.
Zaczynają się od dwóch dwukropków :: (choć starsze przeglądarki akceptują też jeden :).

::before — zawartość przed treścią elementu/ ::after (po treści elementu)

Wstawia dodatkową treść na początku lub końcu (wtedy ::after) elementu.

p::before {

  content: "💬 ";

}

Doda ikonkę przed każdym akapitem.

::first-line — pierwsza linia tekstu

Styluje tylko pierwszą linię akapitu (zależną od szerokości okna).

::selection — zaznaczony tekst

Styluje tekst zaznaczony przez użytkownika (np. myszką).

Szybka ściąga:

Typ

Pseudoklasa / Pseudoelement

Co robi

🎯 Pseudoklasy

:hover

Najechanie myszką

:active

Kliknięcie elementu

:focus

Element ma fokus (np. input)

:link

Link nieodwiedzony

:visited

Link odwiedzony

:first-child

Pierwszy element wśród rodzeństwa

:last-child

Ostatni element

:nth-child(n)

N-ty element

:not()

Element, który nie spełnia warunku

Pseudoelementy

::before

Treść przed elementem

::after

Treść po elemencie

::first-line

Pierwsza linia tekstu

::first-letter

Pierwsza litera

::selection

Tekst zaznaczony przez użytkownika

INNE ZAAWANSOWANE SELEKTORY

A. Atrybutów

  • [attr], [attr=value], [attr~=value], [attr|=value], [attr^=value], [attr$=value], [attr*=value]

B. Relacyjne

  • A B, A > B, A + B, A ~ B, A || B
Typ selektoraPrzykładZnaczenie / Działanie
[attr]Wybiera wszystkie elementy, które mają atrybut attr, bez względu na jego wartość
[attr=value]Wybiera elementy, których atrybut attr ma dokładnie wartość value
[attr~=value]Wybiera elementy, których atrybut attr zawiera słowo value (oddzielone spacją)
[attr^=value]Wybiera elementy, których atrybut attr zaczyna się od value
[attr$=value]Wybiera elementy, których atrybut attr kończy się na value
[attr*=value]Wybiera elementy, których atrybut attr zawiera w sobie value
A > BWybiera elementy B, które są bezpośrednimi dziećmi elementu A
A + BWybiera element B, który bezpośrednio następuje po elemencie A (sąsiad)
A ~ BWybiera wszystkie elementy B, które następują po elemencie A w tym samym rodzicu
A B
Wybiera wszystkie elementy B będące potomkami (dowolny poziom) elementu A

przykłady:

h2 + p {..} pierwszy akapit po nagłówku

h3 ~ p wszystkie h3, które są w p

[disabled] {…} – styl dla wyłączonych elementów, tagów, które posiadają ten atrybut

[class* = ”btn”] {…} – wszystkie klasy, które zaczynają się od btn

operatory dopasowania części wartości atrybutu (można np. linki ostylować wg tego):

Składnia

Znaczenie

Przykład

[attr^="value"]

Wartość zaczyna się od "value"

[href^="https"] – linki zaczynające się od https

[attr$="value"]

Wartość kończy się na "value"

[href$=".pdf"] – linki kończące się na .pdf

[attr*="value"]

Wartość zawiera "value" w środku

[title*="ważne"] – elementy, których title zawiera słowo „ważne”

Bazowe selektory atrybutu:
 /* [attr] - ma atrybut */
        [disabled] {
            opacity: 0.5;
            cursor: not-allowed;
        }
        
        /* [attr="value"] - dokładna wartość */
        [type="text"] {
            border: 2px solid blue;
            padding: 5px;
        }

Zmienne w CSS (nazywane też custom properties) to wartości, które możesz zdefiniować raz, a potem wielokrotnie wykorzystywać w całym stylesheet. Działają podobnie jak zmienne w językach programowania – pozwalają uniknąć powtarzania kodu i ułatwiają zarządzanie stylami.

Zmienne tworzy się przy użyciu składni:

--nazwa-zmiennej: wartość;

A żeby użyć zmiennej, korzystasz z funkcji:

var(--nazwa-zmiennej);

Gdzie definiować zmienne?

Najczęściej w :root — dzięki temu są dostępne globalnie:

:root {
--primary-color: #3498db;
--font-size-base: 16px;
--padding-standard: 1rem;
}

:root = najwyższy element dokumentu (html), ma największą specyficzność dla zmiennych i pozwala na łatwe zarządzanie stylami całej strony.

Zmienne w CSS pozwalają:

nie powtarzać kolorów/paddingów/fonts,

łatwo modyfikować wygląd całej strony,

tworzyć jasny/ciemny motyw,

dynamicznie zmieniać style z poziomu JavaScript.

można je nadpisywać lokalnie w konkretnej klasie stylu


CZCIONKI cz.1

Font-family: to lista czcionek w kolejności preferencji, rozdzielona przecinkami (przeglądarka używa pierwszej dostępnej czcionki), jeżeli nazwa zawiera spacje – musi być ujęta w cudzysłów

Czcionki serif-font – z ozdobnikami, sans-serif-font – bez ozdobników, monospace-font – każda litera ma tą samą szerokość

Font-size: 16 px – możemy podawać w px, jako mnożnik em lub rem (mnożenie wielkości bazowej rodzica lub root (<html>) lub w procentach – względem rodzica

Minimalna grubość:100, max.900; nie każda czcionka ma pełną gamę grubości

Porównanie em vs rem

Cecha

em

rem

Odnosi się do

czcionki rodzica

czcionki elementu <html>

Zagnieżdżenie

Może się „mnożyć”

Zawsze stały

Użycie

Lokalnie, wewnątrz komponentów

Globalnie, spójny rozmiar na całej stronie

Przykład

1.5em (zależny)

1.5rem (stały)

Grubość czcionki: font-weight: normal(lub 400), bold(lub 700), leighter (względem rodzica)

Styl czcionki: font-style: normal, italic

Wysokość linii/interlinia: line-hight:1.2 (ciasno),1.6 (normalnie),2 (luźne)

Fonty możemy ściągnąć lub linkować i nazywać rodzinę fontu

  1. Wszystkie właściwości dotyczące fontów w CSS
WłaściwośćOpis
fontSkrót do ustawiania kilku właściwości czcionki naraz.
font-familyKrój pisma (np. Arial, serif, custom fonts).
font-sizeRozmiar czcionki (px, em, rem itd.).
font-weightGrubość czcionki (normal, bold, 100–900).
font-styleStyl czcionki (normal, italic, oblique).
font-variantWarianty stylistyczne (np. small-caps).
font-stretchRozciągnięcie czcionki (condensed, expanded lub procenty).
font-synthesisCzy przeglądarka może syntetycznie wygenerować bold/italic.
font-kerningWłączanie kerningu (auto, normal, none).
font-feature-settingsWłączanie funkcji OpenType (np. "liga", "smcp").
font-variation-settingsUstawienia osi dla fontów zmiennych (variable fonts).
line-heightWysokość linii tekstu.
letter-spacingOdstęp między literami.
word-spacingOdstęp między słowami.
text-renderingOptymalizacja renderowania tekstu (auto, optimizeLegibility itd.).
font-optical-sizingAutomatyczne dopasowanie optyczne w variable fonts.
font-size-adjustDopasowanie wysokości x-liter do rozmiaru czcionki.

Zapisywanie kolorów

HEX, RGB (czrwony, zielony, niebieski) – do tego możemy dodać kanał (RGBA)alfa – przeźroczystość, dopisując wartość procentową do nazwy np.0.5 (tj 50 %)

HSL (hue,saturation,lightness czyli: odcień, nasycenie, jasność)

Kolory predefiniowane w CSS (jest cała gama, dobrze działająca niezależnie od kalibracji ekrnu)

W class= możemy wymieniać kilka stylów np. class= ”color-box keyward-named”

Atrybut background:

{ background color: tu numer HEX; padding: 100 px;}

{ background-image url:(‘tu link, info o szerokości, wysokości, wypełnieniu’); backround-repeat: no-repeat, padding:100 px;}

{ bacground:linear-gradient / radial-gradient (tu w którą stronę, wymieniamy kolory)

Właściwość

Znaczenie

 

background-image

obraz w tle (tutaj w formacie SVG zakodowany w URL)

 

background-repeat: no-repeat;

nie powtarzaj tła

 

background-position: center;

wyśrodkuj tło

 

background-size: cover;

dopasuj rozmiar, żeby wypełniało cały element


Dla background można używać funkcji:

linear-gradient()– gradient linearny, radial-gradient() – gradient promieniowy

np. background: linear-gradient(red, blue);

Elementy w tle można też rysować/programować jako svg bezpośrednio na stronie

.bg-cover { background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"><circle cx="50" cy="50" r="40" fill="%2327ae60"/></svg>') no-repeat center / cover; height: 200px; }

Dlaczego to się robi?

·        Nie trzeba ładować zewnętrznego pliku SVG → szybciej się wczytuje.

·        Przydatne do ikon, placeholderów, dekoracji.

·        Można łatwo zmieniać kolor SVG w kodzie CSS (wystarczy zmienić fill).


Jednostki wpływające na responsywność

Jednostka / funkcja

Znaczenie

Przykład

Efekt

vw

procent szerokości okna

3vw

3% szerokości viewportu

vh

procent wysokości okna

50vh

połowa wysokości ekranu

calc()

obliczenia w CSS

calc(100% - 40px)

pełna szerokość minus 40 px


Klasa

Co robi

Użycie

.unit-vw

font-size: 3vw;

elastyczny rozmiar tekstu względem szerokości ekranu

.unit-vh

height: 50vh;

elastyczna wysokość względem okna przeglądarki

.unit-calc

width: calc(100% - 40px);

obliczana szerokość (mieszanie jednostek)


Box Model składa się z 4 części:

  1. Content - rzeczywista treść (width × height)
  2. Padding - przestrzeń wewnętrzna wokół contentu
  3. Border - obramowanie wokół padding
  4. Margin - przestrzeń zewnętrzna wokół border

Obliczanie rozmiaru (content-box):
Całkowita szerokość = width + padding-left + padding-right + border-left + border-right
W tym przykładzie: 200 + 20 + 20 + 5 + 5 = 250px
Margin NIE jest wliczany do rozmiaru elementu!

--

Padding: wartości zapisujemy w px po przecinku, zgodnie z ruchem wskazówek zegara (góra, prawo, dolna, lewo); wpisanie jednej wartości = taki sam padding z każdej strony; możemy też ustawiać każdą wartość osobno np. padding-bottom (podobnie ustawia się marginesy i ramki - borders)

Margin – jest zawsze przeźroczysty – pokazauje tło

Margines auto – ustawia maksymalne marginesy dla elementu

--

„Collapse” marginesów (po polsku: zapadanie, łączenie marginesów) to mechanizm w CSS, w którym sąsiadujące marginesy pionowe łączą się w jeden, zamiast sumować swoje wartości.

Działa to tylko dla marginesów pionowych: margin-top i margin-bottom.

Margin collapse to:

  • mechanizm automatycznego łączenia marginesów pionowych,
  • występuje między sąsiadującymi blokami, rodzicem i dzieckiem oraz w pustych elementach,
  • wynikowy margines to wartość większego marginesu,
  • można temu zapobiec przez padding, border, overflow lub używanie flex/grid.

--

Standardowo boxy są wymiarowane do zawartości/contentu, ale możemy np. chcieć, żeby wymiarowanie boxu zawierało w sobie odstępy i border wtedy:

Box-sizing: border-box – jest bardziej przewidywalny jeśli chodzi o wymiary, warto go używać – łatwiej skalować np. cały obiekt względem rodzica czy szerokości okna

Warto na starcie strony zrobić tzw. reset – pod tytułem dokumentu w head:

Z bazowego resetu można zrobić sobie snippeta

*,
*::before,
*::after {
    margin: 0;
    padding: 0;
    box-sizing: border-box; /* pomaga w układach z paddingiem i szerokością */
}

Min-width, max-height

Min-height, max-height

- jeśli jakiś element (tj. boxu) ma się nie zmniejszać lub nie zwiększać bardziej niż… - pozwalają stworzyć przewidywalny layout

 W przeglądarce – zbadaj/F12 w computed można zobaczyć wzór naszego boxu

TABELA – Właściwości Box Model i ich wartości

WłaściwośćMożliwe wartościOpis
displayblock, inline, inline-block, flex, inline-flex, grid, inline-grid, table, inline-table, list-item, none, contents, run-in, flow-rootOkreśla sposób wyświetlania elementu.
positionstatic, relative, absolute, fixed, stickyOkreśla sposób pozycjonowania.
top / right / bottom / leftwartości długości (px, em, %), autoPrzesunięcia dla elementów pozycjonowanych.
z-indexliczba, autoKolejność nakładania elementów.
overflowvisible, hidden, scroll, auto, clipKontrola, co dzieje się z zawartością wychodzącą poza box.
overflow-xvisible, hidden, scroll, auto, clipNadpisuje overflow w osi X.
overflow-yvisible, hidden, scroll, auto, clipNadpisuje overflow w osi Y.
box-sizingcontent-box, border-boxKontroluje, czy padding i border wchodzą do wymiarów elementu.
widthdługości (px, em, %, vw), auto, min-content, max-content, fit-contentSzerokość elementu.
min-widthdługości, %, autoMinimalna szerokość.
max-widthdługości, %, noneMaksymalna szerokość.
heightdługości, %, auto, min-content, max-content, fit-contentWysokość elementu.
min-heightdługości, %, autoMinimalna wysokość.
max-heightdługości, %, noneMaksymalna wysokość.
margindługości (px, em), %, autoUstawia margines zewnętrzny.
margin-top / margin-right / margin-bottom / margin-leftdługości, %, autoPojedyncze marginesy.
paddingdługości (px, em), %Wewnętrzny odstęp od krawędzi.
padding- (4 strony)*długości, %Pojedyncze paddingi.
borderborder-width + border-style + border-colorSkrót dla obramowania.
border-widththin, medium, thick, długościGrubość obramowania.
border-stylesolid, dashed, dotted, double, groove, ridge, inset, outset, none, hiddenStyl obramowania.
border-colorkolor, transparentKolor obramowania.
border-radiusdługości (px, %)Zaokrąglenie narożników.
outlinepodobne do border, ale nie wpływa na rozmiarObramowanie zewnętrzne.
outline-stylejak border-styleStyl konturu.
outline-colorkolorKolor konturu.
outline-widthdługościGrubość konturu.
outline-offsetdługościOdstęp między obrysem a elementem.
box-shadownone, wartości cieni: offset-x offset-y blur spread colorCień elementu.
opacity01Przezroczystość.
visibilityvisible, hidden, collapseWidoczność bez usuwania miejsca elementu.

Wyjaśnienie wybranych:

overflow: auto;     /* Scroll gdy za dużo contentu */

- jeśli wcześniej oznaczymy maksymalną, nieprzekraczalną wysokość

Różnica Flex vs Grid — krótko:

CechaFlexboxGrid
Typ układu1D (jednowymiarowy)2D (dwuwymiarowy)
Pracuje naosi głównej i pobocznejkolumnach i wierszach
Idealny doułożenia elementów w liniibudowy całych layoutów
Rozmieszczenieautomatyczneprecyzyjne
Zmiana kolejnościbardzo łatwamożliwa
Obsługa przerwgapgap, row-gap, column-gap

TABELA: Flexbox — właściwości i wartości

WłaściwośćWartościCo robi?
displayflex, inline-flexWłącza Flexbox.
flex-directionrow, row-reverse, column, column-reverseKierunek osi głównej.
flex-wrapnowrap, wrap, wrap-reverseCzy elementy mają się łamać.
flex-flowskrót: direction + wrapPołączenie dwóch właściwości.
justify-contentflex-start, flex-end, center, space-between, space-around, space-evenlyWyrównanie na osi głównej.
align-itemsflex-start, flex-end, center, baseline, stretchWyrównanie na osi poprzecznej.
align-contentflex-start, flex-end, center, space-between, space-around, stretchWyrównuje w osi poprzecznej przy wielu liniach.
gapdługości (px, rem)Odstęp między elementami.
row-gapdługościOdstęp między wierszami.
column-gapdługościOdstęp między kolumnami.
orderliczbyKolejność elementów.
flex-growliczby (0–n)Jak bardzo element rośnie.
flex-shrinkliczbyJak bardzo się kurczy.
flex-basisauto, długościBazowy rozmiar przed podziałem przestrzeni.
flexskrót (grow shrink basis)Najczęściej flex: 1.
align-selfjak align-itemsNadpisuje wyrównanie tylko dla jednego elementu.

TABELA: GRID — właściwości i wartości

WłaściwośćWartościOpis
displaygrid, inline-gridWłącza Grid.
grid-template-columnsnp. 200px 1fr 2fr, repeat(3, 1fr)Definicja kolumn.
grid-template-rowsdługości, fr, repeatDefinicja wierszy.
grid-template-areasnazwy obszarówTworzy layout oparty o nazwy.
grid-areanazwa lub start–endPrzypisanie elementu do obszaru.
grid-columnstart / endRozciągnięcie elementu w kolumnach.
grid-rowstart / endRozciągnięcie elementu w wierszach.
grid-auto-columnsdługości, frKolumny tworzone automatycznie.
grid-auto-rowsdługości, frWiersze tworzone automatycznie.
grid-auto-flowrow, column, denseAutomatyczne rozmieszczanie elementów.
justify-itemsstart, end, center, stretchWyrównanie zawartości w komórkach (oś X).
align-itemsj.w.Wyrównanie w osi Y.
place-itemsskrót: align + justifyUłatwienie.
justify-contentstart, end, center, space-between, space-around, space-evenlyWyrównanie całej siatki w poziomie.
align-contentj.w.Wyrównanie całej siatki w pionie.
gapdługościOdstępy w gridzie.
row-gapdługościOdstęp między wierszami.
column-gapdługościOdstęp między kolumnami.

Kiedy używać Flexboxa, a kiedy Grida?

Potrzebujesz…Użyj FlexboxUżyj Grid
prostego układu w jednym rzędzie/kolumnie
centrowania elementów
skomplikowanego layoutu 2D
obszarów o stałych proporcjach
pełnej kontroli nad kolumnami i wierszami