Typowany model obiektowy CSS (OM)
Pracuj z wartościami CSS jako typowanymi obiektami JavaScript zamiast ciągami znaków, używając interfejsu CSS Typed OM API.
Typowany model obiektowy CSS (OM) to bezpłatna lekcja CSS Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CSS Academy zawiera 4 lekcji w sumie.
Czym jest CSS Typed OM
CSS Typed Object Model (Typed OM) jest częścią projektu CSS Houdini. Udostępnia wartości CSS jako typowane obiekty JavaScript zamiast zwykłych ciągów znaków, umożliwiając szybsze modyfikowanie, bardziej rozbudowane operacje arytmetyczne i bezpieczeństwo typów.
Stare a nowe podejście
Tradycyjny CSSOM zwraca ciągi znaków, natomiast Typed OM zwraca obiekty zawierające informacje o typie:
<p id="demo" style="opacity: 0.5;">Typed OM demo element</p>
<p id="output">Reading style values…</p>
<script>
const demo = document.getElementById('demo');
const output = document.getElementById('output');
// Old CSSOM (string)
const oldValue = demo.style.opacity; // '0.5'
// CSS Typed OM (typed object)
const typed = demo.computedStyleMap().get('opacity');
// CSSUnitValue { value: 0.5, unit: 'number' }
output.textContent = 'old (string): "' + oldValue + '" | typed OM: value=' + typed.value + ', unit=' + typed.unit;
</script>
computedStyleMap()
Uzyskaj obliczone wartości typowane dla dowolnego elementu:
<div id="box">400px wide box</div>
<p id="output">Reading computed width…</p>
<script>
const box = document.getElementById('box');
const output = document.getElementById('output');
const styles = box.computedStyleMap();
const width = styles.get('width');
console.log(width.value); // 400
console.log(width.unit); // 'px'
output.textContent = 'width.value = ' + width.value + ', width.unit = "' + width.unit + '"';
</script>
attributeStyleMap dla stylów wbudowanych
Ustawiaj i pobieraj typowane wartości stylów wbudowanych za pomocą element.attributeStyleMap:
<div id="box">Inline-styled box</div>
<p id="output">Setting styles via attributeStyleMap…</p>
<script>
const box = document.getElementById('box');
const output = document.getElementById('output');
box.attributeStyleMap.set('opacity', CSS.number(0.5));
box.attributeStyleMap.set('margin-top', CSS.px(16));
const opacity = box.attributeStyleMap.get('opacity');
output.textContent = 'opacity.value = ' + opacity.value;
</script>
Metody fabryczne CSS do wartości liczbowych
Przestrzeń nazw CSS udostępnia metody fabryczne do tworzenia wartości typowanych:
<div id="box">Factory methods demo</div>
<p id="output">Computing…</p>
<script>
const output = document.getElementById('output');
const px = CSS.px(100); // CSSUnitValue(100, 'px')
const percent = CSS.percent(50); // CSSUnitValue(50, 'percent')
const em = CSS.em(1.5); // CSSUnitValue(1.5, 'em')
const number = CSS.number(0.5); // CSSUnitValue(0.5, 'number')
const deg = CSS.deg(180); // CSSUnitValue(180, 'deg')
output.textContent = [px, percent, em, number, deg]
.map(v => v.value + v.unit).join(', ');
</script>
Operacje arytmetyczne na wartościach typowanych
CSSMathValue umożliwia wykonywanie operacji matematycznych CSS w JavaScript bez konkatenacji ciągów znaków:
<div id="box">Math on typed values</div>
<p id="output">Calculating…</p>
<script>
const output = document.getElementById('output');
const width = CSS.px(100).add(CSS.percent(10));
// Equivalent to calc(100px + 10%)
const margin = CSS.px(16).mul(2);
// 32px
output.textContent = 'width = ' + width.toString() + ' | margin = ' + margin.value + margin.unit;
</script>
Korzyści wydajnościowe
Typed OM jest znacznie szybszy niż oparty na ciągach znaków CSSOM przy częstym modyfikowaniu wartości (np. w klatkach animacji). Nie trzeba parsować wartości z ciągów znaków przy każdym dostępie — są już uporządkowanymi obiektami.
Typy CSSStyleValue
Typy wartości Typed OM obejmują:
CSSUnitValue: liczba + jednostka (100px)CSSKeywordValue: słowo kluczowe (auto, none)CSSImageValue: obraz (url())CSSMathValue: wyrażenia calcCSSColorValue: wartości kolorów (eksperymentalne)
Typed OM w animacjach
W Web Animations API używaj wartości typowanych, aby uzyskać precyzyjniejszą kontrolę nad animacjami:
<div id="box">Animated via Typed OM</div>
<script>
const box = document.getElementById('box');
box.animate(
[{ opacity: CSS.number(0) }, { opacity: CSS.number(1) }],
{ duration: 300, fill: 'forwards' }
);
</script>
Obsługa przeglądarek
CSS Typed OM (Level 1) jest obsługiwany w Chrome 66+ i Edge 79+. Obsługa w Firefoksie i Safari jest częściowa lub wymaga włączenia flag. Przed użyciem w środowisku produkcyjnym sprawdź caniuse.com. Zakres API stale się powiększa.
Kiedy używać Typed OM
Używaj Typed OM, gdy:
- tworzysz Paint Worklets lub Layout Worklets CSS (jest wymagany)
- animujesz wiele elementów w każdej klatce za pomocą JavaScript
- tworzysz narzędzia CSS lub preprocesory
- potrzebujesz manipulować wartościami CSS z kontrolą typów
Szybkie sprawdzenie
Co zwraca element.computedStyleMap().get("width") w porównaniu z getComputedStyle(element).width?
Podsumowanie
CSS Typed OM zastępuje oparty na ciągach znaków CSSOM typowanymi obiektami JavaScript. Używaj computedStyleMap() do odczytu oraz attributeStyleMap do zapisywania stylów wbudowanych. Metody fabryczne CSS (CSS.px(), CSS.percent()) tworzą wartości typowane. API jest szybsze niż manipulowanie ciągami znaków i wymagane przez Paint Worklets oraz Layout Worklets.
Ucz się CSS dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 40
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Typowany model obiektowy CSS (OM)” jest bezpłatna?
Tak — pełny tekst „Typowany model obiektowy CSS (OM)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu CSS Academy, przejdź na CoddyKit PRO. Kurs CSS Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Typowany model obiektowy CSS (OM)”?
Pracuj z wartościami CSS jako typowanymi obiektami JavaScript zamiast ciągami znaków, używając interfejsu CSS Typed OM API. Ćwiczysz CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć CSS Academy?
Nie wymagamy żadnego doświadczenia. CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Typowany model obiektowy CSS (OM)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji CSS Academy?
Tak. Każda lekcja CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Typowany model obiektowy CSS (OM)
- API właściwości i wartości CSS (@property)
- CSS Paint API: Worklety
- CSS Layout API i zakres