TablesNG usuwa 72 błędy Chromium, aby zapewnić lepszą interoperacyjność

TablesNG jest dostępne w wersji Chromium 91 i naprawia mnóstwo błędów, które od lat są częścią platformy internetowej. Te aktualizacje poprawią zgodność przeglądarek w ramach inicjatywy #Compat2021 oraz ułatwią korzystanie z tabel na platformie internetowej. Niektóre z najczęstszych problemów to liczba wierszy position: sticky, geometria subpixel i prawidłowe zwijanie obramowania.

TabelaNG

TablesNG to wieloletni projekt, którego celem jest całkowite przeprojektowanie sposobu renderowania tabel w internecie. Projekt jest prowadzony przez programistę Chrome Aleksa Totica. Tabele to szczególny obszar, w którym występują problemy ze względu na ich historię.

Elementy tabeli

Tabele zostały dodane do HTML w 1994 r., a potem przez wiele lat były używane jako główna metoda do tworzenia złożonych układów stron. Nadal można je znaleźć w internecie, chociaż obecnie służą głównie do wyświetlania danych tabelarycznych. Jednak zachowanie tabel w różnych przeglądarkach różni się znacznie, głównie z powodu niepełnej i nieprecyzyjnej specyfikacji tabel. Tabele były też wdrażane w przeglądarkach przed wprowadzeniem wielu funkcji CSS: ortogonalnych trybów pisania, position:relative, box-sizing, kontenerów flexbox i innych. Dlatego obsługa wielu z tych funkcji była niespójna.

Zrzut ekranu ze strony internetowej Space Jam
Innowacyjny układ tabeli, który wykorzystał Shannon Draper, tworząc stronę Space Jam.

Nowa specyfikacja, CSS Table Module Level 3, została napisana po tym, jak w 2018 r. w Edge ponownie zaimplementowano tabele. TablesNG to nowa architektura, która ma nie tylko stosować się do nowej specyfikacji, ale też eliminować wiele niespójności w tabelach. Oto niektóre z najbardziej widocznych zmian:

  • Włącz przyklejone pozycjonowanie w wierszach w przypadku długich tabel, które przewijają się.
  • Korygowanie wyrównania z geometrią subpikselową i obramowaniem tabeli.
  • Ulepszone malowanie tła i obramowania.

position: sticky wierszy

Jednym z najczęstszych próśb i najbardziej frustrujących kwestii związanych ze stylami tabel w ubiegłych wersjach było brak obsługi position: sticky w wierszach. Ta funkcja umożliwiłaby pozostawanie nagłówka tabeli na stronie podczas przewijania oraz zapewnienie kontekstu długim tabelom danych. Gdy przewiniesz nagłówek z niego i będziesz patrzeć na tabelę pełną liczb, łatwo zapomnieć, co oznaczają.

Nagłówek tabeli nie pozostaje w przyklejonej pozycji, mimo zastosowania atrybutu position: sticky do elementu <thead>.

Ten błąd występował tak długo, ponieważ position: sticky został określony dopiero po wprowadzeniu tabel HTML. Przed tą poprawką nagłówki z zamierzonymi wartościami position: sticky były po prostu konwertowane na position: static, ale teraz funkcji position: sticky można używać w dowolnym miejscu tabel: w nagłówkach (<thead>) lub w etykietach osi pionowej.

Nagłówek tabeli ma przyklejone położenie w Chromium w wersji 91 i nowszych. Zobacz demonstrację w Codepen.

Ulepszone malowanie obramowania i tła

Jednym z najstarszych błędów w tabelach jest we wrześniu 2008 roku. Został zgłoszony prawie zaraz po wydaniu Chrome i nigdy nie udało się go naprawić z powodu starej architektury tabeli. Problem dotyczy malowania stołu i zwinięcia obramowania.

Sposób wyświetlania tabel w kolejności z-index: komórki > wiersze > sekcje > tabele. Następnie są one wyświetlane w kolejności, w jakiej występują w DOM (Document Object Model), ale same komórki są wyświetlane w odwrotnej kolejności DOM, gdzie pierwsza komórka w tabeli jest najwyżej.

kolejność z-indexu tabel,

Problem polega na tym, że w starym sposobie wyświetlania tabeli obramowania należą do tabeli, a nie do komórki. Zwinięte obramowania są wypełniane, gdy tabela wypełnia pierwszy plan. Oznacza to, że pojedyncza komórka tabeli nie może mieć wielu obramowań:

prawidłowe i nieprawidłowe renderowanie tabeli
Po lewej: nieprawidłowe renderowanie tabeli przed wprowadzeniem TablesNG. Po prawej: prawidłowe wyświetlanie obramowania tabeli w TablesNG.

W przykładzie powyżej widać, że najbardziej lewy niebieski element nieprawidłowo nakłada się na pomarańczowy element w prawym dolnym rogu, ponieważ nie może mieć wielu obrzeży. W zmodyfikowanej architekturze problem został rozwiązany, a komórka z pomarańczową ramką jest prawidłowo nakładana na komórkę z niebieską ramką, co pozwala drugiej przerwie w tabeli mieć zarówno niebieskie, jak i pomarańczowe linie ramki.

Ten błąd został już naprawiony w Chromium i Firefoksie.

Geometria poniżej piksela (wyrównanie tabeli)

Dopasowanie pikseli w tabelach to kolejny problem z interoperacyjnością, który został rozwiązany w TablesNG. Wcześniej starszy mechanizm zawsze zaokrąglał wartości graficzne do piksela. Oznaczało to, że podczas powiększania i pomniejszania strony elementy się przesuwały, co powodowało problemy z wyrównaniem. TablesNG rozwiązuje te problemy z wyrównaniem.

Zmiana architektury sieci

Zespół Chrome nie tylko wprowadził nowe funkcje, aby zwiększyć możliwości tworzenia stron internetowych, ale także ciężko pracował nad ulepszeniem istniejących interfejsów API oraz ich zgodności. TablesNG to tylko jeden z wielu projektów zmian architektury, podjętych przez ten zespół w ciągu ostatnich 8 lat. Inne, choć nie wszystkie, projekty to:

  • LayoutNG: od podstaw przebudowane wszystkie algorytmy układu, aby znacznie zwiększyć niezawodność i przewidywalność działania.
  • BlinkNG: systematyczne oczyszczanie i refaktoryzacja silnika renderowania Blink w jasno oddzielone etapy potoku. Umożliwia to lepsze buforowanie, większą niezawodność i możliwość ponownego wywołania funkcji opóźnionego renderowania, takich jak content-visibilityzapytania dotyczące kontenera.
  • GPU Raster Everywhere: długoterminowe wysiłki mające na celu wdrożenie tworzenia obrazów przez GPU na wszystkich platformach, o ile to możliwe.
  • Przewijanie i animacje w wątku: długoterminowe działania mające na celu przeniesienie wszystkich animacji dotyczących przewijania i animacji niewywołujących zmian w układzie do wątku kompozytora.

Wkrótce podamy więcej informacji o tych i innych ulepszeniach.