Kurs HTML

Lekcja 7.6: Grupowanie kolumn (<colgroup>, <col>)

Strona główna > Rozdział 7: Tabele > Grupowanie kolumn (<colgroup>, <col>)

Strukturalne i stylistyczne grupowanie kolumn

Podobnie jak wiersze można grupować za pomocą <thead>, <tbody> i <tfoot>, HTML pozwala również na grupowanie kolumn tabeli. Służą do tego znaczniki <colgroup> i <col>.

Głównym celem grupowania kolumn jest możliwość zdefiniowania wspólnych atrybutów lub stylów dla jednej lub więcej kolumn bez konieczności dodawania ich do każdej komórki w tych kolumnach. Upraszcza to kod i ułatwia zarządzanie stylami.

Znacznik <colgroup>

Znacznik <col>

Sposoby użycia <colgroup> i <col>

1. Użycie <colgroup> z atrybutem `span` (bez <col>)

Można zdefiniować style dla grupy kolumn bezpośrednio w <colgroup>, używając atrybutu span do określenia liczby kolumn w grupie.

<table class="basic-table">
  <caption>Stylizacja za pomocą colgroup</caption>
  <colgroup span="2" style="background-color: #f0f8ff;"></colgroup> <!-- Pierwsze dwie kolumny -->
  <colgroup style="background-color: #fff0f5;"></colgroup> <!-- Trzecia kolumna -->
  <thead>
    <tr><th>A</th><th>B</th><th>C</th></tr>
  </thead>
  <tbody>
    <tr><td>1</td><td>2</td><td>3</td></tr>
    <tr><td>4</td><td>5</td><td>6</td></tr>
  </tbody>
</table>
Stylizacja za pomocą colgroup
ABC
123
456

W tym przykładzie pierwszy <colgroup> z span="2" stosuje tło do pierwszych dwóch kolumn, a drugi <colgroup> (domyślnie span="1") stosuje inne tło do trzeciej kolumny.

2. Użycie <colgroup> zawierającego znaczniki <col>

Jest to bardziej elastyczne podejście, pozwalające definiować style lub atrybuty dla poszczególnych kolumn lub mniejszych grup kolumn wewnątrz <colgroup>.

<table class="basic-table">
  <caption>Stylizacja za pomocą col</caption>
  <colgroup>
    <col style="background-color: #f0f8ff; width: 100px;"> <!-- Pierwsza kolumna -->
    <col span="2" style="background-color: #fff0f5;"> <!-- Druga i trzecia kolumna -->
  </colgroup>
  <thead>
    <tr><th>Produkt</th><th>Cena Netto</th><th>Cena Brutto</th></tr>
  </thead>
  <tbody>
    <tr><td>A</td><td>100</td><td>123</td></tr>
    <tr><td>B</td><td>200</td><td>246</td></tr>
  </tbody>
</table>
Stylizacja za pomocą col
ProduktCena NettoCena Brutto
A100123
B200246

Tutaj pierwszy <col> definiuje styl i szerokość dla pierwszej kolumny, a drugi <col> z span="2" definiuje styl dla drugiej i trzeciej kolumny.

Jakie style można stosować?

Znaczniki <colgroup> i <col> pozwalają na efektywne stosowanie tylko ograniczonego zestawu właściwości CSS do kolumn. Najważniejsze z nich to:

Inne właściwości CSS, takie jak color, font-weight, text-align, nie mogą być stosowane bezpośrednio do <col> lub <colgroup>. Aby je zastosować do komórek w danej kolumnie, należy użyć bardziej zaawansowanych selektorów CSS (np. selektora N-tej kolumny) lub nadać klasy komórkom w tej kolumnie.

<colgroup> a dostępność (scope="colgroup")

Znacznik <colgroup> może być również używany w kontekście dostępności. Jeśli nagłówek <th> opisuje całą grupę kolumn zdefiniowaną przez <colgroup>, można użyć scope="colgroup" w tym nagłówku.

<table class="basic-table">
  <colgroup span="2"></colgroup>
  <colgroup span="2"></colgroup>
  <thead>
    <tr>
      <th colspan="2" scope="colgroup">Dane Osobowe</th>
      <th colspan="2" scope="colgroup">Dane Kontaktowe</th>
    </tr>
    <tr>
      <th scope="col">Imię</th><th scope="col">Nazwisko</th>
      <th scope="col">Email</th><th scope="col">Telefon</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Jan</td><td>Kowalski</td>
      <td>j.k@example.com</td><td>123-456-789</td>
    </tr>
  </tbody>
</table>

Zadanie praktyczne (z rozwiązaniem)

Zadanie: Stwórz tabelę 3x3. Użyj <colgroup> i <col>, aby nadać pierwszej kolumnie tło jasnoniebieskie, a pozostałym dwóm kolumnom tło jasnozielone. Ustaw szerokość pierwszej kolumny na 150px.

Rozwiązanie:

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Grupowanie Kolumn - Zadanie</title>
    <style>
        table, th, td {
            border: 1px solid #ccc;
            border-collapse: collapse;
            padding: 8px;
            text-align: center;
        }
        caption {
            margin-bottom: 10px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <h1>Tabela z grupowaniem kolumn</h1>
    <table>
        <caption>Przykład stylizacji kolumn</caption>
        <colgroup>
            <col style="background-color: lightblue; width: 150px;"> <!-- Pierwsza kolumna -->
            <col span="2" style="background-color: lightgreen;"> <!-- Druga i trzecia kolumna -->
        </colgroup>
        <thead>
            <tr>
                <th>Kolumna 1</th>
                <th>Kolumna 2</th>
                <th>Kolumna 3</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>A1</td><td>A2</td><td>A3</td>
            </tr>
            <tr>
                <td>B1</td><td>B2</td><td>B3</td>
            </tr>
            <tr>
                <td>C1</td><td>C2</td><td>C3</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

Dodatkowe zadania do samodzielnego wykonania:

  1. Stwórz tabelę 4x4 i użyj <colgroup> z atrybutem span, aby nadać styl dwóm pierwszym kolumnom, a następnie inny styl dwóm kolejnym.
  2. W tabeli 3x3 użyj trzech znaczników <col>, aby nadać każdej kolumnie inną szerokość i inny kolor tła.
  3. Spróbuj zastosować właściwość text-align do znacznika <col> i sprawdź, czy zadziała (nie powinna).

Najczęściej zadawane pytania

Do czego służą <colgroup> i <col>?

Służą do grupowania kolumn tabeli, głównie w celu zastosowania wspólnych stylów (jak szerokość, tło) lub atrybutów do całych kolumn bez modyfikowania każdej komórki z osobna.

Gdzie umieścić <colgroup>?

Znacznik <colgroup> umieszcza się wewnątrz <table>, po ewentualnym <caption>, a przed <thead>, <tbody>, <tfoot> i <tr>.

Jak zdefiniować style dla wielu kolumn naraz?

Można użyć atrybutu span="N" w znaczniku <colgroup> lub <col>, aby zastosować dany styl do N kolejnych kolumn.

Jakie style CSS można stosować do kolumn za pomocą <col>?

Główne wspierane właściwości to width, background-*, border i visibility. Właściwości dotyczące tekstu (jak color, text-align, font-weight) zazwyczaj nie działają, gdy są stosowane do <col>.

Czy <colgroup> jest ważny dla dostępności?

Sam <colgroup> ma mniejsze znaczenie niż np. <thead> czy <th> ze scope. Jednak może być używany w połączeniu z scope="colgroup" w nagłówkach <th>, aby wskazać, że nagłówek dotyczy grupy kolumn.