← Lekcje
CSS · lekcja 07

Style list i tabel

Listy i tabele robicie od dawna - dziś zmieniamy im wygląd CSS-em

  1. list-style-type, list-style-position - wygląd i miejsce punktorów listy
  2. Domyślny margines i wcięcie listy - i jak je zdjąć
  3. border-collapse - jedna linia obramowania zamiast podwójnej
  4. Padding komórek i naprzemienne tła wierszy tabeli
Rozgrzewka · 3 minuty

Trzy pytania z poprzedniej lekcji

  1. Czym różni się min-width od max-width?
  2. Jaki warunek musi spełniać pudełko, żeby margin: auto je wyśrodkowało?
  3. Ile wartości podajecie w box-shadow i co oznaczają?
Część 1 · list-style-type

Jaki znak stoi przed punktem?

list-style-type ustala, jaki znak pojawia się przed każdym elementem listy. Domyślnie lista nienumerowana (<ul>) dostaje wypełnione kółko (disc), a numerowana (<ol>) liczby od 1 (decimal). Wartość none usuwa punktor całkiem.

disc Mleko Chleb Jajka circle Mleko Chleb Jajka square Mleko Chleb Jajka decimal 1. Mleko 2. Chleb 3. Jajka none Mleko Chleb Jajka disc - wypełnione kółko (domyślne dla <ul>) decimal - liczby od 1 (domyślne dla <ol>) none - bez punktora, element zostaje listą w HTML

Ciekawostka z MDN: lista wartości list-style-type nie kończy się na disc, circle, square i decimal. CSS ma osobne systemy numeracji dla różnych krajów, na przykład japanese-informal (japońska numeracja) albo armenian (tradycyjna ormiańska), a część z nich wymaga zainstalowanej odpowiedniej czcionki, żeby dobrze się wyświetlić.

MDN: „disc - a filled circle (default value)” · „decimal - decimal numbers, beginning with 1” · „none - no item marker is shown” · developer.mozilla.org/docs/Web/CSS/list-style-type · ciekawostka: developer.mozilla.org/en-US/docs/Web/CSS/list-style-type
Część 2 · list-style-position

Punktor w linii czy przed nią?

list-style-position decyduje, gdzie stoi punktor względem tekstu elementu. outside (domyślne) stawia go przed wcięciem, poza tekstem. inside wsuwa go do środka - jeśli tekst zawinie się do drugiej linii, ta linia zaczyna się równo pod punktorem, nie pod pierwszą literą.

list-style-position: outside (domyślne) Krótki element Bardzo długi element, który zawija się do drugiej linii list-style-position: inside Krótki element Bardzo długi element, który zawija się do drugiej linii
MDN: „outside (the default value) makes bullets sit outside the list items” · „inside... the bullets will sit inside the lines” · developer.mozilla.org/docs/Learn_web_development/Core/Text_styling/Styling_lists
Część 3 · domyślny margines i skrót list-style

Skąd to wcięcie?

Przeglądarka sama dodaje listom odstęp: górny i dolny margin 16px oraz padding-left 40px (to wcięcie robi wyłącznie padding-left, nie margin). Żeby zdjąć kropki i wcięcie razem, ustawiacie oba: list-style: none; i padding-left: 0;. Trzy właściwości można też zapisać jednym skrótem list-style.

ul {
  list-style: square url("gwiazdka.png") inside;
}
/* kolejność dowolna; brakujące wartości = domyślne: disc, none, outside */
MDN: „<ul> and <ol> elements have a top and bottom margin of 16px (1em) and padding-left of 40px (2.5em)” · „you can use one, two, or all three [wartości list-style] (the default values used for the properties that are not included are disc, none, and outside)” · developer.mozilla.org/docs/Learn_web_development/Core/Text_styling/Styling_lists
Część 4 · border-collapse

Jedna linia obramowania czy dwie?

Gdy komórki tabeli mają obramowanie (border), domyślnie każda trzyma swoje własne - między sąsiednimi komórkami widać podwójną linię z odstępem (separate, wartość domyślna). border-collapse: collapse; sprawia, że sąsiednie obramowania łączą się w jedną wspólną linię.

border-collapse: separate (domyślne) A1B1 A2B2 border-collapse: collapse A1B1 A2B2
MDN: „A border-collapse value of collapse is standard best practice for any table styling effort” · „separate - adjacent cells have distinct borders” (wartość domyślna) · „collapse - adjacent cells have shared borders” · developer.mozilla.org/docs/Web/CSS/border-collapse
Część 5 · padding komórek i naprzemienne tła

Żeby tabela dała się czytać

Domyślnie tekst w komórce styka się z linią obramowania - dodajecie padding do th i td, żeby dane miały miejsce do oddychania. Naprzemienne tło wierszy (tzw. zebra) robi selektor :nth-child(odd) - wybiera co drugi wiersz, licząc od pierwszego.

th, td { padding: 0.6em; }

tbody tr:nth-child(odd) {
  background-color: #dddddd;
}
MDN: „giving your header and cell content some space to breathe, making the table look a lot more legible” · „odd is shorthand for 2n+1 (this will select the 1st, 3rd, 5th rows, etc.)” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Tables
CSS · egzamin

Tak pytają na egzaminie

1. Zapis CSS postaci ul { list-style-image: url('rys.gif'); } sprawi, że na stronie internetowej

  1. punktorem listy nienumerowanej będzie rys.gif
  2. rys.gif będzie stanowił ramkę dla listy nienumerowanej.
  3. wyświetli się rysunek rys.gif jako tło listy nienumerowanej.
  4. każdy z punktów listy będzie miał osobne tło pobrane z grafiki rys.gif

2. Który zapis td { border: 1px solid black; padding: 15px; height: 40px; vertical-align: bottom; } sformatował podaną komórkę tabeli (pozostałe własności domyślne)?

dane w tabeli Komórka 1. dane w tabeli Komórka 2. dane w tabeli Komórka 3. dane w tabeli Komórka 4.
CKE, E.14, styczeń 2017, zadanie 10 · CKE, EE.09, czerwiec 2026, zadanie 31
Ćwiczenie · przy komputerze · 20 minut

Ćwiczenie: style list i tabel

  1. W style.css zdejmij kropki z listy menu: list-style: none; i cofnij domyślne wcięcie padding-left: 0;.
  2. Dla tabeli na swojej stronie ustaw border-collapse: collapse; i padding na th/td.
  3. Dodaj naprzemienne tło wierszy: tbody tr:nth-child(odd) { background-color: ...; }.
  4. Zapisz, F5, sprawdź menu i tabelę.

Pamiętajcie: lista bez kropek (list-style: none) w HTML wciąż jest listą <ul> - zmienia się tylko wygląd, nie znaczenie elementu.

Pytania kontrolne

Trzy pytania na koniec

  1. Jaka jest różnica między list-style-position: inside a outside?
  2. Które dwie właściwości musicie ustawić, żeby lista straciła i kropki, i wcięcie?
  3. Co zmienia border-collapse: collapse w wyglądzie tabeli?

To tyle na dziś: style list i tabel gotowe, na następnej lekcji stylizacja formularza.

Rozkład: Listy, tabele i formularze 1/2 → 2/2
Z realnych wdrożeń

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Jeden punktor list-style-type na całą listęListy menu prawie zawsze list-style: none, bo wygląd menu robi się przez display: flex/tło/obramowanie, nie przez punktorynadal w użyciu
list-style-image z pojedynczym plikiemWłasne ikony jako tło (background-image) na elemencie listy - więcej kontroli nad rozmiarem i pozycją niż daje list-style-imagezastępowane
Jeden border-collapse: collapse na całą tabelęTo samo, plus position: sticky na nagłówku tabeli, żeby został widoczny przy przewijaniu długich list danychrozbudowane
Naprzemienne tła :nth-child(odd)To samo w panelach administracyjnych i arkuszach danych - ułatwia czytanie wiersza wzrokiem bez gubienia się w kolumnachnadal w użyciu