Wprowadzenie do Cell Atomy i Molekuły

Cell jest biblioteką, którą stworzyłem, aby pomóc w stylizacji komponentów UI przy użyciu Sass. Ten artykuł będzie krótkim wprowadzeniem do kilku koncepcji, które (jeśli jesteś zaznajomiony z Sassem) powinny wydawać się znajome. Koncepcje te nazywają się Cell Atoms i Cell Molecules.

A Cell Atom jest pojedynczą właściwością CSS, która wyprowadza dwie różne wartości, które zostaną zastosowane do elementu w oparciu o jakiś przekazany kontekst. W tym przypadku, kontekst może oznaczać takie rzeczy jak obecność pewnych modyfikatorów/pseudo-stanów, lub czy element/jakiś element nadrzędny jest najechany itp. Jest to głównie przydatne podczas przełączania właściwości na podstawie jakiegoś zdarzenia lub interakcji.

Przykładem może być użycie właściwości display do ukrycia/pokazania elementu. To czy wartością właściwości display jest none czy coś w stylu block będzie zależało od kontekstu lub warunku, o którym mowa. W zwykłym Sassie, może to wyglądać mniej więcej tak:

…co spowoduje pokazanie elementu, gdy ma on klasę active. Gdybyśmy chcieli pokazać element, gdy konkretny rodzic miał klasę active, mogłoby to wyglądać tak:

Możemy przedstawić ten przykład za pomocą jakiegoś API CSS-in-JS, które mogłoby wyglądać tak:

API zaczerpnięte z biblioteki Lucid

…tutaj widać jak w przykładzie JavaScript definiujemy tylko jedną właściwość display, której wartość jest dynamiczna. Wartość ta byłaby ponownie oceniana przy każdej zmianie obiektu context, a element zostałby odpowiednio przemalowany.

W przykładzie Sass, biorąc pod uwagę kaskadową naturę CSS (i brak dynamiki), definiujemy wiele właściwości display w sposób kaskadowy i pozwalamy, aby bitwa specyficzności określiła resztę. Ponieważ Sass posiada funkcje, moglibyśmy pomyśleć o obejściu tego problemu poprzez stworzenie niestandardowej funkcji context w celu naśladowania zachowania CSS-in-JS, coś w stylu:

Jednakże, to nigdy nie mogłoby zadziałać – to mogłoby tylko kiedykolwiek skompilować się do pojedynczej reguły CSS (używając jakiejkolwiek wartości ocenianej w czasie kompilacji). Sass mógłby ocenić context('.someParent.active', block, none) tylko raz zanim zostanie wysłany do klienta, a więc stworzyć tylko pojedynczą regułę CSS; podczas gdy JavaScript mógłby ocenić context.someParent.active ? 'block' : 'none' w locie.

Najlepszym co moglibyśmy zrobić byłoby posiadanie oddzielnych Mixinów dla każdej interesującej nas właściwości. Ten Mixin byłby znany jako Cell Atom. Jeśli użyjemy Cell i Atomu display, powyższy przykład może być zredukowany do:

…co jak widzisz jest teraz bardzo podobne do wersji CSS-in-JS, pozostawiając nam mniej kodu, który jest tak samo czytelny. To mogłoby teraz, pod maską, wyprowadzać dowolną ilość właściwości CSS w dowolną ilość reguł. Powyższy kod byłby syntaktycznym cukrem dla:

…i rzeczywiście, każda instancja Atomu Cell byłaby reprezentowana pod maską w podobny sposób do powyższego (z kontekstem, który jest przekazywany do Atomu jest przekazywany do context Mixin).

Ta koncepcja jest przydatna w niektórych przypadkach, w których określone konteksty wymagają tylko pojedynczej właściwości CSS do modyfikacji, z przykładem hide/show jako najczęstszym przypadkiem użycia, o którym mogłem pomyśleć. Gdybyś potrzebował zastosować wiele właściwości CSS do elementu w oparciu o jakiś przekazany kontekst/warunek, powinieneś użyć context Mixin.

Oczywiście, możesz myśleć, że posiadanie oddzielnych Mixinów dla każdej właściwości jest przesadą, i miałbyś rację, biorąc pod uwagę, że istnieje, co, jak 800 właściwości CSS? Jednakże większość właściwości CSS nie powinna być używana w ten sposób – tylko właściwości które wpływają na układ/funkcjonalność (a nawet wtedy, tylko gdy pojedyncza właściwość kontroluje pojedyncze zachowanie, takie jak hide/show). W związku z tym, Cell obecnie posiada tylko Atomy dla display, position i visibility właściwości.

Cell Molecules

Cell Molecule to w zasadzie zwykły Mixin Sass, który tworzy jedną lub więcej reguł CSS w oparciu o przekazany kontekst/warunek, aby osiągnąć jeden określony rezultat. Celem jest abstrakcja powtarzających się wzorców w kompozytowe Mixiny, poprawiające przejrzystość i łatwość utrzymania Twojej bazy kodu Sass. Żadne właściwości CSS ani wartości nie są przekazywane podczas używania (wywoływania) Molekuł Komórkowych, w przeciwieństwie do Atomów Komórkowych.

Jest to dość podobne w zasadzie do biblioteki Bourbon Sass (różnica polega na tym, że Molekuła Komórkowa pobiera dane wejściowe z kontekstu i wyprowadza wiele reguł sterowanych kontekstem). Biorąc pod uwagę poprzedni przykład hide/show, może to być wyabstrahowane do Molekuły Cell i użyte w następujący sposób:

…zasadniczo mówiąc Cell „Ukryj ten element, chyba że przekazany warunek jest spełniony, w tym przypadku pokaż go”. Wymagana funkcjonalność (tj. stosowanie wartości none lub block) byłaby obsługiwana pod maską przez hipotetyczny show Mixin. Powyższe byłoby cukrem syntaktycznym dla:

…odpowiednik (w zasadzie) tego wcześniejszego przykładu waniliowego Sass, który widzieliśmy:

Nie ma prawdziwego twardego sposobu na zakwalifikowanie jakiegoś zestawu CSS jako Molekuły Komórki; może to być dowolny abstrakcyjny i powtarzający się wzorzec, który wymaga domyślnego stanu, który zmienia się w oparciu o jakiś kontekst.

Cell Molecules są tylko filozofią/koncepcją; obecnie nie ma żadnej biblioteki Molekuł Cell ani niczego

Odwiedź Cell Wiki, aby uzyskać więcej informacji dotyczących biblioteki Cell

Wniosek

Choć Atomy i Molekuły Cell służą różnym celom, ostatecznym celem obu jest utrzymanie stylów bardziej złożonymi. Używając Cell i identyfikując Atomy i Molekuły w twojej bazie kodu (lub przewidując je, jeśli tworzysz nowy projekt/funkcję) możesz zapewnić, że twoja baza kodu jest bardziej zwięzła i semantyczna, a mniej najeżona różnymi właściwościami CSS, które bez wątpienia zostaną wstawione w nie do końca odpowiednim porządku.

Patrząc na różne przykłady z tego artykułu obok siebie, możemy lepiej zrozumieć motywacje stojące za tymi koncepcjami (pamiętaj, że wszystkie te przykłady osiągają to samo):

W wielu przypadkach trzeba rozważyć, czy istnieje potrzeba tworzenia Molekuły dla czegoś – w powyższym przykładzie, gdzie Molekuła wpływa tylko na pojedynczą właściwość CSS, może być bardziej pragmatyczne trzymać się używania display Atomu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.